Open hysryt opened 5 years ago
cgroup 機能によってグルーピングされるプロセスのグループを cgroup と呼ぶ。
cgroup の管理は cgroupファイルシステム(cgroupfs)内で行う。
そのためまずは cgroupfs を /sys/fs/cgroup/cpu にマウントする。
-o cpu
でサブシステムに cpu
を指定している。
これで cpu
リソースを管理する cgroup を格納するディレクトリができる。
このディレクトリが cpu
サブシステムを扱う cgroup のルートディレクトリとなる。
$ sudo mount -t cgroup -o cpu cgroup /sys/fs/cgroup/cpu
$ ls /sys/fs/cgroup/cpu
cgroup.clone_children cpu.cfs_period_us cpu.rt_runtime_us notify_on_release
cgroup.event_control cpu.cfs_quota_us cpu.shares release_agent
cgroup.procs cpu.rt_period_us cpu.stat tasks
cgroup はそのディレクトリの中に作成していく。
mkdir
でディレクトリを作成すればそれが cgroup となる。
ディレクトリ内には設定用のファイルが自動的に生成される。
$ cd cpu
$ sudo mkdir test01
$ ls test01
cgroup.clone_children cpu.cfs_period_us cpu.rt_runtime_us notify_on_release
cgroup.event_control cpu.cfs_quota_us cpu.shares tasks
cgroup.procs cpu.rt_period_us cpu.stat
cgroup にプロセスを登録するにはこのディレクトリの中の tasks ファイルにプロセスIDを追加するだけでいい。
$ cd test01
$ echo $$ | sudo tee -a tasks
1508
$ cat tasks
1508
1713
1508 が シェルのプロセスID、1713 が cat のプロセスIDとなる。 この結果から分かるように、子プロセスは自動的に親プロセスと同じ cgroup に属す。
個々の cgroup に登録する前は、各プロセスはルートディレクトリのtasksに登録されている。
cgroup での mount コマンド
$ mount -n -t <ファイルシステム名> -o <オプション> <デバイス> <ディレクトリ>
-n
はマウントの際に /etc/mtab に書き込みを行わない為のフラグ。必要かどうかは不明。
-t
でファイルシステム名を指定する。cgroup の場合はそのまま cgroup
。
-o
でオプションを指定する。cgroup の場合ここにサブシステム名を記述する。
<デバイス>
にマウントするデバイスを記述する。cgroup の場合はここもそのまま cgroup
。
$ sudo mount -n -t cgroup -o cpu cgroup /sys/fs/cgroup/cpu
https://gihyo.jp/admin/serial/01/linux_containers/0003 https://gihyo.jp/admin/serial/01/linux_containers/0004 https://gihyo.jp/admin/serial/01/linux_containers/0005