Cgroups : コントロールグループを作成する2017/08/30 |
コントロールグループを作成します。
各種リソースの制限やモニタリング等は、各サブシステムに作成したコントロールグループにタスクを登録することで可能となります。 |
|
[1] | 現在利用可能なサブシステムを確認します。 |
[root@dlp ~]# lssubsys cpuset cpu,cpuacct memory devices freezer net_cls,net_prio blkio perf_event hugetlb pids |
[2] | 例として cpu サブシステムにコントロールグループを作成します。 |
# cpu サブシステムの現在の設定を表示 [root@dlp ~]# cgget -g cpu / /: cpu.rt_period_us: 1000000 cpu.rt_runtime_us: 950000 cpu.stat: nr_periods 0 nr_throttled 0 throttled_time 0 cpu.cfs_period_us: 100000 cpu.cfs_quota_us: -1 cpu.shares: 1024 # [cpu_quota-70] という名称のコントロールグループ作成 [root@dlp ~]# cgcreate -g cpu:/cpu_quota-70
# 設定確認 [root@dlp ~]# cgget -g cpu /cpu_quota-70 /cpu_quota-70: cpu.rt_period_us: 1000000 cpu.rt_runtime_us: 0 cpu.stat: nr_periods 0 nr_throttled 0 throttled_time 0 cpu.cfs_period_us: 100000 cpu.cfs_quota_us: -1 cpu.shares: 1024 # cpu.cfs_quota_us のパラメーターを 70000μs に変更 # cpu.cfs_period_us の値 100000μs あたり 70000μs 間 CPUアクセスが可能となる(70%程度) [root@dlp ~]# cgset -r cpu.cfs_quota_us=70000 cpu_quota-70 [root@dlp ~]# cgget -g cpu /cpu_quota-70 /cpu_quota-70: cpu.rt_period_us: 1000000 cpu.rt_runtime_us: 0 cpu.stat: nr_periods 0 nr_throttled 0 throttled_time 0 cpu.cfs_period_us: 100000 cpu.cfs_quota_us: 70000 cpu.shares: 1024 # 各設定は指定したサブシステム配下に作成される [root@dlp ~]# ll /sys/fs/cgroup/cpu/cpu_quota-70 total 0 -rw-rw-r--. 1 root root 0 Aug 31 19:51 cgroup.clone_children --w--w----. 1 root root 0 Aug 31 19:51 cgroup.event_control -rw-rw-r--. 1 root root 0 Aug 31 19:51 cgroup.procs -r--r--r--. 1 root root 0 Aug 31 19:51 cpuacct.stat -rw-rw-r--. 1 root root 0 Aug 31 19:51 cpuacct.usage -r--r--r--. 1 root root 0 Aug 31 19:51 cpuacct.usage_percpu -rw-rw-r--. 1 root root 0 Aug 31 19:51 cpu.cfs_period_us -rw-rw-r--. 1 root root 0 Aug 31 19:51 cpu.cfs_quota_us -rw-rw-r--. 1 root root 0 Aug 31 19:51 cpu.rt_period_us -rw-rw-r--. 1 root root 0 Aug 31 19:51 cpu.rt_runtime_us -rw-rw-r--. 1 root root 0 Aug 31 19:51 cpu.shares -r--r--r--. 1 root root 0 Aug 31 19:51 cpu.stat -rw-rw-r--. 1 root root 0 Aug 31 19:51 notify_on_release -rw-rw-r--. 1 root root 0 Aug 31 19:51 tasks |
[3] | 作成したコントロールグループに特定のプロセスを登録するには以下のように設定します。 |
# 適当に CPU 負荷をかけるジョブを起動 [root@dlp ~]# yes > /dev/null & [1] 1116 # top で確認 [root@dlp ~]# top -b -n 1 -p 1116 top - 13:33:47 up 2 min, 1 user, load average: 0.30, 0.08, 0.03 Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie %Cpu(s): 7.4 us, 1.2 sy, 0.0 ni, 91.3 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 4046872 total, 3811756 free, 111808 used, 123308 buff/cache KiB Swap: 3145724 total, 3145724 free, 0 used. 3736592 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1116 root 20 0 107896 608 512 R 100.0 0.0 0:16.90 yes # CPUコア毎の使用率 (CPU#0 のアベレージが 100%) [root@dlp ~]# mpstat -P ALL 1 1 | grep ^Average Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle Average: all 49.75 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 49.75 Average: 0 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 # プロセスを [cpu_quota-70] へ登録 (複数プロセスを登録する場合は PID をスペース区切りで指定) [root@dlp ~]# cgclassify -g cpu:cpu_quota-70 1116
# CPUコア毎の使用率確認 (CPU#0 のアベレージが 70% になった) [root@dlp ~]# mpstat -P ALL 1 1 | grep ^Average Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle Average: all 34.67 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 64.82 Average: 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: 1 70.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 30.00 |
[4] | コントロールグループを削除するには以下のように実行します。 |
[root@dlp ~]#
cgdelete cpu:cpu_quota-70
# 設定確認 [root@dlp ~]# lscgroup -g cpu:/cpu_quota-70 |
[5] | cgcreate で作成したコントロールグループの設定は、システムが再起動されるとクリアされます。 よって、設定を永続化したい場合は設定ファイルに記述しておく必要があります。 |
[root@dlp ~]#
vi /etc/cgconfig.d/cpu_quota-70.conf # 設定ファイル新規作成 group cpu_quota-70 { cpu { cpu.cfs_quota_us="70000"; } } |
Sponsored Link |