Created
July 9, 2012 13:01
-
-
Save silenvx/3076435 to your computer and use it in GitHub Desktop.
man cgconfig.confのいい加減な日本語訳。gentooのdev-libs/libcgroup-0.37-r2についてきたmanが原文です
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CGCONFIG.CONF(5) CGCONFIG.CONF(5) | |
名前 | |
cgconfig.conf - libcgroupの設定ファイル | |
説明 | |
cgconfig.confはlibcgroupがコントロールグループのパラメータやマウント先を定義するのに使用する設定ファイルです | |
この設定ファイルはmountとgroupのセクションで構成されています | |
これらのセクションは好きな順序で書けます | |
'#'で始まる行はコメント行となり、無視されます | |
mountセッションの形式: | |
mount { | |
<コントローラ> = <パス>; | |
... | |
} | |
コントローラ | |
カーネルのサブシステム名を指定します | |
カーネルでサポートされているサブシステムのリストは/proc/cgroupsで見つけることができます | |
Libcgroupは同じディレクトリにマウントされている全てのサブシステムをマージ(例1を参照)して | |
ディレクトリは一度だけマウントされます | |
パス ディレクトリのパスを指定します | |
指定されたコントローラに関連したgroup階層がここにマウントされる | |
cgconfigサービスの起動時にもしディレクトリが存在しなければディレクトリが自動的に作成され | |
cgconfigサービスの終了時に削除されます | |
groupセッションの形式: | |
group <名前> { | |
[パーミッション] | |
<コントローラ> { | |
<パラメータの名前> = <パラメータの値>; | |
... | |
} | |
... | |
} | |
名前 コントロールグループの名前を指定します | |
これにはディレクトリ名に使うことのできる文字だけを使えます | |
グループは階層構造です | |
つまりはコントロールグループは0個以上のサブグループを含めることができます | |
サブグループは'/'を区切り文字として使用できます | |
ルートコントロールグループは常に全ての階層に自動的に作成されて | |
それがgroup階層のベースです | |
group階層のベースはcgconfig.confで"."をgroupの名前を使って明示的に指定できます | |
例えばこれを使うと例5にあるようにgroup階層のベースのパーミッションを設定することができます | |
サブグループの親コントロールグループが指定されていない場合は自動的に作成されます | |
パーミッション | |
マウントしたファイルシステムに割り当てられたコントロールグループのパーミッションを指定します | |
rootは常にコントロールグループに何かをする権限を持っています | |
パーミッションの構文は次の通りです: | |
perm { | |
task { | |
uid = <task user>; | |
gid = <task group>; | |
} | |
admin { | |
uid = <admin user>; | |
gid = <admin group>; | |
} | |
} | |
task user/group コントロールグループのタスクファイルを所有するユーザーとグループ | |
つまりこのユーザーやこのグループのメンバーがファイルへの書き込み、アクセスができます | |
admin user/group コントロールグループの残りのファイルを所有するユーザーとグループの名前 | |
これらのユーザーはサブシステムのパラメータの設定とサブグループの作成を許可される | |
パーミッションはコントロールグループのみ関連しておりサブグループには継承されません | |
このコントロールグループの定義に恒久的なセクションが存在しない場合は | |
全てのファイルの所有者がroot:rootになる | |
コントローラ | |
カーネルのサブシステム名を指定します | |
このセッションは空にすることができます | |
その場合はデフォルトのカーネルパラメータを使うことになります | |
指定したコントローラによってコントロールグループと | |
それの全ての親は指定したサブシステムによってコントロールされる | |
例えサブシステムが色々なディレクトリにマウントされている場合だとしても | |
1つのコントロールグループは複数のサブシステムによってコントロールすることができます | |
それぞれのコントロールグループは最低1つのサブシステムののコントロールを必要としている | |
そういうわけでlibcgroupはコントロールグループが作成されるべき階層を知っている | |
コントローラに与えるパラメータは括弧で囲まれた次のセッションで変更することができます | |
パラメータの名前 | |
設定するファイル名を指定します | |
それぞれのコントローラは0個以上のパラメータを持つことができます | |
パラメータの値 | |
コントロールグループが作成された時にファイルに書き込まれるべき値を指定します | |
必要に応じてそれをダブルクォート '"' で囲むことができます | |
すると値にスペースを含むことができます | |
例 | |
例1 | |
設定ファイル: | |
mount { | |
cpu = /mnt/cgroups/cpu; | |
cpuacct = /mnt/cgroups/cpu; | |
} | |
内部にgroupを持たないで、2つのサブシステムによってコントロールされる階層を作成します | |
これは次の操作に対応してます: | |
mkdir /mnt/cgroups/cpu | |
mount -t cgroup -o cpu,cpuacct cpu /mnt/cgroups/cpu | |
例2 | |
設定ファイル: | |
mount { | |
cpu = /mnt/cgroups/cpu; | |
cpuacct = /mnt/cgroups/cpu; | |
} | |
group daemons/www { | |
perm { | |
task { | |
uid = root; | |
gid = webmaster; | |
} | |
admin { | |
uid = root; | |
gid = root; | |
} | |
} | |
cpu { | |
cpu.shares = "1000"; | |
} | |
} | |
group daemons/ftp { | |
perm { | |
task { | |
uid = root; | |
gid = ftpmaster; | |
} | |
admin { | |
uid = root; | |
gid = root; | |
} | |
} | |
cpu { | |
cpu.shares = "500"; | |
} | |
} | |
内部に1つのグループと2つのサブグループがある2つのサブシステムによって | |
コントロールされた階層を作ります | |
これは次の操作に相当します: | |
mkdir /mnt/cgroups/cpu | |
mount -t cgroup -o cpu,cpuacct cpu /mnt/cgroups/cpu | |
mkdir /mnt/cgroups/cpu/daemons | |
mkdir /mnt/cgroups/cpu/daemons/www | |
chown root:root /mnt/cgroups/cpu/daemons/www/* | |
chown root:webmaster /mnt/cgroups/cpu/daemons/www/tasks | |
echo 1000 > /mnt/cgroups/cpu/daemons/www/cpu.shares | |
mkdir /mnt/cgroups/cpu/daemons/ftp | |
chown root:root /mnt/cgroups/cpu/daemons/ftp/* | |
chown root:ftpmaster /mnt/cgroups/cpu/daemons/ftp/tasks | |
echo 500 > /mnt/cgroups/cpu/daemons/ftp/cpu.shares | |
daemonsグループは最初のサブグループが作成された時に自動的に作成されます | |
全てのパラメータはデフォルトの値を持っておりrootだけがgroupファイルにアクセスできます | |
cpuacctとcpuの両方のサブシステムは同じディレクトリにマウントしています | |
全てのグループは暗黙的に例えどのgroupにもcpuacctセッションが存在しない場合でもcpuacctサブシステムが操作します | |
例3 | |
設定ファイル: | |
mount { | |
cpu = /mnt/cgroups/cpu; | |
cpuacct = /mnt/cgroups/cpuacct; | |
} | |
group daemons { | |
cpuacct{ | |
} | |
cpu { | |
} | |
} | |
2つの階層とそれらの1つの共通したグループを作成します | |
これは次の操作に相当します: | |
mkdir /mnt/cgroups/cpu | |
mkdir /mnt/cgroups/cpuacct | |
mount -t cgroup -o cpu cpu /mnt/cgroups/cpu | |
mount -t cgroup -o cpuacct cpuacct /mnt/cgroups/cpuacct | |
mkdir /mnt/cgroups/cpu/daemons | |
mkdir /mnt/cgroups/cpuacct/daemons | |
実際に作成した2つのグループがあります | |
1つ目はcpuacct階層 2つ目はcpu階層 | |
これらの2つのグループは様々なサブグループと様々なtaskを何も共有していない | |
例4 | |
設定ファイル: | |
mount { | |
cpu = /mnt/cgroups/cpu; | |
cpuacct = /mnt/cgroups/cpuacct; | |
} | |
group daemons { | |
cpuacct{ | |
} | |
} | |
group daemons/www { | |
cpu { | |
cpu.shares = "1000"; | |
} | |
} | |
group daemons/ftp { | |
cpu { | |
cpu.shares = "500"; | |
} | |
} | |
内部にいくつかのグループがある2つの階層を作成します | |
1つのグループを両方の階層に作成されます | |
これは次の操作に相当します: | |
mkdir /mnt/cgroups/cpu | |
mkdir /mnt/cgroups/cpuacct | |
mount -t cgroup -o cpu cpu /mnt/cgroups/cpu | |
mount -t cgroup -o cpuacct cpuacct /mnt/cgroups/cpuacct | |
mkdir /mnt/cgroups/cpuacct/daemons | |
mkdir /mnt/cgroups/cpu/daemons | |
mkdir /mnt/cgroups/cpu/daemons/www | |
echo 1000 > /mnt/cgroups/cpu/daemons/www/cpu.shares | |
mkdir /mnt/cgroups/cpu/daemons/ftp | |
echo 500 > /mnt/cgroups/cpu/daemons/ftp/cpu.shares | |
daemonsグループは両方の階層に作成されます | |
cpuacct階層内のグループは明示的に設定ファイルに記載されています | |
cpu階層内のグループはwwwを作成した時にを暗黙的に作成されます | |
これら2つのグループは共有していない | |
例えばこれらはプロセスとサブグループは共有していない | |
wwwグループとftpグループはcpu階層にのみ作成されて | |
cpuacctサブシステムからは操作ができません | |
例5 | |
設定ファイル: | |
mount { | |
cpu = /mnt/cgroups/cpu; | |
cpuacct = /mnt/cgroups/cpu; | |
} | |
group . { | |
perm { | |
task { | |
uid = root; | |
gid = operator; | |
} | |
admin { | |
uid = root; | |
gid = operator; | |
} | |
} | |
cpu { | |
} | |
} | |
group daemons { | |
perm { | |
task { | |
uid = root; | |
gid = daemonmaster; | |
} | |
admin { | |
uid = root; | |
gid = operator; | |
} | |
} | |
cpu { | |
} | |
} | |
いくつかの特別なパーミッションがある1つのgroupがある2つのサブシステムによって | |
コントロールされた階層が作られます | |
これは次の操作に相当します | |
mkdir /mnt/cgroups/cpu | |
mount -t cgroup -o cpu,cpuacct cpu /mnt/cgroups/cpu | |
chown root:operator /mnt/cgroups/cpu/* | |
chown root:operator /mnt/cgroups/cpu/tasks | |
mkdir /mnt/cgroups/cpu/daemons | |
chown root:operator /mnt/cgroups/cpu/daemons/* | |
chown root:daemonmaster /mnt/cgroups/cpu/daemons/tasks | |
operatorグループのメンバーであるユーザーはコントロールグループの管理を許可されている | |
つまりは新しいコントロールグループを作成したりプロセスを移動させることが | |
root権限を持たなくてもこれらのグループの間でできる | |
daemonmasterグループのメンバーはdaemonsコントロールグループにプロセスを移動できる | |
しかしそれらはグループの外にはプロセスを移動できない | |
operatorかrootのみが移動させることができます | |
勧告 | |
階層を分けたままにしておく | |
複数の階層を持つことは完全に有効なことで様々な場面で役に立ちます | |
きれいな状態を保つためには複数の階層を1つのグループに作成しないでください | |
例3と例4に示すように | |
特に誰かに設定ファイルを読んでもらう時にそれをどのように読めなくて | |
混乱させることがありえるでしょう | |
明示的は暗黙的よりも良い | |
libcgroupは暗黙的に設定されたサブグループを作成するために必要なグループを作成できます | |
これは単純に多少のタイピングを省く場面で役に立つかもしれません | |
それが複数の階層に来る時は | |
それは明示的に全てのグループとそれらに関連する全てのコントロールを指定すると良いです | |
ファイル | |
/etc/cgconfig.conf | |
デフォルトのlibcgroupの設定ファイル | |
関連項目 | |
cgconfigparser (8) | |
バグ | |
パラメータの値は空白を含まない単一の文字列にすることできます | |
クォーテーションで囲まれた文字列の構文解析は実行されません | |
CGCONFIG.CONF(5) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment