Red Hat Training
A Red Hat training course is available for RHEL 8
24.3. CPU 帯域幅の調整によるアプリケーションへの CPU 時間配分の制御
特定の cgroup ツリーの下にあるアプリケーションへの CPU 時間の配分を調整するには、cpu
コントローラーの関連ファイルに値を割り当てる必要があります。
前提条件
- root 権限がある。
- CPU 時間の配分を制御する 2 つ以上のアプリケーションがある。
- CPU 時間配分のための cgroup の準備 に記載するように、該当するアプリケーションが同じ CPU の CPU 時間を取り合っていることを確認している。
-
cgroups-v2 のマウント で説明されているように、
cgroups-v2
ファイルシステムをマウントしている。 -
CPU 時間配分のための cgroup の準備 で説明されているのと同様に、親コントロールグループとサブコントロールグループの両方に、
cpu
およびcpuset
コントローラーを有効にしている。 以下の例のように、
/sys/fs/cgroup/
ルートコントロールグループ内に 2 つのレベルの サブコントロールグループ を作成していること。… ├── Example │ ├── tasks …
手順
コントロールグループ内のリソース制限を実現するために CPU 帯域幅を設定します。
# echo "200000 1000000" > /sys/fs/cgroup/Example/tasks/cpu.max
最初の値は、一定の期間にサブグループにある全プロセスをまとめて実行できる許容される時間クォータ (マイクロ秒単位) です。2 番目の値は期間の長さを指定します。
一期間中にコントロールグループ内のプロセスが全体としてこのクォータで指定した時間を使い切ってしまうと、残りの時間がスロットルされて、次の期間まで実行できなくなります。
このコマンドは、
/sys/fs/cgroup/Example/tasks
サブグループの全プロセスが 1 秒ごとに 0.2 秒間のみ CPU で実行されるように、CPU 時間の配分の制御を設定します。つまり、毎秒 5 分の 1 です。必要に応じて、時間クォータを確認します。
# cat /sys/fs/cgroup/Example/tasks/cpu.max 200000 1000000
アプリケーションの PID を
Example/tasks
サブグループに追加します。# echo "34578" > /sys/fs/cgroup/Example/tasks/cgroup.procs # echo "34579" > /sys/fs/cgroup/Example/tasks/cgroup.procs
上記のコマンド例は、目的のアプリケーションが
Example/tasks
サブグループのメンバーになり、このサブグループに設定された CPU 時間の配分を超えないようにします。
検証手順
アプリケーションが指定のコントロールグループで実行されていることを確認します。
# cat /proc/34578/cgroup /proc/34579/cgroup 0::/Example/tasks 0::/Example/tasks
上記の出力は、
Example/tasks
サブグループで実行される指定されたアプリケーションのプロセスを示しています。スロットリングされたアプリケーションの現在の CPU 使用率を確認します。
# top top - 11:13:53 up 23:10, 1 user, load average: 0.26, 1.33, 1.66 Tasks: 104 total, 3 running, 101 sleeping, 0 stopped, 0 zombie %Cpu(s): 3.0 us, 7.0 sy, 0.0 ni, 89.5 id, 0.0 wa, 0.2 hi, 0.2 si, 0.2 st MiB Mem : 3737.4 total, 3312.6 free, 133.4 used, 291.4 buff/cache MiB Swap: 4060.0 total, 4060.0 free, 0.0 used. 3376.0 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 34578 root 20 0 18720 1756 1468 R 10.0 0.0 37:36.13 sha1sum 34579 root 20 0 18720 1772 1480 R 10.0 0.0 37:41.22 sha1sum 1 root 20 0 186192 13940 9500 S 0.0 0.4 0:01.60 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd 3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp 4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp ...
PID 34578
およびPID 34579
の CPU 使用率が 10% に減少していることが分かります。Example/tasks
サブグループは、そのプロセスをまとめて 20% の CPU 時間に調整します。コントロールグループにプロセスが 2 つあるため、各プロセスは CPU 時間の 10% を使用できます。
関連情報
- コントロールグループについて
- Linux カーネルリソースコントローラーとは
- cgroups-v2 のマウント
- CPU 時間配分のための cgroup の準備
-
cgroups(7)
、sysfs(5)
の man ページ