前回は,
今回からは,
サブシステム
名前空間と同様に,
サブシステムには以下のようなものがあります。
表1 サブシステムの種類と機能
サブシステム | 機能の概要 | 実装されたバージョン |
---|---|---|
cpu | CPUのスケジューリングを制御 | |
相対配分…グループ間のCPU時間の割当を割合で指定 | 2. | |
帯域制御…単位時間内にグループ内のタスクが実行できる合計時間を制限 | 3. | |
cpuacct | グループ内のタスクが消費するCPU時間をレポート | 2. |
cpuset | グループへのCPU, | 2. |
device | グループ内のタスクのデバイスへのアクセスの許可, | 2. |
freezer | グループ内のプロセス全てを同時に一時停止・ | 2. |
memory | グループ内のタスクが消費するメモリリソースのレポートと制限 | 2. |
net_ | グループ内のプロセスが発信するパケットの制御。パケットに識別子を付与。 | |
tcで制御 | 2. | |
netfilterで制御 | 3. | |
blkio | ブロックデバイスに対する制限 | |
重みづけ配分…グループ間のI/ | 2. | |
帯域制限…グループ内のタスクが各デバイスに対して行える操作数の制限 | 2. | |
perf_ | cgroup単位でのperfツールの使用 | 2. |
net_ | グループ内のタスクのネットワークの優先度の制御 | 3. |
hugetlb | cgroupからのhugetlbの使用 | 3. |
表1にある
お使いのシステムで使用可能なサブシステムは,/proc/
で確認できます。
$ cat /proc/cgroups #subsys_name hierarchy num_cgroups enabled cpuset 0 1 1 cpu 0 1 1 cpuacct 0 1 1 memory 0 1 1 devices 0 1 1 freezer 0 1 1 blkio 0 1 1 perf_event 0 1 1
カーネルによってはサブシステムの一部がモジュールとなっていて,
$ sudo modprobe cls_cgroup $ cat /proc/cgroups | grep net_cls net_cls 0 1 1
前の実行例の環境で新たにnet_/proc/
にnet_
サブシステムのマウント
cgroupfsをマウントする際にはサブシステムごとにマウントできます。前回の説明の際にオプションとして-o cpu
という指定をしました。これはcpuサブシステムをマウントするという意味になります。同様に別のマウントポイントに-o memory
と指定してmemoryサブシステムをマウントしてみましょう。
$ sudo mount -t tmpfs cgroup /sys/fs/cgroup $ sudo mkdir /sys/fs/cgroup/cpu $ sudo mount -n -t cgroup -o cpu cgroup /sys/fs/cgroup/cpu(ここまでは前回の例と同じ) $ sudo mkdir /sys/fs/cgroup/memory (memoryサブシステム用のディレクトリ作成) $ sudo mount -n -t cgroup -o memory cgroup /sys/fs/cgroup/memory (memoryサブシステムを指定してマウント) $ ls /sys/fs/cgroup/memory/ cgroup.clone_children memory.move_charge_at_immigrate cgroup.event_control memory.numa_stat cgroup.procs memory.oom_control memory.failcnt memory.soft_limit_in_bytes memory.force_empty memory.stat :(略)
/sys/
以下にmemoryサブシステムをマウントしました。cpuサブシステムとは作られているファイルが違いますね。ここで見たように複数の階層構造を持てるというのもcgroupの特徴のひとつです。
また,
$ sudo umount /sys/fs/cgroup/cpu $ sudo umount /sys/fs/cgroup/memory $ sudo mkdir /sys/fs/cgroup/cpu_memory $ sudo mount -n -t cgroup -o cpu,memory cgroup /sys/fs/cgroup/cpu_memory (cpu,memoryサブシステムを同時にマウント) $ ls /sys/fs/cgroup/cpu_memory/ cgroup.clone_children memory.memsw.limit_in_bytes cgroup.event_control memory.memsw.max_usage_in_bytes cgroup.procs memory.memsw.usage_in_bytes cpu.cfs_period_us memory.move_charge_at_immigrate cpu.cfs_quota_us memory.numa_stat : (略)
ディレクトリ内を確認してみると,
ただし,
$ sudo mount -n -t cgroup -o memory cgroup /sys/fs/cgroup/memory Mount: cgroup already mounted or /sys/fs/cgroup/memory busy