この連載をはじめてから,
今年は参加するカレンダーを少し変えて,
さて,
cgroupは,
このときに紹介したcgroupは,
今回は,
cgroup v1の特徴のおさらい
cgroup v2の説明に入る前に,
cgroupfs
cgroupを使うには,
リソースを制御する単位となるcgroupはディレクトリで表され,mkdir
コマンドを使うなど,
$ sudo mount -t cgroup -o pids cgroup /sys/fs/cgroup/pids $ sudo mkdir /sys/fs/cgroup/pids/test01 (cgroup "test01"の作成) $ ls /sys/fs/cgroup/pids/test01 (作成したcgroupには制御用のファイルが自動で作成される) cgroup.clone_children notify_on_release pids.events tasks cgroup.procs pids.current pids.max
階層構造
先に述べたようにcgroupfsは通常のファイルシステムと同様の操作によりグループ操作を行います。つまり通常のファイルシステムのようなツリー構造を取ります。
複数階層構造
そして,
サブシステム
cgroupは実装面から見るとふたつに分かれています。
階層構造の管理など,
実際に制御したいリソースがある場合は,
$ sudo mount -t cgroup -o cpu cpu /sys/fs/cgroup/cpu
(cpuサブシステムを使う指定をしてcgroupfsをマウント)
cgroupへのタスクの登録
cgroupへはスレッド単位でタスクが登録できます。
cgroupへタスクを登録するには,
$ echo $$ | sudo tee /sys/fs/cgroup/pids/test01/tasks ("test01"グループへのプロセスの登録)
13077
cgroup v1の問題点
以上のような特徴を持つcgroup v1は,
複数階層構造
複数の階層を自由に作成でき,
まず,
上の問題を回避するために,
つまり階層を複数持てて,
また,
結局は,
実際,
$ ls -F /sys/fs/cgroup/ (Ubuntu 16.04でのcgroup構造) blkio/ cpu,cpuacct/ freezer/ net_cls@ perf_event/ cpu@ cpuset/ hugetlb/ net_cls,net_prio/ pids/ cpuacct@ devices/ memory/ net_prio@ systemd/ $ tree -L 2 -d /sys/fs/cgroup/ (各階層で同じような構造になっている様子) /sys/fs/cgroup/ ├── blkio │ ├── init.scope │ ├── lxc │ ├── system.slice │ └── user.slice :(略) ├── cpu,cpuacct │ ├── init.scope │ ├── lxc │ ├── system.slice │ └── user.slice :(略) ├── devices │ ├── init.scope │ ├── lxc │ ├── system.slice │ └── user.slice :(略)
サブシステム間の連携
cgroup v1では,
当然,
たとえば,
サブシステム間の一貫性
上に書いたように,
たとえば,mkdir
コマンドでcgroupを作成します。そのままの状態で,
$ sudo mount -t cgroup -o cpuset cpuset /sys/fs/cgroup/cpuset $ echo $$ | sudo tee /sys/fs/cgroup/cpuset/test01/tasks 3046 tee: /sys/fs/cgroup/cpuset/test01/tasks: No space left on device
これは,cpuset.
,cpuset.
というふたつのファイルが空だからです。
タスクを登録する前にこれらのファイルの中身をきちんと設定するか,cgroup.
ファイルに1
を書き込んでおけば,
しかし,cgroup.
ファイルで動きが変わるサブシステムは,
他にも,memory.
というファイルで制御できます。このような設定ができるのはmemoryサブシステムだけです。他のサブシステムでは,
つまり,
どのノードにもタスクが所属できる
cgroupは,
cpuサブシステム用のツリーで,
cgroup Aにタスクが所属していなければ,
この問題は,
スレッド単位での制御
cgroup v1では,
元々プロセス単位でリソースを割り当てたのに,
以上のように,