カーネルバージョン4.19.91-24.al7
以降のAlibaba Cloud Linux 2とカーネルバージョン5.10.46-7.al8
以降のAlibaba Cloud Linux 3は、グループID機能をサポートしています。 グループID機能を使用して、CPUコントロールグループ (cgroups) に異なるIDを設定し、cgroups内のプロセス (タスク) の優先順位を定義できます。
背景情報
レイテンシに敏感なタスクとコンピューティングタスクを同じインスタンスにデプロイする場合、Linuxカーネルスケジューラは、スケジューリングのレイテンシとカーネルスケジューリングに対する低優先度のタスクの影響を最小限に抑えるために、優先度の高いタスクにより多くのスケジューリング機会を提供する必要があります。 上記のシナリオでは、Alibaba Cloud LinuxがグループID機能を提供し、CPU cgroupsのスケジューリング優先順位を設定するために使用できるインターフェイスを追加します。 優先度が異なるタスクには、次の特徴があります。
優先度の高いタスクのウェイクアップ遅延は最小限です。
優先度の低いタスクは、優先度の高いタスクのパフォーマンスには影響しません。
優先度の低いタスクをウェイクアップしても、優先度の高いタスクのパフォーマンスには影響しません。
低優先度タスクはハードウェアユニットを共有せず、高優先度タスクのパフォーマンスに悪影響を与えません。
前提条件
カーネルバージョン
4.19.91-26
、4.19.91-26.1
、4.19.91-26.2
、または4.19.91-26.3
のAlibaba Cloud Linux 2では、カーネルでグループID機能が無効になっています。uname -r
コマンドを実行して、Alibaba Cloud Linux 2のカーネルバージョンを照会できます。カーネルバージョン
5.10.112-11.al8
、5.10.112-11.1.al8
、5.10.112-11.2.al8
、5.10.134-12.al8
、5.10.134-12.1.al8
、または5.10.134-12.2.al8
のAlibaba Cloud Linux 3では、カーネルでグループID機能が無効になっています。
4.19.91-25.1.al7
から4.19.91-25.5.al7
の範囲のカーネルバージョンでAlibaba Cloud Linux 2のグループID機能を使用すると、ダウンタイムが発生します。 この場合、カーネルのバージョンを4.19.91-25.6.al7
以降にアップグレードしてください。 詳細については、「カーネルバージョンの変更」トピックの「カーネルのアップグレード」をご参照ください。Alibaba Cloud Linux 3とカーネルバージョン
5.10.134-12.2.al8
がx86_64アーキテクチャを使用している場合、次のコマンドを実行してグループID機能を有効にします。yum makecache sudo yum install scheduler-group-identity.x86_64 -y
カーネルバージョン
4.19.91-26.4
以降のAlibaba Cloud Linux 2およびカーネルバージョン5.10.134-13.al8
以降のAlibaba Cloud Linux 3では、/proc/sys/kernel/sched_group_identity_enabled
インターフェイスが追加され、グループID機能を有効にできます。 グループID機能を使用する前に、sudo sh -c 'echo 1 > /proc/sys/kernel/sched_group_identity_enabled '
コマンドを実行して機能を有効にする必要があります。
グループID機能の仕組み
グループID機能を使用すると、CPU cgroupsのIDを設定して、cgroups内のタスクの優先順位を定義できます。 グループID機能は、デュアル赤黒ツリーアーキテクチャに依存しています。 完全公正スケジューラ (CFS) スケジューリングキューの赤黒ツリーに基づく低優先度の赤黒ツリーが追加され、低優先度のタスクが格納されます。
カーネルがIDが構成されているタスクをスケジュールすると、カーネルはタスクの優先度に基づいてタスクを処理します。 次の表に、優先度の高い順にIDを示します。
ID | 説明 |
| 優先度の高いタスクを識別します。 高優先度タスクは、通常または低優先度タスクよりもリソースを先取りする機会が多い。 CFSが優先度の高いタスクをスケジュールする場合、次のシナリオが発生する可能性があります。
|
| 通常優先度のタスクを識別します。 通常優先度のタスクは、低優先度のタスクよりもリソースを先取りする機会が多い。 CFSが通常優先度のタスクをスケジュールする場合、次のシナリオが発生する可能性があります。
|
| 優先度の低いタスクを識別します。 CFSが低優先度のタスクをスケジュールする場合、次のシナリオが発生する可能性があります。
|
上記のIDは、CPU cgroupsのリソース管理ポリシーに基づいて適用されます。
同じレベルのCPU cgroupsのタスクの場合、IDの優先順位が有効になります。
異なるレベルのCPU cgroups内のタスクの場合、IDの優先度は親cgroups内のタスクでは有効になりませんが、子cgroups内のタスクでは有効になります。
同一のID優先順位を有するタスクの場合、リソースは、CFSポリシーに準拠して競合される。
ID_UNDELCLASS
またはID_NORMAL
IDで識別されるタスクのランタイムが最小値に達しない場合があることに注意してください。
その他のID
ID | 説明 |
| SMTエクスペラータスクを識別します。 SMTエクスペラータスクがSMT CPUを実行すると、タスクは |
| タスクが起動したときに、タスクがスケジューラーポリシーの制限内でアイドル状態のCPUを検索しようとすることを指定します。 |
|
|
インターフェイス
IDの設定に使用するインターフェイス
グループID機能は、タスクIDを設定できるように、次のインターフェイスを提供します。
/sys/fs/cgroup/cpu/$cg/cpu.identity
および/sys/fs/cgroup/cpu/$cg/cpu.bvt_warp_ns
。$cg
変数は、タスクが実行される子cgroupディレクトリノードを指定します。 インターフェイスを使用する前に、次の項目に注意してください。cpu.bvt_warp_ns
インターフェイスはクイック設定インターフェイスです。 インターフェースの書き込まれた値は、ID値に変換される。cpu.identity
およびcpu.bvt_warp_ns
インターフェイスを使用して、cgroupsのIDを変更できます。cpu.identity
インターフェイスを使用して書き込まれたidentity値は、cpu.bvt_warp_ns
インターフェイスを使用して以前に書き込まれたidentity値を上書きしますが、cpu.bvt_warp_ns
インターフェイスの値は変更されません。cpu.bvt_warp_ns
インターフェイスを使用して記述されたID値は、以前にcpu.identity
インターフェイスを使用して記述されたID値を上書きしますが、cpu.identity
インターフェイスの値は変更されません。いずれかのインターフェイスを使用して、タスクIDを設定できます。 インターフェイスを同時に使用しないことをお勧めします。
オペレーティングシステムのカーネルに関連する操作に慣れていない場合は、
cpu.identity
インターフェイスを使用しないことをお勧めします。
次の表に、インターフェイスを示します。
インターフェイス
説明
cpu.identity
デフォルト値は0で、
ID_NORMAL
IDを指定します。インタフェースは5ビットフィールドである。 各ビットの有効値: 0と1。 値0は、アイデンティティが仮定されないことを指定する。 1の値は、アイデンティティが仮定されることを指定する。 各ビットの説明:
インターフェイスが空のままの場合、
ID_NORMAL
IDが使用されます。ビット0:
ID_UNDELCLASS
アイデンティティを指定する。ビット1:
ID_HIGHCLASS
アイデンティティを指定する。ビット2:
ID_SMT_EXPELLER
アイデンティティを指定する。ビット3:
ID_IDLE_SAVER
アイデンティティを指定する。ビット4:
ID_IDLE_SEEKER
アイデンティティを指定する。
たとえば、cgroupのIDを
ID_HIGHCLASS
とID_IDLE_SEEKER
に設定する場合、ビット1とビット4を1に設定し、その他のビットを0に設定して、10010のバイナリ値を取得します。 次に、echo 18 > /sys/fs/cgroup/cpu/$cg/cpu.identity
コマンドを実行して、cpu.identityインターフェイスに18を書き込みます。cpu.bvt_warp_ns
デフォルト値は0で、
ID_NORMAL
IDを指定します。 有効な値:2:
ID_SMT_EXPELLER
、ID_IDLE_SEEKER
、およびID_HIGHCLASS
IDを指定します。 cpu.identityインターフェイスの対応する値は22です。1:
ID_HIGHCLASS
およびID_IDLE_SEEKER
IDを指定します。 cpu.identityインターフェイスの対応する値は18です。0:
ID_NORMAL
IDを指定します。 cpu.identityインターフェイスの対応する値は0です。-1:
ID_UNDELCLASS
およびID_IDLE_SAVER
IDを指定します。 cpu.identityインターフェイスの対応する値は9です。-2:
ID_UNDELCLASS
およびID_IDLE_SAVER
IDを指定します。 cpu.identityインターフェイスの対応する値は9です。
説明デフォルトでは、Alibaba Cloud Linuxはcgroup v1インターフェイスをサポートしています。 5.10カーネルシリーズのカーネルバージョン
5.10.134-13
以降のAlibaba Cloud Linux 3は、グループID機能用に次のcgroup v2インターフェイスもサポートしています。/sys/fs/cgroup/$cg/cpu.identity
および/sys/fs/cgroup/$cg/cpu.bvt_warp_ns
です。$cg
変数は、タスクが実行される子cgroupディレクトリノードを指定します。カーネルスケジューリング機能の有効化または無効化に使用するインターフェイス
次のコマンドを実行すると、
sched_features
インターフェイスを使用してカーネルスケジューリング機能のデフォルト設定を表示できます。sudo cat /sys/kernel/debug/sched_features
次の表に、カーネルのスケジューリング機能を示します。
カーネルスケジューリング機能
説明
デフォルト値
ID_IDLE_AVG
この機能は、
ID_IDLE_SAVER
IDと一緒に使用され、アイドル時間に向けてID_UNDELCLASS
タスクのランタイムをカウントします。 これにより、ID_UNDELCLASS
タスクのみが実行されているときにCPUがアイドル状態のままにならず、リソースの浪費を防ぎます。ID_IDLE_AVG
: この機能が有効になっていることを示します。ID_RESCUE_EXPELLEE
この機能は、負荷分散シナリオで使用されます。 タスクが使用可能なCPUリソースを見つけることができない場合、
ID_UNDELCLASS
タスクを追い出しているCPUを使用して負荷を分散します。 この機能は、ID_UNDELCLASS
タスクをできるだけ早く追い出した状態から移動するのに役立ちます。ID_RESCUE_EXPELLEE
: この機能が有効になっていることを示します。ID_EXPELLEE_NEVER_HOT
この機能が有効になった後、別のCPUに追い出されているタスクを移行する要求が開始された場合、ホットキャッシュによって移行要求が拒否されることはありません。 この機能は、
ID_UNDELCLASS
タスクをできるだけ早く追い出した状態から移動するのに役立ちます。NO_ID_EXPELLEE_NEVER_HOT
: この機能が無効になっていることを示します。ID_LOOSE_EXPEL
この機能を有効にすると、CPUがタスクを選択するたびに削除ステータスが更新されるのではなく、
sched_expel_update_interval
カーネルパラメーターで指定された時間に基づいてステータスが自動的に更新されます。 この機能の設定は、CPUがタスクを選択したときのステータス更新にのみ影響します。 プロセッサ間割り込み (IPI) の更新は影響を受けません。NO_ID_LOOSE_EXPEL
: この機能が無効になっていることを示します。ID_LAST_HIGHCLASS_STAY
この機能を有効にすると、CPUで実行された最後の
ID_HIGHCLASS
タスクを別のCPUに移行できなくなります。ID_LAST_HIGHCLASS_STAY
: この機能が有効になっていることを示します。ID_EXPELLER_SHARE_コア
この機能を有効にすると、
ID_SMT_EXPELLER
タスクは、ID_SMT_EXPELLER
タスクが既に実行されている物理コアで優先的に実行できます。この機能を無効にすると、
ID_SMT_EXPELLER
タスクが物理コアに分散されます。 このように、ID_SMT_EXPELLER
タスクは互いに干渉しません。
ID_EXPELLER_SHARE_CORE
: この機能が有効になっていることを示します。ID_ABSOLUTE_EXPEL
Alibaba Cloud Linux 3では、この機能はカーネルバージョン
5.10.134-16.3
で導入され、5.10カーネルシリーズのカーネルバージョン5.10.134-16.3
以降で使用できます。 この機能を有効にすると、ID_NORMAL
またはID_HIGHCLASS
タスクが実行用のタスクキューに存在する場合、ID_UNDELCLASS
タスクは完全に抑制され、スケジュールできません。 最悪のシナリオでは、ID_UNDELCLASS
タスクが不足します。 ハイブリッド展開シナリオでは、機能を有効にする前に、異なるIDを持つタスクの負荷を評価します。NO_ID_ABSOLUTE_EXPEL
: この機能が無効になっていることを示します。ID_LOAD_バランス
Alibaba Cloud Linux 3では、この機能はカーネルバージョン
5.10.134-16.3
で導入され、5.10カーネルシリーズのカーネルバージョン5.10.134-16.3
以降で使用できます。 この機能を有効にすると、スケジューラはID_UNDELCLASS
タスクのみが実行されているCPUをアイドル状態と見なし、スケジューラが負荷を分散するときにID_HIGHCLASS
タスクをアイドル状態のCPUに移行しようとします。 移行中、スケジューラはID_HIGHCLASS
タスクをCPUに分散しようとします。 これにより、ID_HIGHCLASS
タスク間のCPUリソースの競合とハイパースレッディング (HT) 推論が防止され、各ID_HIGHCLASS
タスクが十分なCPUリソースを取得できるようになります。NO_ID_LOAD_BALANCE
: この機能が無効になっていることを示します。sysctl
がカーネルパラメーターを設定するために使用するインターフェイスグループ識別機能の特定の機能は、カーネルパラメータの値に依存する。 カーネルパラメーターを次の表に示します。
カーネルパラメーター
説明
単位
デフォルト値
/proc/sys/kernel/sched_expel_update_interval
CPUがタスクを選択したときに削除ステータスが自動的に更新される間隔。 このカーネルパラメーターは、
ID_LOOSE_EXPEL
機能が有効になっている場合にのみ有効になります。ミリ秒
10
/proc/sys/kernel/sched_expel_idle_balance_delay
CPUがタスクを追い出しているときの最小
アイドルバランス
間隔。 -1の値は、アイドルバランス
が許可されないことを指定します。ID_UNDELCLASS
タスクのみがCPUに存在し、タスクが追い出されている場合、CPUはアイドル状態になります。 負荷分散効果を改善するために、CPU上でアイドルバランス
が実行される。 ただし、ID_UNDELCLASS
タスクが破損する可能性があります。 この問題を軽減するには、sched_expel_idle_balance_delay
パラメーターを指定します。ミリ秒
-1
/proc/sys/kernel/sched_idle_saver_wmark
CPUアイドル時間の透かし。
ID_IDLE_SAVER
タスクが起動すると、タスクは、アイドル時間が指定されたウォーターマークを超えるアイドルCPUを見つけようとします。ns
0
/proc/sys/kernel/sched_group_identity_enabled
カーネルバージョン
4.19.91-26.4
以降、/proc/sys/kernel/sched_group_identity_enabled
インターフェイスが追加され、グループID機能を有効にできます。 グループID機能を使用する前に、echo 1 > /proc/sys/kernel/sched_group_identity_enabled
コマンドを実行して機能を有効にする必要があります。グループID機能を有効にすると、cgroupの
cpu.bvt_warp_ns
またはcpu.identity
インターフェイスの値がゼロでない場合、/proc/sys/kernel/sched_group_identity_enabled
インターフェイスにデータを書き込むことはできません。説明カーネルのバージョンが
4.19.91-26.4.al7
、4.19.91-26.5.al7
、または4.19.91-26.6.al7
の場合、sched_group_identity_enabled
インターフェイスが1に設定され、cgroupのcpu.bvt_warp_nsインターフェイスの値がゼロでない場合、/proc/sys ///sched_group_idity_settings___
を読み取るとエラーが発生します。 これは、インターフェイスの通常の使用には影響しない読み取りバグです。 このバグは、カーネルバージョン4.19.91-27.al7
以降で修正されています。非該当
0
情報出力
グループID機能を使用すると、次のコマンドを実行してさまざまなパラメーターを表示できます。
cat /proc/sched_debug
出力パラメーターを次の表に示します。
パラメーター | 説明 |
| 現在のCPUで実行されている |
| 現在のCPUで実行されている |
| 現在のCPUで実行されている非 |
|
|
|
|
| 現在のCPUでの |
| 現在のCPUでの |
|
|
| CPUがタスクの削除を開始したときの2つの赤黒ツリーの最小vruntimesの違い。 |
| CPUの削除ステータスによって発生した2つの赤黒ツリーの最小vruntimes間の累積差。 |
| 優先度の低い赤黒ツリーの最小vruntime。 |