====== 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. 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. 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!!"