Skip to content

Instantly share code, notes, and snippets.

@silenvx
Created July 9, 2012 13:01
Show Gist options
  • Save silenvx/3076435 to your computer and use it in GitHub Desktop.
Save silenvx/3076435 to your computer and use it in GitHub Desktop.
man cgconfig.confのいい加減な日本語訳。gentooのdev-libs/libcgroup-0.37-r2についてきたmanが原文です
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