ã³ã³ããåã¡ã«ããºã ã«é¢ããäžé£ã®èšäºãç¶ããŸãã
ååã¯ããåå空éãã®ã¡ã«ããºã ã䜿çšããŠããã»ã¹ãåé¢ããããšã«ã€ããŠèª¬æããŸããã ããããã³ã³ããåã®ããã«ã¯ããªãœãŒã¹ã®åé¢ã ãã§ã¯ååã§ã¯ãããŸããã éé¢ãããç°å¢ã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããå Žåããã®ã¢ããªã±ãŒã·ã§ã³ã«ååãªãªãœãŒã¹ãå²ãåœãŠãããäœåãªãªãœãŒã¹ãæ¶è²»ããªãããã«ããŠãã·ã¹ãã ã®æ®ãã®éšåãæ··ä¹±ãããªãããã«ããå¿
èŠããããŸãã ãã®åé¡ã解決ããããã«ãLinuxã«ãŒãã«ã«ã¯ç¹å¥ãªã¡ã«ããºã ããããŸã-cgroupsïŒã³ã³ãããŒã«ã°ã«ãŒããã³ã³ãããŒã«ã°ã«ãŒãã®ç¥ïŒã ä»æ¥ã®èšäºã§åœŒã«ã€ããŠã話ããŸãã
ä»æ¥ã®cgroupsã®ãããã¯ã¯ç¹ã«é¢é£æ§ããããŸããä»å¹Ž1æã«ãªãªãŒã¹ãããããŒãžã§ã³4.5ã®ã³ã¢ã«ã¯ããã®ã¡ã«ããºã ã®æ°ããããŒãžã§ã³ã§ãã
ã°ã«ãŒãv2ãæ£åŒã«è¿œå ãããŸããã
äœæ¥äžãcgroupsã¯æ¬è³ªçã«æžãçŽãããŸããã
ãªããã®ãããªæ ¹æ¬çãªå€æŽãå¿
èŠã§ãããïŒ ãã®è³ªåã«çããããã«ãcgroupsã®æåã®ããŒãžã§ã³ãã©ã®ããã«å®è£
ããããã詳现ã«æ€èšããŸãããã
CgroupsïŒç°¡åãªæŽå²
cgroupã®éçºã¯ã2006幎ã«Googleã®åŸæ¥å¡Paul ManagementãšRohit Setã«ãã£ãŠéå§ãããŸããã ãã³ã³ãããŒã«ã°ã«ãŒãããšããçšèªã¯äœ¿çšãããŸããã§ãããã代ããã«ãããã»ã¹ã³ã³ããããšããçšèªã䜿çšãããŸããã å®éãæåã¯åœŒãã¯çŸä»£ã®æå³ã§cgroupãäœæãããšããç®æšãèšå®ããŠããŸããã§ããã æåã®ã¢ã€ãã¢ã¯ã¯ããã«æ§ããã§ããïŒCPUæéãšã¡ã¢ãªãã¿ã¹ã¯éã§åæ£ããããã«èšèšããã
cpusetã¡ã«ããºã ãæ¹åããããšã ããããæéãçµã€ã«ã€ããŠããã¹ãŠããã倧ããªãããžã§ã¯ãã«æé·ããŸããã
2007幎æ«ã«ãããŒã ããã»ã¹ã³ã³ããã¯ã³ã³ãããŒã«ã°ã«ãŒãã«çœ®ãæããããŸããã ããã¯ããã³ã³ããããšããçšèªã®è§£éã®ççŸãåé¿ããããã«è¡ãããŸããïŒåœæOpenVZãããžã§ã¯ãã¯ãã§ã«æŽ»çºã«éçºãããŠããŸãããããã³ã³ããããšããèšèã¯æ°ããçŸä»£çãªæå³ã§äœ¿çšããå§ããŸããïŒã
2008幎ã«ãcgroupsãLinuxã«ãŒãã«ïŒããŒãžã§ã³2.6.24ïŒã«å
¬åŒã«è¿œå ãããŸããã 以åã®ã«ãŒãã«ããŒãžã§ã³ãšæ¯èŒãããã®ã«ãŒãã«ããŒãžã§ã³ã®æ°æ©èœ
cgroupã§åäœããããã«ç¹å¥ã«èšèšãããåäžã®ã·ã¹ãã ã³ãŒã«ã¯è¿œå ãããŠããŸããã äž»ãªå€æŽç¹ã«ã¯ãcgroupfsãšããŠãç¥ãããcgroupsãã¡ã€ã«ã·ã¹ãã ããããŸãã
init / main.cã§ãããŒãæã«cgoupsãã¢ã¯ãã£ãã«ããé¢æ°ãžã®åç
§ãè¿œå ãããŸããïŒcgroup_initããã³cgroup_init_earlyã ããã»ã¹ã®çæãšçµäºã«äœ¿çšãããé¢æ°forkïŒïŒããã³exitïŒïŒã¯ãããã«å€æŽãããŸããã
/ procä»®æ³ãã¡ã€ã«ã·ã¹ãã ã«æ°ãããã£ã¬ã¯ããªãè¿œå ãããŸããïŒ/ proc / {pid} / cgroupïŒåããã»ã¹çšïŒããã³/ proc / cgroupsïŒã·ã¹ãã å
šäœçšïŒã
建ç¯
cgroupsã¡ã«ããºã ã¯ãã³ã¢ïŒ
cgroup core ïŒãšãããããµãã·ã¹ãã ã®2ã€ã®ã³ã³ããŒãã³ãã§æ§æãããŠããŸãã ãã®ãããªãµãã·ã¹ãã 12ã®ã«ãŒãã«ããŒãžã§ã³4.4.0.21ã§ã¯ïŒ
- blkio-ãããã¯ããã€ã¹ããã®èªã¿åããšæžã蟌ã¿ã®å¶éãèšå®ããŸãã
- cpuacct-ããã»ããµãªãœãŒã¹ã®äœ¿çšã«é¢ããã¬ããŒããçæããŸãã
- cpu-å¶åŸ¡ã°ã«ãŒãå
ã®ããã»ã¹ã®CPUãžã®ã¢ã¯ã»ã¹ãæäŸããŸãã
- cpuset-ããã»ããµã³ã¢éã§ã³ã³ãããŒã«ã°ã«ãŒãå
ã®ã¿ã¹ã¯ãé
åžããŸãã
- ããã€ã¹ - ããã€ã¹ãžã®ã¢ã¯ã»ã¹ãèš±å¯ãŸãã¯ãããã¯ããŸãã
- ããªãŒã¶ãŒ -ã³ã³ãããŒã«ã°ã«ãŒãå
ã®ã¿ã¹ã¯ãäžæåæ¢ããã³åéããŸã
- hugetlb-ã³ã³ãããŒã«ã°ã«ãŒãã®ã¡ã¢ãªã®å€§ããªããŒãžã®ãµããŒããã¢ã¯ãã£ãã«ããŸãã
- ã¡ã¢ãª -ããã»ã¹ã°ã«ãŒãã®ã¡ã¢ãªã®å²ãåœãŠãå¶åŸ¡ããŸãã
- net_cls-ãããã¯ãŒã¯ãã±ããã«ç¹å¥ãªã¿ã°ãä»ããŸããããã«ãããå¶åŸ¡ã°ã«ãŒãå
ã®ç¹å®ã®ã¿ã¹ã¯ã«ãã£ãŠçæããããã±ãããèå¥ã§ããŸãã
- netprio-ãã©ãã£ãã¯ãåçã«åªå
é äœä»ãããããã«äœ¿çšãããŸãã
- pids-å¶åŸ¡ã°ã«ãŒãå
ã®ããã»ã¹ã®æ°ãå¶éããããã«äœ¿çšãããŸãã
次ã®ã³ãã³ãã䜿çšããŠãã³ã³ãœãŒã«ã«ãµãã·ã¹ãã ãäžèŠ§è¡šç€ºã§ããŸãã
$ ls /sys/fs/cgroup/ blkio cpu,cpuacct freezer net_cls perf_event cpu cpuset hugetlb net_cls,net_prio pids cpuacct devices memory net_prio systemd
åãµãã·ã¹ãã ã¯ããã¹ãŠã®èšå®ãæžã蟌ãŸããå¶åŸ¡ãã¡ã€ã«ãå«ããã£ã¬ã¯ããªã§ãã ãããã®åãã£ã¬ã¯ããªã«ã¯ã次ã®å¶åŸ¡ãã¡ã€ã«ãå«ãŸããŠããŸãã
- cgroup.clone_children-芪ã³ã³ãããŒã«ããããã£ãåã³ã³ãããŒã«ã°ã«ãŒãã«æž¡ãããšãã§ããŸãã
- ã¿ã¹ã¯-å¶åŸ¡ã°ã«ãŒãã«å«ãŸãããã¹ãŠã®ããã»ã¹ã®PIDã®ãªã¹ããå«ãŸããŸãã
cgroup.procs-å¶åŸ¡ã°ã«ãŒãã«å«ãŸããããã»ã¹ã°ã«ãŒãã®TGIDã®ãªã¹ããå«ãŸããŠããŸãã - cgroup.event_control-ã³ã³ãããŒã«ã°ã«ãŒãã®ã¹ããŒã¿ã¹ãå€åããå Žåã«éç¥ãéä¿¡ã§ããŸãã
- release_agent-notify_on_releaseãªãã·ã§ã³ãæå¹ãªå Žåã«å®è¡ãããã³ãã³ããå«ãŸããŸãã ããšãã°ã空ã®ã³ã³ãããŒã«ã°ã«ãŒããèªåçã«åé€ããããã«äœ¿çšã§ããŸãã
- notify_on_release-release_agentã§æå®ãããã³ãã³ãã®å®è¡ãæå¹ã«ããïŒãŸãã¯ç¡å¹ã«ããããŸãã¯ãã®éïŒããŒã«å€æ°ïŒ0ãŸãã¯1ïŒãå«ãŸããŸãã
åãµãã·ã¹ãã ã«ã¯ãç¬èªã®å¶åŸ¡ãã¡ã€ã«ããããŸãã ãããã®ããã€ãã«ã€ããŠä»¥äžã§èª¬æããŸãã
å¶åŸ¡ã°ã«ãŒããäœæããã«ã¯ãããããã®ãµãã·ã¹ãã ã«ãã¹ãããããã£ã¬ã¯ããªãäœæããã ãã§ãã å¶åŸ¡ãã¡ã€ã«ã¯ããã®ãµããã£ã¬ã¯ããªã«èªåçã«è¿œå ãããŸãïŒããã«ã€ããŠã¯ãåŸã§è©³ãã説æããŸãïŒã ã°ã«ãŒããžã®ããã»ã¹ã®è¿œå ã¯éåžžã«ç°¡åã§ããPIDãã¿ã¹ã¯å¶åŸ¡ãã¡ã€ã«ã«æžã蟌ãã ãã§ãã
ãµãã·ã¹ãã ã«çµã¿èŸŒãŸããŠããå¶åŸ¡ã°ã«ãŒãã®ã»ããã¯éå±€ãšåŒã°ããŸãããç°¡åãªå®çšäŸã䜿çšããŠcgroupã®æ©èœã®åçãåæããŠã¿ãŸãããã
cgroupséå±€ïŒå®çšçãªçŽ¹ä»
äŸ1ïŒããã»ããµãªãœãŒã¹ç®¡ç
ã³ãã³ããå®è¡ããŸãïŒ
$ mkdir /sys/fs/cgroup/cpuset/group0
ãã®ã³ãã³ãã䜿çšããŠã次ã®å¶åŸ¡ãã¡ã€ã«ãå«ãå¶åŸ¡ã°ã«ãŒããäœæããŸããã
$ ls /sys/fs/cgroup/cpuset/group0 group.clone_children cpuset.memory_pressure cgroup.procs cpuset.memory_spread_page cpuset.cpu_exclusive cpuset.memory_spread_slab cpuset.cpus cpuset.mems cpuset.effective_cpus cpuset.sched_load_balance cpuset.effective_mems cpuset.sched_relax_domain_level cpuset.mem_exclusive notify_on_release cpuset.mem_hardwall tasks cpuset.memory_migrate
ãããŸã§ã®ãšãããç§ãã¡ã®ã°ã«ãŒãã«ã¯ããã»ã¹ã¯ãããŸããã ããã»ã¹ãè¿œå ããã«ã¯ããã®PIDãã¿ã¹ã¯ãã¡ã€ã«ã«æžã蟌ãå¿
èŠããããŸãã次ã«äŸã瀺ããŸãã
$ echo $$ > /sys/fs/cgroup/cpuset/group0/tasks
$$æåã¯ãçŸåšã®ã·ã§ã«ã«ãã£ãŠå®è¡ãããŠããããã»ã¹ã®PIDã瀺ããŸãã
ãã®ããã»ã¹ã¯ã©ã®CPUã³ã¢ã«ãå²ãåœãŠãããŠããŸãããããã¯æ¬¡ã®ã³ãã³ãã§ç¢ºèªãããŸãã
$ cat /proc/$$/status |grep '_allowed' Cpus_allowed: 2 Cpus_allowed_list: 0-1 Mems_allowed: 00000000,00000001 Mems_allowed_list: 0
ãã®ã³ãã³ãã®åºåã¯ã察象ã®ããã»ã¹ã«çªå·0ããã³1ã®2ã€ã®CPUã³ã¢ã䜿çšå¯èœã§ããããšã瀺ããŠããŸãã
ãã®ããã»ã¹ãçªå·0ã®ã«ãŒãã«ã«ããã€ã³ããããŠã¿ãŸãããã
$ echo 0 >/sys/fs/cgroup/cpuset/group0/cpuset.cpus
äœãèµ·ãã£ãã®ã確èªããŠãã ããïŒ
$ cat /proc/$$/status |grep '_allowed' Cpus_allowed: 1 Cpus_allowed_list: 0 Mems_allowed: 00000000,00000001 Mems_allowed_list: 0
äŸ2ïŒã¡ã¢ãªç®¡ç
åã®äŸã§äœæããã°ã«ãŒããå¥ã®ãµãã·ã¹ãã ã«åã蟌ã¿ãŸãã
$ mkdir /sys/fs/cgroup/memory/group0
次ã«ãå®è¡ããŸãïŒ
$ echo $$ > /sys/fs/cgroup/memory/group0/tasks
å¶åŸ¡ã°ã«ãŒãgroup0ã®ã¡ã¢ãªæ¶è²»ãå¶éããŠã¿ãŸãããã ãããè¡ãã«ã¯ããã¡ã€ã«memory.limit_in_bytesã«é©åãªå¶éãèŠå®ããå¿
èŠããããŸãã
$ echo 40M > /sys/fs/cgroup/memory/group0/memory.limit_in_bytes
cgroupsãšã³ãžã³ã¯ãéåžžã«åºç¯ãªã¡ã¢ãªç®¡çæ©èœãæäŸããŸãã ããšãã°ããã®å©ãã«ãããéèŠãªããã»ã¹ãOOMãã©ãŒã®ããããã³ãããæ»æãããã®ãé²ãããšãã§ããŸãã
$ echo 1 > /sys/fs/cgroup/memory/group0/memory.oom_control $ cat /sys/fs/cgroup/memory/group0/memory.oom_control oom_kill_disable 1 under_oom 0
ããšãã°ãsshããŒã¢ã³ãå¥ã®å¶åŸ¡ã°ã«ãŒãã«é
眮ãããã®ã°ã«ãŒãã®OOM-killerãç¡å¹ã«ãããšãã¡ã¢ãªæ¶è²»ãèªåŒµãããŠãã殺ããããããšã¯ãããŸããã
äŸ3ïŒããã€ã¹ç®¡ç
ã³ã³ãããŒã«ã°ã«ãŒããå¥ã®éå±€ã«è¿œå ããŸãã
$ mkdir /sys/fs/cgroup/devices/group0
ããã©ã«ãã§ã¯ãã°ã«ãŒãã«ã¯ããã€ã¹ãžã®ã¢ã¯ã»ã¹ã«é¢ããå¶éããããŸããã
$ cat /sys/fs/cgroup/devices/group0/devices.list a *:* rwm
å¶éãèšå®ããŠã¿ãŸãããã
$ echo 'c 1:3 rmw' > /sys/fs/cgroup/devices/group0/devices.deny
ãã®ã³ãã³ãã¯ãã³ã³ãããŒã«ã°ã«ãŒãã®çŠæ¢ãªã¹ãã«/ dev / nullããã€ã¹ãå«ããŸãã å¶åŸ¡ãã¡ã€ã«ã«ãc 1ïŒ3 rmwããšãã圢åŒã®è¡ãæžããŸããã æåã«ãããã€ã¹ã®ã¿ã€ãã瀺ããŸãããã®äŸã§ã¯ãããã¯æåããã€ã¹ïŒæåããã€ã¹ã®ç¥ïŒã§ç€ºãããæåããã€ã¹ã§ãã ä»ã®2ã€ã®ã¿ã€ãã®ããã€ã¹ã¯ããããã¯ããã€ã¹ïŒbïŒãšãã¹ãŠã®å¯èœãªããã€ã¹ïŒaïŒã§ãã 以äžã¯ãããã€ã¹ã®ã¡ãžã£ãŒçªå·ãšãã€ããŒçªå·ã§ãã 次ã®åœ¢åŒã®ã³ãã³ãã䜿çšããŠãçªå·ã確èªã§ããŸãã
$ ls -l /dev/null
ãã¡ããã/ dev / nullã®ä»£ããã«ãä»ã®ãã¹ãæå®ã§ããŸãã ãã®ã³ãã³ãã®åºåã¯æ¬¡ã®ããã«ãªããŸãã
crw-rw-rw- 1 root root 1, 3 May 30 10:49 /dev/null
åºåã®æåã®æ¡ã¯ã¡ãžã£ãŒã§ã2çªç®ã¯ãã€ããŒçªå·ã§ãã
æåŸã®3æåã¯ã¢ã¯ã»ã¹æš©ã瀺ããŸããr-æå®ããããã€ã¹ãããã¡ã€ã«ãèªã¿åãèš±å¯ãw-æå®ããããã€ã¹ã«æžã蟌ãèš±å¯ãm-æ°ããããã€ã¹ãã¡ã€ã«ãäœæããèš±å¯
次ã«ãå®è¡ããŸãïŒ
$ echo $$ > /sys/fs/cgroup/devices/group0/tasks $ echo "test" > /dev/null
æåŸã®ã³ãã³ããå®è¡ããããšãã·ã¹ãã ã¯ãšã©ãŒã¡ãã»ãŒãžã衚瀺ããŸãã
-bash: /dev/null: Operation not permitted
ã¢ã¯ã»ã¹ãæåŠããããããã©ã®ãããªæ¹æ³ã§ãdevice / dev / nullãšå¯Ÿè©±ããããšã¯ã§ããŸããã
ã¢ã¯ã»ã¹ã埩å
ããïŒ
$ echo a > /sys/fs/cgroup/devices/group0/devices.allow
ãã®ã³ãã³ãã®çµæããšã³ããªa *ïŒ* rwmã/sys/fs/cgroup/devices/group0/devices.allowãã¡ã€ã«ã«è¿œå ããããã¹ãŠã®å¶éãåé€ãããŸãã
cgroupãšã³ã³ãããŒ
äžããããäŸãããcgroupsã®åçãäœã§ãããã¯æããã§ããç¹å®ã®ããã»ã¹ãã°ã«ãŒãã«å
¥ããããããµãã·ã¹ãã ã«ãåã蟌ã¿ããŸãã ããã§ãããè€éãªäŸã調ã¹ãŠãLXCã®äŸã䜿çšããŠçŸä»£ã®ã³ã³ãããŒåããŒã«ã§cgroupãã©ã®ããã«äœ¿çšãããããèããŠã¿ãŸãããã
LXCãã€ã³ã¹ããŒã«ããã³ã³ãããŒãäœæããŸãã
$ sudo apt-get install lxc debootstrap bridge-utils $ sudo lxc-create -n ubuntu -t ubuntu -f /usr/share/doc/lxc/examples/lxc-veth.conf $ lxc-start -d -n ubuntu
ã³ã³ãããäœæããŠèµ·åããåŸãcgroupsãã£ã¬ã¯ããªã§äœãå€æŽãããããèŠãŠã¿ãŸãããã
$ ls /sys/fs/cgroup/memory cgroup.clone_children memory.limit_in_bytes memory.swappiness cgroup.event_control memory.max_usage_in_bytes memory.usage_in_bytes cgroup.procs memory.move_charge_at_immigrate memory.use_hierarchy cgroup.sane_behavior memory.numa_stat notify_on_release lxc memory.oom_control release_agent memory.failcnt memory.pressure_level tasks memory.force_empty memory.soft_limit_in_bytes
ã芧ã®ãšãããåéå±€ã«lxcãã£ã¬ã¯ããªã衚瀺ãããUbuntuãµããã£ã¬ã¯ããªãå«ãŸããŠããŸãã lxcãã£ã¬ã¯ããªå
ã®æ°ããã³ã³ããããšã«åå¥ã®ãµããã£ã¬ã¯ããªãäœæãããŸãã ãã®ã³ã³ããã§å®è¡ãããŠãããã¹ãŠã®ããã»ã¹ã®PIDã¯ããã¡ã€ã«/ sys / fs / cgroup / cpu / lxc / [ã³ã³ããå] / tasksã«æžã蟌ãŸããŸã
cgroupså¶åŸ¡ãã¡ã€ã«ã䜿çšãããã次ã®ãããªç¹å¥ãªlxcã³ãã³ãã䜿çšããŠãã³ã³ããã«ãªãœãŒã¹ãå²ãåœãŠãããšãã§ããŸãã
$ lxc-cgroup -n [ ] memory.limit_in_bytes 400
ã³ã³ãããŒã¯Dockerãsystemd-nspawnãªã©ã®ã³ã³ãããŒã§ãåæ§ã§ãã
cgroupã®æ¬ ç¹
ååšã®ã»ãŒ10幎éãcgroupsã¡ã«ããºã ã¯ç¹°ãè¿ãæ¹å€ãããŠããŸãã
LWN.netã®1ã€ã®
èšäºã®èè
ãè¿°ã¹ãããã«ãcgroupsã³ã¢ã®éçºè
ã¯ç©æ¥µçã«ãããå«ã£ãŠããŸãã ãã®å«æªã®çç±ã¯ããã®èšäºã®äŸãããç解ã§ããŸãããææ
ãªãã§å¯èœãªéãäžç«ã«ããããšããŸããããã³ã³ãããŒã«ã°ã«ãŒããåãµãã·ã¹ãã ã«åå¥ã«çµ±åããããšã¯éåžžã«äžäŸ¿ã§ãã ããã«è©³ããèŠããšããã®ã¢ãããŒãã¯æ¥µç«¯ãªççŸã«ãã£ãŠç¹åŸŽä»ããããããšãããããŸãã
ããšãã°ããã¹ããããã³ã³ãããŒã«ã°ã«ãŒããäœæãããšãäžéšã®ãµãã·ã¹ãã ã§ã¯èŠªã°ã«ãŒãã®èšå®ãç¶æ¿ãããäžéšã§ã¯ç¶æ¿ãããŸããã
cpusetãµãã·ã¹ãã ã§ã¯ã芪ã³ã³ãããŒã«ã°ã«ãŒãã®å€æŽã¯èªåçã«ãã¹ããããã°ã«ãŒãã«æž¡ãããŸãããä»ã®ãµãã·ã¹ãã ã§ã¯ããã§ã¯ãªããããclone.childrenãã©ã¡ãŒã¿ãŒãã¢ã¯ãã£ãã«ããå¿
èŠããããŸãã
cgroupsã®ãããã®æ¬ ç¹ããã®ä»ã®æ¬ ç¹ã®é€å»ã«ã€ããŠã¯ãã«ãŒãã«éçºã³ãã¥ããã£ã§é·ãéç¶ããããŠããŸãã
ãã®äž»é¡ã«é¢ããæåã®ããã¹ãã®1ã€ã¯ã 2012幎ã®åãããã®ãã®ã§ãã
ãã®ããã¹ãã®èè
ã§ããFacebookãšã³ãžãã¢ã®Teje Hyeã¯ãcgroupã®äž»ãªåé¡ã¯ããµãã·ã¹ãã ãå¶åŸ¡ã°ã«ãŒãã®å€æ°ã®éå±€ã«æ¥ç¶ãããŠãã誀ã£ãçµç¹ã§ãããšæ瀺çã«ææããŸããã 圌ã¯ããã 1ã€ã®éå±€ã䜿çšããåã°ã«ãŒãã®ãµãã·ã¹ãã ãåå¥ã«è¿œå ããããšãææ¡ããŸããã ãã®ã¢ãããŒãã§ã¯ãååãå€æŽããããŸã§æ·±å»ãªå€æŽãå¿
èŠã§ããããªãœãŒã¹åé¢ã¡ã«ããºã ã¯ã
cgroupã§ã¯ãªã
cgroup ïŒåæ°ïŒãšåŒã°ããããã«ãªããŸããã
å®è£
ãããã€ãããŒã·ã§ã³ã®æ¬è³ªãããã«è©³ãã調ã¹ãŸãã
Cgroup v2ïŒæ°æ©èœ
äžèšã®ããã«ãcgroup v2ã¯ã«ãŒãã«ããŒãžã§ã³4.5以éã®Linuxã«ãŒãã«ã«å«ãŸããŠããŸãã ãã ããå€ãããŒãžã§ã³ããµããŒããããŠããŸãã ããŒãžã§ã³4.6ã«ã¯ãã«ãŒãã«ã®ããŒãæã«æåã®ããŒãžã§ã³ã®ãµããŒããç¡å¹ã«ã§ããããããæ¢ã«ååšããŸãã
çŸåšãcgroup v2ã§ã¯ãblkioãã¡ã¢ãªãPIDã®3ã€ã®ãµãã·ã¹ãã ã®ã¿ã§äœæ¥ã§ããŸãã CPUãªãœãŒã¹ã®ç®¡çãå¯èœã«ãããããïŒãããŸã§ã®ãã¹ãããŒãžã§ã³ïŒãæ¢ã«ç»å ŽããŠããŸãã
Cgroup v2ã¯ã次ã®ã³ãã³ãã䜿çšããŠããŠã³ããããŸãã
$ mount -t cgroup2 none [ ]
/ cgroup2ãã£ã¬ã¯ããªã«cgroup 2ãããŠã³ããããšããŸãã 次ã®å¶åŸ¡ãã¡ã€ã«ããã®ãã£ã¬ã¯ããªã«èªåçã«äœæãããŸãã
- cgroup.controllers-ãµããŒããããŠãããµãã·ã¹ãã ã®ãªã¹ããå«ãŸããŠããŸãã
- cgroup.procs-ããŠã³ããããšããŸã³ãããã»ã¹ãå«ããã·ã¹ãã ã§å®è¡äžã®ãã¹ãŠã®ããã»ã¹ã®ãªã¹ããå«ãŸããŸãã ã°ã«ãŒããäœæãããšããã®ãã¡ã€ã«ãäœæãããŸãã ããã»ã¹ãã°ã«ãŒãã«è¿œå ããããŸã§ç©ºã§ãã
- cgroup.subtree_control-ãã®å¶åŸ¡ã°ã«ãŒãã«å¯ŸããŠã¢ã¯ãã£ãåããããµãã·ã¹ãã ã®ãªã¹ããå«ãŸããŠããŸãã ããã©ã«ãã¯ç©ºã§ãã
æ°ããã³ã³ãããŒã«ã°ã«ãŒãããšã«åããã¡ã€ã«ãäœæãããŸãã ã«ãŒããã£ã¬ã¯ããªã«ãªãcgroup.eventsãã¡ã€ã«ãã°ã«ãŒãã«è¿œå ãããŸãã
æ°ããã°ã«ãŒãã¯æ¬¡ã®ããã«äœæãããŸãã
$ mkdir /cgroup2/group1
ã°ã«ãŒãã«ãµãã·ã¹ãã ãè¿œå ããã«ã¯ããã®ãµãã·ã¹ãã ã®ååãcgroup.subtree_controlãã¡ã€ã«ã«æžã蟌ã¿ãŸãã
$ echo "+pid" > /cgroup2/group1/cgroup.subtree_control
åæ§ã®ã³ãã³ãã䜿çšããŠãµãã·ã¹ãã ãåé€ãããã©ã¹ã®ä»£ããã«ãã€ãã¹ã®ã¿ãé
眮ããŸãã
$ echo "-pid" > /cgroup2/group1/cgroup.subtree_control
ã°ã«ãŒãã®ãµãã·ã¹ãã ãã¢ã¯ãã£ãã«ãªããšãè¿œå ã®å¶åŸ¡ãã¡ã€ã«ããã®ã°ã«ãŒãã«äœæãããŸãã ããšãã°ãPIDãµãã·ã¹ãã ãã¢ã¯ãã£ãã«ãããšãpids.maxããã³pids.currentãã¡ã€ã«ããã£ã¬ã¯ããªã«è¡šç€ºãããŸãã ãããã®ãã¡ã€ã«ã®æåã®ãã¡ã€ã«ã¯ã°ã«ãŒãå
ã®ããã»ã¹ã®æ°ãå¶éããããã«äœ¿çšããã2çªç®ã®ãã¡ã€ã«ã¯çŸåšã°ã«ãŒãã«å«ãŸããŠããããã»ã¹ã®æ°ã«é¢ããæ
å ±ãå«ãã§ããŸãã
æ¢åã®ã°ã«ãŒãå
ã§ããµãã°ã«ãŒããäœæã§ããŸãã
$ mkdir /cgroup2/group1/subgroup1 $ mkdir /cgroup2/group1/subgroup2 $ echo "+memory" > /cgroup2/group1/cgroup.subtree_control,
ãã¹ãŠã®ãµãã°ã«ãŒãã¯ã芪ã°ã«ãŒãã®ç¹æ§ãç¶æ¿ããŸãã äžèšã®äŸã§ã¯ãPIDãµãã·ã¹ãã ã¯group1ãšãã®äžã«ãã¹ããããäž¡æ¹ã®ãµãã°ã«ãŒãã®äž¡æ¹ã§ã¢ã¯ãã£ãã«ãªããŸãã pids.maxããã³pids.currentãã¡ã€ã«ããããã«è¿œå ãããŸãã äžèšã¯ã¹ããŒã ã䜿çšããŠèª¬æã§ããŸãã
ãã¹ããããã°ã«ãŒãïŒäžèšãåç
§ïŒãšã®èª€è§£ãé¿ããããã次ã®ã«ãŒã«ãcgroup v2ã«é©çšãããŸãããµãã·ã¹ãã ãæ¢ã«ã¢ã¯ãã£ãã«ãªã£ãŠããå Žåããã¹ããããã°ã«ãŒãã«ããã»ã¹ãè¿œå ã§ããŸããã
cgroupsã®æåã®ããŒãžã§ã³ã§ã¯ããããã®ãµãã°ã«ãŒããç°ãªããµãã·ã¹ãã ã«çµã¿èŸŒãŸããç°ãªãéå±€ã®äžéšã§ããå Žåãããã»ã¹ã¯åæã«è€æ°ã®ãµãã°ã«ãŒãã«å±ããããšãã§ããŸããã 2çªç®ã®ããŒãžã§ã³ã§ã¯ã1ã€ã®ããã»ã¹ã1ã€ã®ãµãã°ã«ãŒãã®ã¿ã«å±ããããšãã§ãããããæ··ä¹±ãé¿ããããŸãã
ãããã«
ãã®èšäºã§ã¯ãcgroupsã¡ã«ããºã ã®ä»çµã¿ãšãæ°ããããŒãžã§ã³ã«å ããããå€æŽã«ã€ããŠèª¬æããŸããã 質åãè¿œå ãããå Žå-ã³ã¡ã³ããžããããã
ãããã¯ãããã«æ·±ãæãäžããã人ã®ããã«ãèå³æ·±ãè³æãžã®ãªã³ã¯ã®ãªã¹ãã以äžã«ç€ºããŸãã
äœããã®çç±ã§ããã«ã³ã¡ã³ããæ®ããªãå Žåã¯ã
åœç€Ÿã®ããã°ã«ããããã