mount option
メモ
オプション | 意味 |
---|---|
none | どのサブシステムも使わない (?) |
all | 全サブシステムを使用 (マウント) する指定 |
(各サブシステム名) | そのサブシステムを使用 (マウント) する |
noprefix | cgroup ファイルシステム内の各ファイルにサブシステムを表す prefix を付けない |
clone_children | cpu_set サブシステムだけで有効.子グループを作成したら親グループの設定を継承(コピー)する |
xattr | 拡張ファイル属性サポートでマウント |
release_agent= | release_agent ファイルに書き込む実行ファイルのパス |
name= | マウントした階層構造を後で名前でマウントできるように名前を付ける.もしくは既にある名前と同じ階層構造をマウントする |
name
- サブシステムと階層構造のセットに名前を付ける? 最初にマウントする際に
mount -t cgroup -o cpu,name=myhier1 cgroup /cgroup1
とやっておけば,二度目は
mount -t cgroup -o name=myhier1 cgroup /cgroup2
とやれば,/cgroup1 も /cgroup2 も同じ階層構造が反映されて,サブシステムも同じ.
- まず myhier1 という名前で cpu サブシステムの cgroupfs をマウント.test01, test02 ディレクトリを作製.
root@plamo50:/home/karma# mount -t cgroup -o cpu,name=myhier1 cgroup /cgroup1 root@plamo50:/home/karma# cd /cgroup1 root@plamo50:/cgroup1# ls 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 root@plamo50:/cgroup1# mkdir test01 test02 root@plamo50:/cgroup1# ls cgroup.clone_children cpu.cfs_quota_us cpu.stat test01/ cgroup.event_control cpu.rt_period_us notify_on_release test02/ cgroup.procs cpu.rt_runtime_us release_agent cpu.cfs_period_us cpu.shares tasks
- myhier1 を指定して /cgroup2 に cgroupfs マウント
root@plamo50:~# mount -t cgroup -o name=myhier1 cgroup /cgroup2 root@plamo50:~# cd /cgroup2 root@plamo50:/cgroup2# ls cgroup.clone_children cpu.cfs_quota_us cpu.stat test01/ cgroup.event_control cpu.rt_period_us notify_on_release test02/ cgroup.procs cpu.rt_runtime_us release_agent cpu.cfs_period_us cpu.shares tasks
- 既に存在する名前を使って別のサブシステムを指定しようとしたら怒られる.
root@plamo50:/home/karma# mount -t cgroup -o cpu,name=myhier1 cgroup /cgroup1 root@plamo50:/home/karma# mount -t cgroup -o memory,name=myhier1 cgroup /cgroup2 mount: cgroup already mounted or /cgroup2 busy mount: according to mtab, cgroup is mounted on /cgroup1 root@plamo50:/home/karma# mount -t cgroup -o memory,name=myhier1 cgroup2 /cgroup2 mount: cgroup2 already mounted or /cgroup2 busy
- 名前を指定しなければ OK だが,階層構造はコピーされていない
root@plamo50:/home/karma# mount -t cgroup -o cpu,name=myhier1 cgroup /cgroup1 root@plamo50:/cgroup1# mkdir test01 test02 root@plamo50:~# ls /cgroup1 cgroup.clone_children cpu.cfs_quota_us cpu.stat test01/ cgroup.event_control cpu.rt_period_us notify_on_release test02/ cgroup.procs cpu.rt_runtime_us release_agent cpu.cfs_period_us cpu.shares tasks root@plamo50:~# mount -t cgroup -o memory cgroup /cgroup2 root@plamo50:~# ls /cgroup2 cgroup.clone_children memory.max_usage_in_bytes cgroup.event_control memory.memsw.failcnt cgroup.procs memory.memsw.limit_in_bytes memory.failcnt memory.memsw.max_usage_in_bytes memory.force_empty memory.memsw.usage_in_bytes memory.kmem.failcnt memory.move_charge_at_immigrate memory.kmem.limit_in_bytes memory.oom_control memory.kmem.max_usage_in_bytes memory.soft_limit_in_bytes memory.kmem.slabinfo memory.stat memory.kmem.tcp.failcnt memory.swappiness memory.kmem.tcp.limit_in_bytes memory.usage_in_bytes memory.kmem.tcp.max_usage_in_bytes memory.use_hierarchy memory.kmem.tcp.usage_in_bytes notify_on_release memory.kmem.usage_in_bytes release_agent memory.limit_in_bytes tasks
noprefix
通常であれば各サブシステム名が prefix となって,各サブシステムの制御ファイルが作成されるが,その prefix を付けない.サブシステム毎にマウントする時には便利かも
root@plamo50:/# mount -t cgroup -ocpuset,noprefix X /cgroup/ root@plamo50:/# ls /cgroup cgroup.clone_children mem_hardwall mems cgroup.event_control memory_migrate notify_on_release cgroup.procs memory_pressure release_agent cpu_exclusive memory_pressure_enabled sched_load_balance cpus memory_spread_page sched_relax_domain_level mem_exclusive memory_spread_slab tasks root@plamo50:/# umount /cgroup/ root@plamo50:/# mount -t cgroup -ocpuset X /cgroup/ root@plamo50:/# ls /cgroup/ cgroup.clone_children cpuset.memory_pressure_enabled cgroup.event_control cpuset.memory_spread_page cgroup.procs cpuset.memory_spread_slab cpuset.cpu_exclusive cpuset.mems cpuset.cpus cpuset.sched_load_balance cpuset.mem_exclusive cpuset.sched_relax_domain_level cpuset.mem_hardwall notify_on_release cpuset.memory_migrate release_agent cpuset.memory_pressure tasks
当然,複数のサブシステムを一つのディレクトリに収めるような場合には使えない
root@plamo50:~# mount -t cgroup -oall,noprefix X /cgroup/ mount: wrong fs type, bad option, bad superblock on X, missing codepage or helper program, or other error (for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program) In some cases useful info is found in syslog - try dmesg | tail or so root@plamo50:~# mount -t cgroup -omemory,cpu,noprefix X /cgroup/ mount: wrong fs type, bad option, bad superblock on X, missing codepage or helper program, or other error (for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program) In some cases useful info is found in syslog - try dmesg | tail or so
clone_children
普通
root@plamo50:/# mount -t cgroup -o cpuset cgroup /cgroup root@plamo50:/# cd cgroup/ root@plamo50:/cgroup# cat cpuset.cpus 0-1 root@plamo50:/cgroup# mkdir test01 root@plamo50:/cgroup# cd test01 root@plamo50:/cgroup/test01# cat cpuset.cpus root@plamo50:/cgroup/test01#
clone_children
root@plamo50:~# mount -t cgroup -o cpuset,clone_children cgroup /cgroup root@plamo50:~# cd /cgroup/ root@plamo50:/cgroup# cat cgroup.clone_children 1 root@plamo50:/cgroup# cat cpuset.cpus 0-1 root@plamo50:/cgroup# mkdir test01 root@plamo50:/cgroup# cd test01 root@plamo50:/cgroup/test01# cat cpuset.cpus 0-1
xattr
root@plamo50:~# mount -t cgroup -o memory,xattr cgroup /cgroup root@plamo50:~# cd /cgroup root@plamo50:/cgroup# setfattr -n security.test -v test tasks root@plamo50:/cgroup# setfattr -n trusted.test -v test tasks root@plamo50:/cgroup# setfattr -n system.test -v test tasks setfattr: tasks: Invalid argument root@plamo50:/cgroup# setfattr -n user.test -v test tasks setfattr: tasks: Invalid argument root@plamo50:/cgroup# getfattr -n security.test tasks # file: tasks security.test="test" root@plamo50:/cgroup# getfattr -n trusted.test tasks # file: tasks trusted.test="test" root@plamo50:/cgroup# getfattr -d tasks root@plamo50:/cgroup#
xattr の名前空間としては security.* と trusted.* だけが許可されているようです.getattr -d コマンドが何も返さないですね.
許可する名前空間は kernel/cgroup.c 内で
static bool is_valid_xattr(const char *name) { if (!strncmp(name, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN) || !strncmp(name, XATTR_SECURITY_PREFIX, XATTR_SECURITY_PREFIX_LEN)) return true; return false; }
release_agent=
root@plamo50:/# mount -t cgroup -o cpu,release_agent=/test.sh cgroup /cgroup root@plamo50:/# cd cgroup/ root@plamo50:/cgroup# cat release_agent /test.sh root@plamo50:/cgroup# cat notify_on_release 0 root@plamo50:/cgroup# echo 1 > notify_on_release root@plamo50:/cgroup# cat notify_on_release 1 root@plamo50:/cgroup# mkdir test01 root@plamo50:/cgroup# echo 2810 > test01/tasks root@plamo50:/cgroup# cat test01/tasks 2810 root@plamo50:/cgroup# cat test01/tasks root@plamo50:/cgroup# tail -n 1 /var/log/syslog Apr 25 19:59:49 plamo50 logger: Release!!Release!!
/test.sh は
#!/bin/bash /bin/logger "Release!!Release!!"