目次

mount option

メモ

オプション 意味
none どのサブシステムも使わない (?)
all 全サブシステムを使用 (マウント) する指定
(各サブシステム名) そのサブシステムを使用 (マウント) する
noprefix cgroup ファイルシステム内の各ファイルにサブシステムを表す prefix を付けない
clone_children cpu_set サブシステムだけで有効.子グループを作成したら親グループの設定を継承(コピー)する
xattr 拡張ファイル属性サポートでマウント
release_agent= release_agent ファイルに書き込む実行ファイルのパス
name= マウントした階層構造を後で名前でマウントできるように名前を付ける.もしくは既にある名前と同じ階層構造をマウントする

name

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