CentOS 7
Sponsored Link

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
# 指定プロセスID は [tasks] へ登録される

[root@dlp ~]#
cat /sys/fs/cgroup/cpu/cpu_quota-70/tasks

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";
    }
}
 
Tweet