• 検索結果がありません。

リソース管理ガイド - Fedora 16 のシステムリソース管理

N/A
N/A
Protected

Academic year: 2022

シェア "リソース管理ガイド - Fedora 16 のシステムリソース管理"

Copied!
48
0
0

読み込み中.... (全文を見る)

全文

(1)

Fedora 16

リソース管理ガイド

Fedora 16 のシステムリソース管理

Prpič Martin [FAMILY Given]

Landmann Rüdiger [FAMILY Given]

Silas Douglas [FAMILY Given]

(2)

リソース管理ガイド

Fedora 16 リソース管理ガイド Fedora 16 のシステムリソース管理 エディッション 1

著者 Prpič Martin [FAMILY Given]

[email protected]

著者 Landmann Rüdiger [FAMILY

Given]

[email protected]

著者 Silas Douglas [FAMILY Given]

[email protected]

Copyright © 2011 Red Hat, Inc and others.

The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is

available at http://creativecommons.org/licenses/by-sa/3.0/. The original authors of this document, and Red Hat, designate the Fedora Project as the "Attribution Party" for purposes of CC-BY-SA.

In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.

Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.

Red Hat, Red Hat Enterprise Linux, the Shadowman logo, JBoss, MetaMatrix, Fedora, the Infinity Logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.

For guidelines on the permitted uses of the Fedora trademarks, refer to https://fedoraproject.org/

wiki/Legal:Trademark_guidelines.

Linux® is the registered trademark of Linus Torvalds in the United States and other countries.

Java® is a registered trademark of Oracle and/or its affiliates.

XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.

MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.

All other trademarks are the property of their respective owners.

Fedora 16 のシステムリソース管理

(3)

序文 v

1. 表記方法 ... v

1.1. 印刷における表記方法 ... v

1.2. 引用における表記方法 ... vi

1.3. 注記および警告 ... vii

2. フィードバック ... vii

1. Control Group について (cgroup) 1

1.1. Control Group の構成 ... 1

1.2. サブシステム、階層、Control Group、タスクの関係 ... 2

1.3. リソース管理の影響 ... 5

2. Control Group の使用法 7

2.1. cgconfig サービス ... 7

2.1.1. cgconfig.conf ファイル ... 7

2.2. 階層の作成とサブシステムの接続 ... 9

2.3. 既存の階層へのサブシステムの接続と接続解除 ... 11

2.4. 階層の接続解除 ... 12

2.5. Control Group の作成 ... 12

2.6. Control Group の削除 ... 13

2.7. パラメータのセッティング ... 13

2.8. Control Group へのプロセス移動 ... 15

2.8.1. cgred デーモン ... 16

2.9. Control Group 内のプロセスの開始 ... 17

2.9.1. Control Group 内のサービスの開始 ... 18

2.9.2. Root Control Group 内のプロセスの振る舞い ... 18

2.10. /etc/cgconfig.conf ファイルの生成 ... 19

2.10.1. パラメータのブラックリスト化 ... 20

2.10.2. パラメータのホワイトリスト化 ... 20

2.11. Control Group に関する情報の取得 ... 21

2.11.1. プロセスの確認 ... 21

2.11.2. サブシステムの確認 ... 21

2.11.3. 階層の確認 ... 21

2.11.4. Control Group の確認 ... 21

2.11.5. Control Group のパラメータの表示 ... 22

2.12. Control Group のアンロード ... 22

2.13. その他のリソース ... 23

3. サブシステムと調整可能なパラメータ 25

3.1. blkio ... 25

3.1.1. 比例ウェイト分割の設定オプション ... 25

3.1.2. I/O スロットリングの設定オプション ... 28

3.1.3. 共通の設定オプション ... 29

3.1.4. 使用例 ... 29

3.2. cpu ... 30

3.3. cpuacct ... 30

3.4. cpuset ... 31

3.5. devices ... 33

3.6. freezer ... 34

3.7. memory ... 35

3.8. net_cls ... 37

3.9. ns ... 38

3.10. その他のリソース ... 38

A. 改訂履歴 39

(4)
(5)

序文

1. 表記方法

本ガイドは特定の単語や語句を強調したり、 記載内容の特定部分に注意を引かせる目的で次のような表記方 法を使用しています。

PDF版 および印刷版では、 Liberation Fonts1 セットから採用した書体を使用しています。 ご使用のシステム に Liberation Fonts セットがインストールされている場合、 HTML 版でもこのセットが使用されます。 インス トールされていない場合は代替として同等の書体が表示されます。 注記: Red Hat Enterprise Linux 5 およ びそれ以降のバージョンにはデフォルトで Liberation Fonts セットが収納されます。

1.1. 印刷における表記方法

特定の単語や語句に注意を引く目的で 4 種類の表記方法を使用しています。 その表記方法および適用され る状況は以下の通りです。

等幅の太字

シェルコマンド、ファイル名、パスなどシステムへの入力を強調するために使用しています。またキー配列やキー の組み合わせを強調するのにも使用しています。 例えば、

現在作業中のディレクトリ内のファイル my_next_bestselling_novel の内容を表示させる には、 シェルプロンプトで cat my_next_bestselling_novel コマンドを入力してから Enter を押してそのコマンドを実行します。

上記にはファイル名、シェルコマンド、キーが含まれています。 すべて等幅の太字で表されているため文中内で 見分けやすくなっています。

キーが 1 つの場合と複数のキーの組み合わせになる場合を区別するため、 その組み合わせを構成するキー 同士をハイフンでつないでいます。 例えば、

Enter を押してコマンドを実行します。

1 番目の仮想ターミナルに切り替えるは、 Ctrl+Alt+F2 を押します。 X-Windows セッショ ンに戻るには、 Ctrl+Alt+F1 を押します。

最初の段落では押すべき 1 つのキーを特定して強調しています。 次の段落では同時に押すべき 3 つのキー の組み合わせが 2 種類ありそれぞれ強調されています。

ソースコードの説明では 1 段落内で提示されるクラス名、 メソッド、 関数、 変数名、 戻り値を上記のように 等 幅の太字 で表示します。 例えば、

ファイル関連のクラス群はファイルシステムに対しては filesystem、 ファイルには file、 ディ レクトリには dir をそれぞれ含みます。 各クラスは個別に関連する権限セットを持っていま す。

プロポーショナルの太字

アプリケーション名、 ダイアログボックスのテキスト、ラベル付きボタン、 チェックボックスとラジオボタンのラベ ル、 メニュータイトルとサブメニュータイトルなどシステム上で見られる単語や語句を表します。 例えば、

(6)

序文

メインメニューバーから システム > 個人設定 > マウス の順で選択し マウスの個人設定 を 起動します。 ボタン タブ内で 左ききのマウス チェックボックスをクリックしてから 閉じる をク リックしマウスの主要ボタンを左から右に切り替えます (マウスを左ききの人が使用するのに 適した設定にする)。

gedit ファイルに特殊な文字を挿入する場合は、 メインメニューバーから アプリケーション >

アクセサリ > 文字マップ の順で選択します。 次に 文字マップ メニューバーから 検索 > 検 索… と選択して 検索 フィールド内にその文字名を入力し 次 をクリックします。 探している 文字が 文字表 内で強調表示されます。 この強調表示された文字をダブルクリックすると コ ピーするテキスト フィールド内に置かれるので次に コピー ボタンをクリックします。 ここでド キュメントに戻り gedit メニューバーから 編集 > 貼り付け を選択します。

上記には、 アプリケーション名、 システム全体のメニュー名と項目、 アプリケーション固有のメニュー名、 GUI インタフェースで見られるボタンやテキストがあります。 すべてプロポーショナルの太字で表示されているため 文中内で見分けやすくなっています。

等等等等等等等等等等 または 等等等等等等等等等等等等等等等等

等幅の太字やプロポーショナルの太字はいずれであっても斜体の場合は置換可能なテキストか変化するテキ ストを示します。 斜体は記載されている通りには入力しないテキスト、あるいは状況に応じて変化する出力テキ ストを表します。 例えば、

ssh を使用してリモートマシンに接続するには、 シェルプロンプトで ssh

[email protected] と入力します。 リモートマシンが example.com であり、 そのマ シンで使用しているユーザー名が john なら ssh [email protected] と入力します。

mount -o remount file-system コマンドは指定したファイルシステムを再マウントしま す。 例えば、 /home ファイルシステムを再マウントするコマンドは mount -o remount /home になります。

現在インストールされているパッケージのバージョンを表示するには、 rpm -q package コ マンドを使用します。 結果として次を返してきます、 package-version-release。

上記の太字斜体の単語 — username、 domain.name、 file-system、 package、 version、 release に注目 してください。 いずれもコマンドを発行するときに入力するテキスト用のプレースホルダーかシステムにより出 力されるテキスト用のプレースホルダーになっています。

タイトル表示のような標準的な使用の他、 斜体は新しい重要な用語が初めて出現する場合にも使用されま す。 例えば、

Publican は DocBook の発行システムです。

1.2. 引用における表記方法

端末の出力とソースコード一覧は、視覚的に周囲の文から区別されています。

端末に送信される出力は mono-spaced roman (等幅の Roman) にセットされるので以下のように表示されま す。

books Desktop documentation drafts mss photos stuff svn books_tests Desktop1 downloads images notes scripts svgs

(7)

注記および警告

import javax.naming.InitialContext;

public class ExClient {

public static void main(String args[]) throws Exception

{

InitialContext iniCtx = new InitialContext();

Object ref = iniCtx.lookup("EchoBean");

EchoHome home = (EchoHome) ref;

Echo echo = home.create();

System.out.println("Created Echo");

System.out.println("Echo.echo('Hello') = " + echo.echo("Hello"));

} }

1.3. 注記および警告

情報が見過ごされないよう 3 種類の視覚的なスタイルを使用して注意を引いています。

注記

注記は説明している部分に対するヒントや近道あるいは代替となる手段などになります。注記を無視して も悪影響はありませんが知っておくと便利なコツを見逃すことになるかもしれません。

重要

重要ボックスは見逃しやすい事項を詳細に説明しています。現在のセッションにのみ適用される設定上の 変更点、 更新を適用する前に再起動が必要なサービスなどがあります。重要ボックスを無視してもデータ を喪失するような結果にはなりませんがイライラ感やフラストレーションが生じる可能性があります。

警告

警告は無視しないでください。警告を無視するとデータを喪失する可能性が非常に高くなります。

2. フィードバック

本ガイドに誤植を見つけられた場合や本ガイドの改善案をお持ちの場合はぜひお知らせください。 Bugzilla

http://bugzilla.redhat.com/bugzilla/ にて、 Product には Fedora Documentation. を選びレポートの提出

をお願いいたします。

バグレポートを提出される場合は、 そのガイドの識別子となる resource-management-guide を必ず明記して 頂くようお願いします。

(8)

序文

ドキュメントに関する改善のご意見についてはできるだけ具体的にお願いいたします。 エラーを発見された場 合は、 セクション番号および該当部分の前後の文章も含めてご報告頂くと照合が容易になります。

(9)

Control Group について (cgroup)

Fedora 16 では、control group と呼ばれる新たなカーネル機能を搭載しています。本ガイドでは、この機能 を cgroup という略称で記載しています。cgroup により、ユーザーは、CPU 時間、システムメモリー、ネットワー ク帯域幅などのリソースやそれらのリソースの組み合わせを、システム上で実行中のユーザー定義タスクグ ループ (プロセス) の間で割り当てることができるようになります。また、設定した cgroup のモニタリングを行っ たり、特定のリソースに対する cgroup のアクセスを拒否することができるのに加えて、稼働中のシステムで cgroup を動的に再設定することもできます。cgconfig (「control group config 」) サービスがブート時に起動 し、事前に定義された cgroup を再構築するように設定して、再起動後もリソース割り当てが永続されるようす ることが可能です。

cgroup を使用することにより、システム管理者は、システムリソースの割り当て、優先順位付け、拒否、管理、

モニタリングに対する粒度の細かいコントロールが可能となります。ハードウェアリソースは、タスクおよびユー ザー間で素早く分配され、全体的な効率が向上します。

1.1. Control Group の構成

プロセスと同様に、cgroup は階層的に構成されており、子 cgroup は、親 cgroup の属性の一部を継承する ようになっています。ただし、これら 2 つのモデルの間には相異点があります。

Linux プロセスモデル

Linux システム上のプロセスはすべて、init プロセスという、共通の親プロセスの子プロセスです。init プロ セスは、ブート時にカーネルによって実行され、その他のプロセスを開始します (その結果、その他のプロセスが それら独自の子プロセスを開始する場合もあります)。プロセスはすべて、単一の親プロセスの下位プロセスで あるため、Linux プロセスモデルは、単一の階層またはツリーとなっています。

また、init を除いた Linux プロセスはすべて、環境 (例: PATH 変数)1 および親プロセスのその他特定の属性 (例: オープンファイル記述子) を継承します。

cgroup モデル

cgroup は、以下のような点でプロセスと類似しています:

• 階層型である

• 子 cgroup は、親 cgroup から特定の属性を継承する

根本的な相違点は、cgroup の場合には、多数の異なる階層がシステム上に同時に存在可能であることで す。Linux プロセスモデルが単一のプロセスツリーとすれば、cgroup モデルは、単一もしくは複数の異なる、連 結されていないタスクツリー (すなわちプロセス)ということになります。

cgroups の複数の分離した階層が必要なのは、各階層が 単単単単単単単単 単単単単単単 に接続されていることが理 由です。サブシステム2 とは、CPU 時間やメモリーなどの単一のリソースを指します。Fedora 16 は、9 つの cgroup サブシステムを提供しています。それらの名前と機能は、以下のとおりです。

Fedora で利用可能なサブシステム

• blkio — このサブシステムは、物理ドライブ (例: ディスク、ソリッドステート、USB) などのブロックデバイスへ の入力およびブロックデバイスからの出力のアクセスの制限を設定します。

• cpu — このサブシステムは、スケジューラを使用して cgroup タスクに CPU へのアクセスを提供します。

1 親プロセスは、子プロセスに受け渡す前に環境を変更することが可能。

(10)

第1章 Control Group について (cgroup)

• cpuacct — このサブシステムは、cgroup 内のタスクで使用される CPU リソースについての自動レポートを 生成します。

• cpuset — このサブシステムは、個別の CPU (マルチコアシステム上) およびメモリーノードを cgroup 内の タスクに割り当てます。

• devices — このサブシステムは、cgroup 内のタスクによるデバイスへのアクセスを許可または拒否します。

• freezer — このサブシステムは、cgroup 内のタスクを一時停止または再開します。

• memory — このサブシステムは、cgroup 内のタスクによって使用されるメモリーに対する制限を設定し、それ らのタスクによって使用されるメモリーリソースについての自動レポートを生成します。

• net_cls — このサブシステムは、Linux トラフィックコントローラ (tc) が特定の cgroup から発信されるパ ケットを識別できるようにするクラス識別子 (classid) を使用して、ネットワークパケットにタグを付けます。

• ns — namespace サブシステム。

サブシステムは、リソースコントローラという別名でも知られています

man ページやカーネルのドキュメントなど、cgroup に関連した資料で 単単単単単単単単単単 または単に 単単単単単

単 という用語が使用されている場合があります。これらの 2 つの用語は、「subsystem」と同じ意味です。

これは、サブシステムが通常リソースのスケジュールを行ったり、サブシステムが接続されている階層内の cgroups に対する制限を適用したりすることが理由で、このように呼ばれています。

サブシステム (リソースコントローラ) の定義は、極めて大まかで、タスクグループ (すなわちプロセス) に 基づいて動作するものとされています。

1.2. サブシステム、階層、Control Group、タスクの関係

cgroup の用語においては、システムプロセスはタスクと呼ばれることを念頭に置いてください。

ではここで、サブシステム、cgroup の階層、およびタスクの間における関係を管理するにあたってのいくつかの 簡単なルールとそれらのルールがもたらす影響について説明しましょう。

ルール 1

単一階層には、単一または複数のサブシステムを接続することができます。

単単単単単cpu 単単単 memory 単単単単単単単 (単単単単単単単単単単単単単単) 単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単

単単単単単単単単単単単単単単単単

(11)

ルール 2

図1.1 ルール 1

ルール 2

単一サブシステム (例: cpu) はいずれも、一つの階層にしか接続できません。

単単単単単cpu 単単単 memory 単単単単単単単 (単単単単単単単単単単単単単単) 単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単 単単単単単単単

図1.2 ルール 2—丸付き数字はサブシステムが接続される時系列を表します。

ルール 3

システムに新たな階層が作成されると、システム上の全タスクは最初に、その階層のデフォルトの cgroup のメ ンバーとなります。これは、root cgroup としても知られています。作成した単一階層ではいずれも、システム上 の各タスクは、その階層内で 単単単単単単 cgroup のメンバーにすることができます。cgroup がそれぞれ異なる階

(12)

第1章 Control Group について (cgroup)

の第 2 の cgroup のメンバーとなると、タスクはその階層内の第 1 の cgroup から即時に削除されます。タス クが同じ階層内の異なる 2 つの cgroup のメンバーとなることはありません。

単単単単単cpu 単 memory 単単単単単単単単 cpu_and_mem 単単単単単単単単単単単単単単単net_cls 単単単単単単単 net 単単単単単単単単単 単単単単単単単単単単単単 httpd 単単単単単単cpu_and_mem 単単単単単単単 cgroup単単単単単net 単単 単単単単単 cgroup 単単単単単単単単単 単単単単単単単

httpd 単単単単単単単単単単単単単単単 cpu_and_mem 単単 cgroup 単単単単単CPU 単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単 単単単単単単単単単単 1024 MB 単単単単単単単単単単単単単単単単単単単単単単単単単単単単 net 単単 cgroup 単単単単単単単単単単 30 単単単単単単単単単 単単単単単単単単単単単単

単 1 単単単単単単単単単単単単単単単単単単単単単単単単単単単単単 1 単単 cgroup (root cgroup) 単単単単単単単単単単単単単単単単cgroup 単単単単単 単単単単単単単単単単単単単単単単単単単単 cgroup 単単単単単単単単単単単

図1.3 ルール 3

ルール 4

システム上のいずれかのプロセス (タスク) が自分自身をフォークすると、子プロセス (タスク) が作成されます。

子タスクは、自動的に、親がメンバーとなっているすべての cgroup のメンバーとなります。この後で、子タスク は、必要に応じて、異なる cgroup に移動することができますが、最初は必ず親タスクの cgroup (プロセス用 語では「環境」という) を継承します。

単単単単単単単単cpu_and_mem 単単単単 half_cpu_1gb_max 単単単単単単 cgroup 単単net 単単単単 trans_rate_30 単単単 cgroup 単単単単単単単単 httpd 単単単単単単単単単単単単単単単単単 単単 httpd 単単単単単単単単単単単単単単単単単単単単単単単単単単単単 half_cpu_1gb_max cgroup 単 trans_rate_30 cgroup 単単単単単単単単単単単単単単単単単単単単単単単単単 cgroup 単単単単 単単単

単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単 cgroup 単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単

cgroup 単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単 cgroup 単単単単単単単単単単単単単単単単単

単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単単

(13)

リソース管理の影響

図1.4 ルール 4—丸付き数字はサブシステムが接続される時系列を表します。

1.3. リソース管理の影響

• タスクは、単一の階層内では一つの cgroup のみにしか属すことができないため、任意の単一サブシステム によってタスクが制限されたり、影響を受ける状況は一つのみということになります。これは、制限ではなく特 長であり、論理にかなっています。

• 単一階層内の全タスクに影響を及ぼすように、複数のサブシステムをまとめてグループ化することができま す。その階層内の cgroup には異なるパラメータが設定されているため、これらのタスクが受ける影響が異 なってきます。

• 場合によっては、階層の 単単単単単単単単 が必要となることがあります。例えば、複数のサブシステムが接続された 階層からサブシステムを削除したり、新たな別の階層に接続する場合などです。

• 逆に言えば、別個の階層間でサブシステムを分割する必要性が低減すると、階層を削除して、そのサブシス テムを既存の階層に接続することができるということになります。

• この設計により、cpu と メモリー のサブシステムが接続されているような、単一階層内の特定のタスクに対 していくつかのパラメータを設定するなど、簡易 cgroup の使用が可能となります。

• この設計により、高度に特化した構成も可能となり、システム上の各タスク (プロセス) は、単一のサブシステ ムが接続された各階層のメンバーとすることができます。このような構成では、システム管理者があらゆるタ スクの全パラメータを全面的に管理することができます。

(14)
(15)

Control Group の使用法

The easiest way to work with cgroups is to install the libcgroup-tools package, which contains a number of cgroup-related command line utilities and their associated man pages. It is possible to mount hierarchies and set cgroup parameters (non-persistently) using shell commands and utilities available on any system. However, using the libcgroup-tools-provided utilities simplifies the process and extends your capabilities. Therefore, this guide focuses on libcgroup-tools commands throughout. In most cases, we have included the equivalent shell commands to help describe the underlying mechanism. However, we recommend that you use the libcgroup-tools commands wherever practical.

Installing the libcgroup-tools package

In order to use cgroups, first ensure the libcgroup-tools package is installed on your system by running, as root:

~]# yum install libcgroup-tools

2.1. cgconfig サービス

The cgconfig service installed with the libcgroup-tools package provides a convenient way to create hierarchies, attach subsystems to hierarchies, and manage cgroups within those hierarchies. We recommend that you use cgconfig to manage hierarchies and cgroups on your system.

The cgconfig service is not started by default on Fedora 16. When you start the service with chkconfig, it reads the cgroup configuration file — /etc/cgconfig.conf. Cgroups are therefore recreated from session to session and become persistent. Depending on the contents of the configuration file, cgconfig can create hierarchies, mount necessary file systems, create cgroups, and set subsystem parameters for each group.

The default /etc/cgconfig.conf file installed with the libcgroup-tools package creates and mounts an individual hierarchy for each subsystem, and attaches the subsystems to these hierarchies.

cgconfig サービスを停止 (service cgconfig stop コマンドを使用) すると、マウントされていたすべての階 層がアンマウントされます。

2.1.1. cgconfig.conf ファイル

/etc/cgconfig.conf ファイルには、mount と group の2つの主要タイプエントリが含まれます。mount エ ントリは、仮想ファイルシステムとして階層を作成してマウントし、サブシステムをそれらの階層に接続しま す。mount エントリは、以下のような構文を用いて定義します。

mount {

<controller> = <path>;

… }

使用例については、単2.1単mount 単単単単単単単単 を参照してください。

(16)

第2章 Control Group の使用法

例2.1 mount エントリの作成

以下の例では、cpuset サブシステム用の階層を作成します。

mount {

cpuset = /cgroup/red;

}

これに相当するシェルコマンドは以下の通りです。

~]# mkdir /cgroup/red

~]# mount -t cgroup -o cpuset red /cgroup/red

group エントリは cgroup を作成して、サブシステムパラメータをセットします。group エントリは、以下のような 構文を使用して定義します。

group <name> { [<permissions>]

<controller> {

<param name> = <param value>;

… } … }

permissions セクションはオプションである点に注意してください。グループエントリのパーミッションを定義す るには、以下のような構文を使用します。

perm { task {

uid = <task user>; gid = <task group>;

} admin {

uid = <admin name>;

gid = <admin group>;

} }

使用例については、単2.2単group 単単単単単単単単 を参照してください。

例2.2 group エントリの作成

以下の例では、sql デーモン用の cgroup を作成し、sqladmin グループのユーザーがタスクを cgroup に 追加することができ、また root ユーザーがサブシステムのパラメータを変更できるパーミッションを設定しま す。

(17)

階層の作成とサブシステムの接続

uid = root;

gid = root;

} } cpu {

cpu.shares = 100;

} }

単2.1単mount 単単単単単単単単 の mount エントリの例と組み合わせた場合に、相当するシェルコマンドは以下の

通りです。

~]# mkdir -p /cgroup/cpu/daemons/sql

~]# chown root:root /cgroup/cpu/daemons/sql/*

~]# chown root:sqladmin /cgroup/cpu/daemons/sql/tasks

~]# echo 100 > /cgroup/cpu/daemons/sql/cpu.shares

変更内容を有効化するために cgconfig サービスを再起動する

/etc/cgconfig.conf への変更内容を有効化するには、cgconfig サービスを再起動する必要がありま す。

~]# systemctl restart cgconfig.service

When you install the libcgroup-tools package, a sample configuration file is written to /etc/

cgconfig.conf. The hash symbols ('#') at the start of each line comment that line out and make it invisible to the cgconfig service.

2.2. 階層の作成とサブシステムの接続

稼働中のシステムに及ぼす影響

以下に示した新規階層作成とサブシステム接続の手順は、ご使用のシステム上で cgroup がまだ設定さ れていないことを前提としています。その場合、これらの手順は、システム上の操作には影響を及ぼしませ ん。しかし、タスクを持つ cgroup 内の調整可能なパラメータを変更すると、それらのタスクに直ちに影響 を及ぼす可能性があります。本ガイドでは、単一もしくは複数のタスクに影響を及ぼす可能性がある調整 可能な cgroup のパラメータの変更を初回に例示する際に警告します。

cgroup が設定済み (手動もしくは cgconfig サービスを使用して) のシステム上では、最初に既存の階 層をアンマウントしておかないと、これらのコマンドは失敗し、システムの操作に影響を及ぼします。実稼働 システム上ではこれらの手順を試さないようにしてください。

階層を作成して、サブシステムを接続するには、root として、/etc/cgconfig.conf ファイルの mount セクション を編集します。mount セクションのエントリは、以下のような形式になります。

subsystem = /cgroup/hierarchy;

(18)

第2章 Control Group の使用法

cgconfig は次回の起動時に、階層を作成し、サブシステムを接続します。

以下の例は、cpu_and_mem という名前の階層を作成し、cpu、cpuset、cpuacct、および memory のサブシステム を接続します。

mount {

cpuset = /cgroup/cpu_and_mem;

cpu = /cgroup/cpu_and_mem;

cpuacct = /cgroup/cpu_and_mem;

memory = /cgroup/cpu_and_mem;

}

その他の方法

シェルコマンドとユーティリティを使用して、階層の作成とサブシステムの接続を行うこともできます。

root として、その階層用の 単単単単単単単単 を作成します。マウントポイントには、cgroupの名前を入れます。

~]# mkdir /cgroup/name

例:

~]# mkdir /cgroup/cpu_and_mem

次に、mount コマンドを使用して、階層をマウントし、同時に一つまたは複数のサブシステムを接続します。例え ば:

~]# mount -t cgroup -o subsystems name /cgroup/name

ここで、subsystems は、コンマ区切りのサブシステム一覧で、また name は階層名です。利用可能な全サブ システムの簡単な説明はFedora 単単単単単単単単単単単単 に記載しています。また 3単単単単単単単単単単単単単単単単単単 には詳し い参考情報を記載しています。

例2.3 mount コマンドを使用して、サブシステムを接続します。

この例では、/cgroup/cpu_and_mem という名前のディレクトリが既に存在しており、作成する階層のマウント ポイントとして機能します。cpu、cpuset、および memory のサブシステムを cpu_and_mem と名付けた階層に 接続した後、cpu_and_mem 階層を /cgroup/cpu_and_mem に mount します。

~]# mount -t cgroup -o cpu,cpuset,memory cpu_and_mem /cgroup/cpu_and_mem

You can list all available subsystems along with their current mount points (i.e. where the hierarchy they are attached to is mounted) with the lssubsys 1 command:

~]# lssubsys -am

cpu,cpuset,memory /cgroup/cpu_and_mem net_cls

ns cpuacct devices freezer blkio

(19)

既存の階層へのサブシステムの接続と接続解除

この出力は、以下のような内容を示しています。

• cpu、cpuset、および memory のサブシステムは、/cgroup/cpu_and_mem にマウントされた階層に接続され ています。

• net_cls、ns、cpuacct、devices、freezer、および blkio のサブシステムは、対応するマウントポイントが ないことから、まだ、どの階層にも接続されていないことを示しています。

2.3. 既存の階層へのサブシステムの接続と接続解除

サブシステムを既存の階層に追加するには、既存の階層から接続を解除するか、異なる階層に移動した上 で、root として/etc/cgconfig.conf ファイルの mount セクションを 単単単単単単単単単単単単単単単単単 に記載されている のと同じ構文を用いて編集します。cgconfig は、次回の起動時に、指定した階層にしたがってサブシステムを 再編成します。

その他の方法

接続されていないサブシステムを既存の階層に追加するには、その階層を再マウントします。mount コマンドで、

追加するサブシステムと remount オプションを指定します。

例2.4 階層を再マウントしてサブシステムを追加

lssubsys コマンドは、cpu_and_mem 階層に接続されている cpu、cpuset、および memory のサブシステムを 表示します。

~]# lssubsys -am

cpu,cpuset,memory /cgroup/cpu_and_mem net_cls

ns cpuacct devices freezer blkio

remount オプションを指定し、サブシステムの一覧に cpuacct を追加した上で、cpu_and_mem 階層を再マウ ントします。

~]# mount -t cgroup -o remount,cpu,cpuset,cpuacct,memory cpu_and_mem /cgroup/cpu_and_mem

lssubsys コマンドを実行すると、cpuacct が cpu_and_mem 階層に接続されていると表示されるようになりま した。

~]# lssubsys -am

cpu,cpuacct,cpuset,memory /cgroup/cpu_and_mem net_cls

ns devices freezer blkio

また同様に、階層を再マウントしてサブシステム名を -o オプションから削除することで、既存の階層からサブシ ステムの接続を解除することができます。例えば、cpuacct サブシステムの接続を解除するには、単に再マウン トして名前を削除します。

(20)

第2章 Control Group の使用法

2.4. 階層の接続解除

cgroup の階層を 単単単単単単 するには、umount コマンドを使用します。

~]# umount /cgroup/name

例:

~]# umount /cgroup/cpu_and_mem

階層が現在空である場合 (つまり、root cgroup のみを格納している場合) には、階層はアンマウント時に非ア クティブ化されます。階層に他の cgroup が含まれる場合には、階層はマウントされていなくても、カーネル内で アクティブな状態を維持します。

階層を削除するには、その階層をアンマウントする前に、すべての子 cgroup が削除されていることを確認 してください。もしくは、cgclear コマンドを使用すると、空でない階層も非アクティブ化することができます —

単Control Group 単単単単単単単 を参照してください。

2.5. Control Group の作成

cgroups を作成するには cgcreate コマンドを使用します。cgcreate の構文は次のとおりです:

cgcreate -t uid:gid -a uid:gid -g subsystems:path

ここで:

• -t (オプション) — ユーザー (ユーザー ID、uid) とグループ (グループ ID、gid) を指定して、この cgroup の tasks 疑似ファイルを所有するようにします。このユーザーは cgroup にタスクを追加することができます。

タスクの削除

cgroup からタスクを削除するには、異なる cgroup に移動するのが唯一の手段である点に注意してく ださい。タスクを移動するには、ユーザーは 単単単単 cgroup への書き込みアクセスが必要となります。元 の cgroup への書き込みアクセスは重要ではありません。

• -a (オプション) — ユーザー (ユーザー ID、uid) とグループ (グループ ID、gid) を指定して、このcgroup の tasks 以外の全疑似ファイルを所有するようにします。このユーザーは cgroup 内のタスクが持つシステムリ ソースへのアクセスを変更できます。

• -g — cgroup が作成されるべき階層を、それらの階層に関連付けされる、コンマ区切りの subsystems 一 覧として指定します。この一覧内のサブシステムが異なる階層にある場合には、それらの各階層内でグルー プが作成されます。階層の一覧の後には、コロンならびに階層に対して相対的な子グループへの path が 続きます。このパスには、階層のマウントポイントを入れないでください。

例えば、/cgroup/cpu_and_mem/lab1/ディレクトリ内に配置されている cgroup が単に lab1 という名前で ある場合でも、1 つのサブシステムに対して階層は 1 つしかないため、そのパスは既に一意に特定されてい ることになります。また、グループは、cgroup が作成された階層内に存在する全サブシステムによって制御さ

(21)

その他の方法

同じ階層内の cgroup はすべて同じコントローラを持つため、子グループは親グループと同じコントローラを 持つことになります。

例2.5 cgcreate の使用方法

cpu および memory サブシステムが cpu_and_mem 階層に一緒にマウントされており、かつ net_cls コント ローラが net という名前の別の階層にマウントされているシステムを想定して、以下のコマンドを実行しま す。

~]# cgcreate -g cpu,net_cls:/test-subgroup

cgcreate コマンドにより、test-subgroup という名前の 2 つのグループを作成します。一方 は、cpu_and_mem 階層に、もう一方は net 階層に入ります。 cgcreate コマンドで指定してなくて も、cpu_and_mem 階層内の test-subgroup グループは、 memory サブシステムによって制御されます。

その他の方法

cgroup の子を作成するには、mkdir コマンドを使用します:

~]# mkdir /cgroup/hierarchy/name/child_name

例:

~]# mkdir /cgroup/cpuset/lab1/group1

2.6. Control Group の削除

cgdelete で cgroup を削除します。この構文は、cgcreate の構文と似ています。以下のコマンドを実行します:

cgdelete subsystems:path

ここで:

subsystems は、コンマ区切りのサブシステム一覧です。

path は、階層の root に対して相対的な cgroup へのパスです。

例:

~]# cgdelete cpu,net_cls:/test-subgroup

cgdelete で -r のオプションを使用すると、すべてのサブグループを再帰的に削除することもできます。

cgroup を削除すると、その cgroup のタスクは、親グループに移動します。

2.7. パラメータのセッティング

該当する cgroup を修正できるパーミッションを持つユーザーアカウントから、cgset コマンドで、サブシステム のパラメータをセットします。例えば、/cgroup/cpuset/group1 が存在する場合には、以下のようなコマンドで、

このグループがアクセスできる CPU を指定します。

(22)

第2章 Control Group の使用法

cgset の構文は次のとおりです:

cgset -r parameter=value path_to_cgroup

ここで:

parameter はセットするパラメータで、特定の cgroup のディレクトリ内のファイルに対応しています。

value はパラメータ用の値です

path_to_cgroup は 単単単 root 単単単単単 cgroup へのパスです。例えば、root グループのパラメータを設定

するには、(/cgroup/cpuacct/ が存在する場合)、以下のコマンドを実行します。

cpuacct]# cgset -r cpuacct.usage=0 /

また、. は root グループ (つまり、root グループ自体) に対して相対的であるため、以下のコマンドを実行す ることもできます。

cpuacct]# cgset -r cpuacct.usage=0 .

ただし、/ は推奨の構文である点に注意してください。

root グループにパラメータの

root グループに設定できるパラメータはごくわずかです (例: 上記の例に示した、cpuacct.usage パラメータ)。これは、root グループが既存のリソースをすべて所有しており、特定のパラメータ (例:

cpuset.cpu パラメータ) を定義することによって既存のプロセスを制限することは意味がないためで す。

root グループのサブグループである group1 のパラメータを設定するには、以下のコマンドを実行します。

cpuacct]# cgset -r cpuacct.usage=0 group1

グループ名の末尾のスラッシュ (例: cpuacct.usage=0 group1/) はオプションです。

cgset で設定できる値は、特定の階層のより高位で設定されている値によって左右される可能性があります。

例えば、group1 がシステム上の CPU 0 のみを使用するように制限されている場合、group1/subgroup1 が CPU 0 および 1 を使用するように、もしくは CPU 1 のみを使用するようには設定できません。

また、cgset を使用して、異なる cgroup からパラメータをコピーすることもできます。例えば:

~]# cgset --copy-from group1/ group2/

cgset を用いてパラメーターをコピーするための構文は次のとおりです:

cgset --copy-from path_to_source_cgroup path_to_target_cgroup

ここで:

(23)

その他の方法

path_to_target_cgroup は、その階層の root グループに対して相対的な、コピー先 cgroup へのパ

スです。

一つのグループから別のグループにパラメータをコピーする前には、様々なサブシステムの必須パラメータが 設定済みであることを確認してください。必須パラメータが設定されていない場合にはコマンドが失敗してしま います。必須パラメータに関する詳しい情報は、 単単単単単単単単 を参照してください。

その他の方法

cgroup ディレクトリ内のパラメータをセットするには、echo コマンドを使用して その値を該当するサブシステム の疑似ファイルに書き込みます。例えば、以下のコマンドは、値 0-1 を cgroup group1 の cpuset.cpus 疑似 ファイルに 書き込みます。

~]# echo 0-1 > /cgroup/cpuset/group1/cpuset.cpus

この値を入れると、この cgroup のタスクはシステム上の CPU 0 と 1 に限定されます。

2.8. Control Group へのプロセス移動

cgclassify コマンドを実行して、プロセスを cgroup に移動します。

~]# cgclassify -g cpu,memory:group1 1701

cgclassify の構文は次のとおりです:

cgclassify -g subsystems:path_to_cgroup pidlist

ここで:

subsystems は、コンマ区切りのサブシステム一覧、または、利用可能なすべてのサブシステムに関連付け

された階層内のプロセスを起動するための * とします。同じ名前の cgroup が複数の階層に存在する場合 には、-g オプションを指定すると、それらの各グループ内にプロセスが移動される点に注意してください。ここ で指定するサブシステムの各階層内に cgroup が存在していることを確認してください。

path_to_cgroup は、その階層内の cgroup へのパスです

pidlist は、単単単単単単単 (PID) のスペースで区切られた一覧です。

また、pid の前に -- sticky オプションを付けて、同じ cgroup の子プロセスを保持することもできます。この オプションをセットしないで cgred デーモンが 稼働していると、子プロセスは /etc/cgrules.conf にあるセッ ティングに基づいて cgroup に割り当てられますが、プロセス自体はそれを開始した cgroup 内に残ります。

cgclassify を使用すると、いくつかのプロセスを同時に移動することができます。例えば、以下のコマンドは 1701 と 1138 の PID を持つプロセスを cgroup group1/ に移動します:

~]# cgclassify -g cpu,memory:group1 1701 1138

移動する PID は、スペースで区切り、また指定したグループは異なる階層内にある必要がある点に注意してく ださい。

その他の方法

プロセスを cgroup のディレクトリに移動するには、その PID を cgroup の tasks ファイルに 書き込みます。例

(24)

第2章 Control Group の使用法

~]# echo 1701 > /cgroup/lab1/group1/tasks

2.8.1. cgred デーモン

cgred は、/etc/cgrules.conf ファイル内にセットされたパラメータセットにしたがってタスクを cgroup に移 動するデーモンです。/etc/cgrules.conf ファイル内のエントリは、次の2つの形式のいずれかとなります。

user hierarchies control_group

user:command hierarchies control_group

例:

maria devices /usergroup/staff

このエントリは、maria というユーザーに属するプロセスはいずれも、/usergroup/staff cgroup 内に指定さ れたパラメータにしたがってデバイスサブシステムにアクセスすることを指定します。特定のコマンドを特定の cgroup に関連付けるには、以下のようにして command パラメータを追加します。

maria:ftp devices /usergroup/staff/ftp

このエントリにより、maria という名前のユーザーが ftp コマンドを使用する時には、devices サブシステムが 入っている階層の /usergroup/staff/ftp cgroup へプロセスが自動的に移動するように指定されるように なります。 ただし、このデーモンは、該当する条件が満たされている場合にのみ、プロセスを cgroup に移動す る点に注意してください。このため、ftp プロセスが、誤ったグループで短時間実行される可能性があります。ま た、そのプロセスが誤ったグループ内にある間に子プロセスが急速に発生した場合には、それらは移動されな い可能性があります。

/etc/cgrules.conf ファイル内のエントリには、以下のような表記を追加することが可能です。

• @ — user にプレフィックスを付けた場合には、個別のユーザーではなくグループを示します。 例え

ば、@admins は admins グループ内のすべてのユーザーです。

• * — 「すべて」を示します。例えば、subsystem フィールド内の * は全サブシステムを示します。

• % — その上の行の項目と同じ項目を示します。例えば:

@adminstaff devices /admingroup

@labstaff % %

(25)

Control Group 内のプロセスの開始

2.9. Control Group 内のプロセスの開始

必須のパラメータ

サブシステムによっては、それらのサブシステムのいずれかを使用する cgroup にタスクを移動できる前 に設定しておく必要のある必須パラメータがあります。例えば、cpuset サブシステムを使用する cgroup にタスクを移動する前には、その cgroup に対して、cpuset.cpus と cpuset.mems のパラメータを定義す る必要があります。

このセクション内の例は、コマンド用の正しい構文を示していますが、これは例の中で使用されているコン トローラ用に関連した 必須パラメータをセットしているシステム上でのみ機能します。関連したコントロー ラをまだ設定していない場合は、このセクションから サンプルコマンドを直接コピーしても自分のシステム 上で機能させることは期待できません。

特定のサブシステムでそのパラメータが必須であるかについては、3単単単単単単単単単単単単単単単単単単 を参照して ください。

cgexec コマンドを実行して、cgroup 内のプロセスを開始することもできます。例えば、 以下のコマンドは、その グループに課せられた制限にしたがって、group1 cgroup 内で lynx Web ブラウザを起動します。

~]# cgexec -g cpu:group1 lynx http://www.redhat.com

cgexec の構文は次のとおりです:

cgexec -g subsystems:path_to_cgroup command arguments

ここで:

subsystems は、コンマ区切りのサブシステム一覧、または、利用可能なすべてのサブシステムに関連付け

された階層内のプロセスを起動するための * とします。単単単単単単単単単単単単単単 でも説明しているように、同じ名 前の cgroup が複数の階層に存在する場合には、-g オプションを指定すると、それらの各グループ内にプロ セスが作成される点に注意してください。ここで指定するサブシステムの各階層内に cgroup が存在してい ることを確認してください。

path_to_cgroup は、階層に対して相対的な cgroup へのパスです。

command は実行するコマンドです。

arguments はコマンドのすべての引数です。

command の前に -- sticky オプションを追加すると、同じ cgroup の子プロセスを維持することもできます。

このオプションをセットしないで cgred が稼働すると、子プロセスは /etc/cgrules.conf にあるセッティングに 基づいて cgroup に割り当てられます。しかし、 プロセス自体はそれを開始した cgroup 内に残ります。

その他の方法

新たなプロセスを開始すると、そのプロセスは、親プロセスのグループを継承します。このため、特定の cgroup でプロセスを開始するもう一つの方法として、シェルプロセスをそのグループに移動し (単Control Group 単単単単

単単単単単 を参照)、そのシェルからプロセスを起動することができます。例えば:

~]# echo $$ > /cgroup/lab1/group1/tasks

(26)

第2章 Control Group の使用法

lynx

lynx を終了したあとには、既存のシェルは依然として group1 cgroup にあることに注意してください。したがっ て、より適切な方法は以下のようになります。

~]# sh -c "echo \$$ > /cgroup/lab1/group1/tasks && lynx"

2.9.1. Control Group 内のサービスの開始

cgroup 内の特定のサービスを起動することができます。cgroup 内で起動できるサービスは、以下の条件を満 たしている必要があります。

• /etc/sysconfig/servicename ファイルを使用する

• サービスを起動するのに /etc/init.d/functions の daemon() 関数を使用する

cgroup 内で条件に適合したサービスを開始するには、/etc/sysconfig 内でそのサービスのファイルを編集し て、 CGROUP_DAEMON="subsystem:control_group" の 形式でエントリを追加します。ここで、subsystem は特定の階層に関連付けされたサブシステムであり、 control_group はその階層内の cgroup です。例え ば:

CGROUP_DAEMON="cpuset:daemons/sql"

2.9.2. Root Control Group 内のプロセスの振る舞い

blkio および cpu の特定の設定オプションは、ルート cgroup において実行しているプロセス(タスク)に、サブ グループにおけるものと異なる方法で影響します。以下の例を検討します:

1. あるルートグループの下に二つのサブグループを作成します: /rootgroup/red/ および /rootgroup/

blue/

2. 各サブグループおよびルートグループにおいて、cpu.shares 設定オプションを定義し、1 に設定します。

上で設定されたシナリオにおいて、各グループにおかれた一つのプロセス(つまり、/rootgroup/tasks, / rootgroup/red/tasks および /rootgroup/blue/tasks におかれた一つのタスク)は CPU を 33.33% 消費 することになります:

/rootgroup/ process: 33.33%

/rootgroup/blue/ process: 33.33%

/rootgroup/red/ process: 33.33%

サブグループ blue および red に置かれた他のプロセスはすべて、そのサブグループにおいて複数のプロセス の間で分けるために特定のサブグループに割り当てられている、CPU の 33.33% という結果になります。

しかし、ルートグループに置かれた複数のプロセスは、グループごとではなく、プロセスごとに CPU リソース を分け合うことになります。たとえば、/rootgroup/ に3つのプロセス、/rootgroup/red/ に1つのプロセス、/

rootgroup/blue/ に1つのプロセスがあり、すべてのグループにおいて cpu.shares オプションが 1 に設定さ れていると、CPU リソースは以下のように分けられます:

(27)

/etc/cgconfig.conf ファイルの生成

そのため、利用可能な資源を重みや配分に基づいて分割する blkio および cpu 設定オプション(たとえ ば、cpu.shares または blkio.weight)を使用するとき、すべてのプロセスをルートグループから特定のサブグ ループに移動することを推奨します。すべてのプロセスをルートグループから特定のサブグループに移動する には、以下のコマンドを使用できます:

rootgroup]# for i in `cat tasks`; do echo $i > red/tasks; done

2.10. /etc/cgconfig.conf ファイルの生成

/etc/cgconfig.conf ファイルの設定は cgsnapshot ユーティリティを使用して、現在の cgroup 設定から 生成することができます。このユーティリティは、すべてのサブシステムの現在の状態およびそれらの cgroups のスナップショットをとり、それらの設定を /etc/cgconfig.conf ファイルに表現されるように返します。単

2.6単cgsnapshot 単単単単単単単単単単単単は cgsnapshot ユーティリティの使用例を示します。

例2.6 cgsnapshot ユーティリティの使用法

以下のコマンドを使用してシステムにおいて cgroups を設定したと仮定します:

~]# mkdir /cgroup/cpu

~]# mount -t cgroup -o cpu cpu /cgroup/cpu

~]# mkdir /cgroup/cpu/lab1

~]# mkdir /cgroup/cpu/lab2

~]# echo 2 > /cgroup/cpu/lab1/cpu.shares

~]# echo 3 > /cgroup/cpu/lab2/cpu.shares

~]# echo 5000000 > /cgroup/cpu/lab1/cpu.rt_period_us

~]# echo 4000000 > /cgroup/cpu/lab1/cpu.rt_runtime_us

~]# mkdir /cgroup/cpuacct

~]# mount -t cgroup -o cpuacct cpuacct /cgroup/cpuacct

上のコマンドにより cpu サブシステムに対して、いくつかのパラメーターに対する特定の値を持つ、2つのサ ブシステムをマウントして2つの cgroups を作成しました。そして、cgsnapshot コマンドを(with the -s オプ ションおよび空の /etc/cgsnapshot_blacklist.conf ファイル2とともに)実行することにより以下の出力が 生成されます:

~]$ cgsnapshot -s

# Configuration file generated by cgsnapshot mount {

cpu = /cgroup/cpu;

cpuacct = /cgroup/cpuacct;

}

group lab2 { cpu {

cpu.rt_period_us="1000000";

cpu.rt_runtime_us="0";

cpu.shares="3";

} }

group lab1 { cpu {

cpu.rt_period_us="5000000";

2 cpu.shares パラメーターはデフォルトで /etc/cgsnapshot_blacklist.conf ファイルに指定されます、これは単2.6単cgsnapshot 単単単単

(28)

第2章 Control Group の使用法

cpu.rt_runtime_us="4000000";

cpu.shares="2";

} }

上の例において使用されている -s オプションは、cgsnapshot ユーティリティのブラックリストまたはホワイト リストに定義されていないパラメーターにより引き起こされる、出力ファイルにおけるすべての警告を無視す るよう cgsnapshot に指示しています。ブラックリストに関する詳細は単単単単単単単単単単単単単単単単を参照してくださ い。ホワイトリストに関する詳細は単単単単単単単単単単単単単単単単を参照してください。

何もオプションを指定していないとき、cgsnapshot により生成された出力は標準出力に返されます。出力をリ ダイレクトするためのファイルを指定するには -f を使用します:

~]$ cgsnapshot -f ~/test/cgconfig_test.conf

-f オプションは指定されたファイルを上書きします

-f オプションを使用するとき、指定したファイルにある内容をすべて上書きすることに注意してください。そ のため、/etc/cgconfig.conf ファイルに直接そのまま出力することは控えるようお勧めします。

cgsnapshot ユーティリティはサブシステムごとに設定ファイルを作成することもできます。サブシステムの名前 を指定することにより、出力はサブシステムに対応する設定から構成されます:

~]$ cgsnapshot cpuacct

# Configuration file generated by cgsnapshot mount {

cpuacct = /cgroup/cpuacct;

}

2.10.1. パラメータのブラックリスト化

cgsnapshot ユーティリティはパラメーターのブラックリスト化を許可します。パラメーターがブラック リスト化されていると、cgsnapshot により生成される出力に表示されません。デフォルトで、/etc/

cgsnapshot_blacklist.conf ファイルがブラックリストのパラメーターのためにチェックされます。パラメーター がブラックリストになければ、ホワイトリストがチェックされます。他のブラックリストを指定するには、-b オプショ ンを使用します。たとえば:

~]$ cgsnapshot -b ~/test/my_blacklist.conf

2.10.2. パラメータのホワイトリスト化

cgsnapshot ユーティリティはパラメーターのホワイトリスト化も許可します。パラメーターがホワイトリスト化さ れていると、cgsnapshot により生成される出力に表示されます。パラメーターがブラックリストにもホワイトリス トにもなければ、このことを知らせる警告が表示されます:

~]$ cgsnapshot -f ~/test/cgconfig_test.conf

(29)

Control Group に関する情報の取得

デフォルトで、ホワイトリストの設定ファイルはありません。ホワイトリストとして使用するためのファイルを指定す るには、-w オプションを使用します。たとえば:

~]$ cgsnapshot -w ~/test/my_whitelist.conf

-t オプションを指定することにより、ホワイトリストからのパラメーターのみを持つ設定を生成するよう cgsnapshot に指示します。

2.11. Control Group に関する情報の取得

2.11.1. プロセスの確認

プロセスが属する cgroup を確認するには以下のコマンドを実行します:

~]$ ps -O cgroup

また、プロセスの PID がわかっている場合は、以下のコマンドを実行します:

~]$ cat /proc/PID/cgroup

2.11.2. サブシステムの確認

カーネルで使用可能なサブシステムおよびそれらがどのようにして階層にまとめてマウントされているかを確認 するには、以下のコマンドを実行します。

~]$ cat /proc/cgroups

また、特定のサブシステムのマウントポイントを確認するには、以下のコマンドを実行します。

~]$ lssubsys -m subsystems

subsystems は、対象となるサブシステムの一覧です。lssubsys -m コマンドでは、各階層ごとの最上位のマ

ウントポイントのみが返される点に注意してください。

2.11.3. 階層の確認

/cgroup 下に階層をマウントすることを推奨します。ご使用のシステムがそのような状態であることを前提とし て、そのディレクトリの内容を一覧表示もしくはブラウズします。tree がシステムにインストールされている場合 には、このコマンドを実行して、階層およびそれらの中にある cgroup の概要を取得します。

~]$ tree /cgroup/

2.11.4. Control Group の確認

システム上の cgroup を一覧表示するには、以下のコマンドを実行します。

~]$ lscgroup

controller:path の形式でコントローラとパスを指定すると、特定の階層への出力を限定することができま す。例えば:

(30)

第2章 Control Group の使用法

cpuset サブシステムが接続されている階層内の adminusers cgroup のサブグループのみを一覧表示しま す。

2.11.5. Control Group のパラメータの表示

特定の cgroup のパラメータを表示するには、以下のコマンドを実行します。

~]$ cgget -r parameter list_of_cgroups

ここで parameter は、サブシステムの値を含んだ擬似ファイルで、list_of_cgroups は cgroup のス ペース区切りの一覧です。例えば:

~]$ cgget -r cpuset.cpus -r memory.limit_in_bytes lab1 lab2

cgroup lab1 および lab2 の cpuset.cpus 値と memory.limit_in_bytes 値を表示します。

パラメータ自体の名前がわからない場合には、以下のようなコマンドを使用してください。

~]$ cgget -g cpuset /

2.12. Control Group のアンロード

このコマンドは、すべての Control Group を破棄してしまいます

cgclear コマンドにより、全階層内のすべての cgroup が破棄されます。これらの階層が設定ファイル内 に記載されていない場合は、簡単には再構築できません。

cgroup ファイルシステム全体を消去するには、cgclear コマンドを使用します。

cgroup 内のタスクはすべて、階層内の root ノードに再割り当てされ、全 cgroup が削除され、ファイルシステ ム自体が システムからアンマウントされます。したがって、以前にマウントされていた階層をすべて破棄すること になります。最後に、cgroup ファイルシステムがマウントされていたディレクトリが実際に削除されます。

マウントされたすべての cgroups の正確な一覧化

mount コマンドを使用して cgroup を作成すると (cgconfig サービスを使用して作成した場合とは対照 的に) /etc/mtab ファイル (マウントされているファイルシステムのテーブル) にエントリが追加されます。

この変更は、/proc/mounts ファイルにも反映されます。しかし、 cgclear コマンドやその他の cgconfig コ マンドを使用して cgroup をアップロードする場合には、直接のカーネルインターフェースが使用され、/

etc/mtab ファイルには変更が反映されず、/proc/mounts ファイル内に新たな情報が書き込まれるだけと なります。 このため、cgclear コマンドで cgroup をアップロードした後でも、アンマウント済みのグループ が /etc/mtab ファイル内に依然として表示されている可能性があり、その結果、mount コマンドの実行時 に表示される可能性があります。マウントされているすべての cgroup の正確な一覧を確認するには、 / proc/mounts ファイルを参照することをお勧めします。

(31)

その他のリソース

2.13. その他のリソース

The definitive documentation for cgroup commands are the manual pages provided with the

libcgroup-tools package. The section numbers are specified in the list of man pages below.

The libcgroup-tools Man Pages

• man 1 cgclassify — cgclassify コマンドは、実行中のタスクを単一もしくは複数の cgroup に移動する のに使用します。

man 1 cgclear — cgclear コマンドは、一つの階層内のすべての cgroup を削除するのに使用します。

man 5 cgconfig.conf — cgroup は cgconfig.conf ファイル内で定義されます。

man 8 cgconfigparser — cgconfigparser コマンドは、cgconfig.conf ファイルを解析して、階層をマウン トします。

man 1 cgcreate — cgcreate コマンドは階層内に新たな cgroup を作成します。

man 1 cgdelete — cgdelete コマンドは、特定の cgroup を削除します。

man 1 cgexec — cgexec コマンドは特定の cgroup 内のタスクを実行します。

man 1 cgget — cgget コマンドは、cgroup のパラメータを表示します。

man 1 cgsnapshot — cgsnapshot コマンドは、既存のサブシステムから設定ファイルを生成します。

man 5 cgred.conf — cgred.conf は、cgred サービスの設定ファイルです。

man 5 cgrules.conf — cgrules.conf には、特定の cgroup にタスクが属する場合に判断するための ルールが含まれます。

man 8 cgrulesengd — cgrulesengd サービスは、タスクを cgroup に配分します。

man 1 cgset — cgset コマンドは、cgroup のパラメータを設定します。

man 1 lscgroup — lscgroup コマンドは、階層内の cgroup を一覧表示します。

man 1 lssubsys — lssubsys コマンドは、特定のサブシステムを含む階層を一覧表示します。

(32)

参照

関連したドキュメント

位を四捨五入しております。プレミアムの数値(%)の計算について以下同じです。 ) 、同日までの過去 1ヶ月間(2019 年9月 30 日から 2019 年 10

信託財産の財務諸表の監査に要する費用(純資産総 額に対し、税込年率0.0055% (上限年49.5万円)

3. 公園指定管理業務 13 年の経緯  筆者が指定管理者として取り組んだ期間は 13

白川中流域低地における休耕田水張り事業 (Trans - boundary groundwater manage-

基本要件 当該機器への 適用・不適用 適合の方法 特定文書の確認 8 滅菌を施さなければならない医療機器 は、適切に管理された状態で製造され なければならない。

- 27 - ホームを使う ホーム画面を操作する

9 <ボンベガス圧> 高圧ガスは常温においてゲージ圧が 1 メガパスカル以上のものを 用いてはならない!(ルールブックより) 規定通り

30 機械を入力するパターンをご紹介します。 労務を入力するパターンをご紹介します。 項目 機械単価 日報 (機械数量) 日報 (経費)