Alibaba Cloud Linux 2は、カーネルバージョン4.19.91〜22.al7以降のcgroup v1インターフェイスのCPUバースト機能を提供します。
CPUバースト機能により、CPUスロットリングされたコンテナーはCPU使用率をバーストして、パフォーマンスを向上させ、レイテンシを削減できます。 このトピックでは、cgroup
v1インターフェイスのCPUバースト機能を有効にする方法と、CPUバースト統計を照会する方法について説明します。
このタスクについて
コンテナサービスでは、コンテナはカーネルのCFS帯域幅コントローラによってCPUスロットルされます。 cgroup v1インターフェイスのCPUバースト機能を有効にして、コンテナーが指定された制限を超えてCPU使用率をバーストできるようにすることができます。
この機能により、コンテナの展開密度を低下させることなく、コンテナの品質を保証できます。
注 コンテナのCPUバーストは、コンテナが指定された制限を超えてCPUリソースを利用することを意味します。
CPUバーストの詳細については、Alibaba Cloud Linux 2カーネルのドキュメントをご参照ください。 Alibaba Cloud Linux 2カーネルドキュメントは、Debuginfoパッケージとソースコードパッケージに格納されています。
ドキュメントのパスは、documentation /scheduler/sched-bwc.rstです。 Debuginfoパッケージとソースコードパッケージのダウンロード方法については、「Alibaba Cloud Linux 2を使用する」をご参照ください。
CPUバースト機能の仕組み
CPUバースト機能で割り当てることができるCPUリソースの量は、毎日蓄積されるCPUリソースに依存します。 たとえば、コンテナーは、指定されたCPU制限を下回って実行されると、アイドル状態のCPUリソースを蓄積します。
コンテナがより多くのCPUリソースを使用する必要がある場合、CPUバースト機能を使用して、蓄積されたCPUリソースを消費し、CPU使用率をバーストします。 CPUバースト機能をよりよく理解するために、次のアナロジーを検討してください。
4日間の年次休暇 (CPUスロットル制限) の権利があるとします。 将来の使用のために、最大4つの未払いの休暇日 (CPUバースト制限) を蓄積できます。 1年目と2年目に毎年1日だけ休む場合、理論的には6日間の休暇をとる権利があります。
3年目には、理論的には10日間の休暇を取る権利があります。 ただし、過去2年間で未払いの休暇日数 (CPUバースト制限) を4日しか累積できず、累積休暇日数の最大数に制限があるため、実際には3年目に最大8日間の休暇を取ることができます。
CPUバースト機能の有効化
- cproup v1インターフェイスでCPUバースト機能がグローバルに有効になっているかどうかを確認するには、次のコマンドを実行します。
cat /proc/sys/kernel/sched_cfs_bw_burst_enabled
- 特定の子cgroupのCPUバースト機能を有効にします。
デフォルトでは、cgroup v1インターフェイスのすべての子cgroupに対してCPUバースト機能が無効になっています。 次の操作を実行します。
- 子cgroupのパスに移動し、CFS帯域幅コントローラが有効かどうかを確認するには、次のコマンドを実行します。
cd /sys/fs/cgroup/cpu/ <子cgroupディレクトリの名前> /
cat cpu.cfs_period_us
cat cpu.cfs_quota_us
CFS帯域幅コントローラが有効になった場合、コマンド出力でcpu.cfs_quota_us
に対して正の整数が返されます。 この場合、CPUバースト機能を有効にして、コンテナーが指定された制限よりも多くのCPUリソースを利用できるようにすることができます。
- デフォルトのCPUバースト設定を確認するには、次のコマンドを実行します。
CPUバースト機能が無効になっている場合、コマンド出力でデフォルト値0
が返されます。
- cpuバースト機能を有効にするには、
CPU. cfs_burst_us
を設定します。 cpuバースト機能を有効にするには、CPU. cfs_burst_usを正の整数に設定し、この整数をCPUバースト制限として使用できます。 次の操作では、CPUバースト機能を有効にする方法の例を示します。
- CFS帯域幅コントローラーのデフォルトの
cpu.cfs_quota_us
およびcpu.cfs_period_us
ファイルを設定します。
cpu.cfs_period_usは、CPUリソースが利用される期間の長さを指定します。 cpu.cfs_quota_usは、CPU. cfs_period_usによって指定された各期間中に各子cgroupが利用できるcpuリソースの最大量を指定します。
次のコマンドを実行して
cpu.cfs_period_us
を100 ms、
cpu.cfs_quota_us
を400 msに設定し、各子cgroupが引き続き4つのCPUリソースを取得できるようにします。これは、次の式を使用して計算されます。
cpu.cfs_quota_us
/
cpu.cfs_period
エコー400000 > cpu.cfs_quota_us
エコー100000 > cpu.cfs_period_us
- cpuバースト機能を有効にするには、
CPU. cfs_burst_us
を設定します。
次のコマンドを実行してcpu.cfs_burst_usを600 msに設定し、CPUバースト機能を有効にし、各子cgroupがCPU制限を超える最大6つのCPUリソースを利用できるようにします。
この値は、次の式を使用して計算されます。
cpu.cfs_burst_us
/
cpu.cfs_period_us
。
エコー600000 > cpu.cfs_burst_us
CPUバースト統計のクエリ
- 子cgroupのパスに移動するには、次のコマンドを実行します。
cd /sys/fs/cgroup/cpu/ <子cgroupディレクトリの名前> /
- CPUバースト統計を表示するには、次のコマンドを実行します。
cat cpu.stat
コマンド出力のパラメータ:
nr_burst
: 子cgroupによってトリガーされたCPUバーストの数。
burst_time
: 子cgroupのCPUバースト時間の累積長さ。