linux:kernel:cgroup:マウントオプション

mount option

メモ

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

    とやっておけば,二度目は

    mount -t cgroup -o name=myhier1 cgroup /cgroup2

    とやれば,/cgroup1 も /cgroup2 も同じ階層構造が反映されて,サブシステムも同じ.

    1. まず 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
    2. 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

通常であれば各サブシステム名が 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

普通

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
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;
}
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!!"
  • linux/kernel/cgroup/マウントオプション.txt
  • 最終更新: 2013/04/25 11:01
  • by tenforward