カーネル4.19.91-24.al7
以降のAlibaba Cloud Linux 2およびカーネル5.10.46-7.al8
以降のAlibaba Cloud Linux 3は、グループID機能をサポートしています。 グループID機能を使用して、CPU制御グループ (cgroups) に異なるIDを設定し、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機能が無効になっているため、グループID機能をサポートしていません。uname -r
コマンドを実行して、Alibaba Cloud Linux 3のカーネルバージョンを表示できます。
4.19.91-25.1.al7
から4.19.91-25.5.al7
の範囲のカーネルバージョンでAlibaba Cloud Linux 2のグループID機能を使用すると、ダウンタイムが発生します。 グループID機能を使用する前に、カーネルのバージョンを4.19.91-25.6.al7
以降にアップグレードしてください。 詳細については、このトピックのFAQセクションを参照してください。カーネルバージョンが
5.10.134-12.2.al8
のAlibaba Cloud Linux 3がx86_64アーキテクチャを使用している場合、次のコマンドを実行してグループID機能を使用します。yummakecache yuminstallscheduler-group-identity.x86_64
カーネル
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機能を使用する前に、echo 1 > /proc/sys/kernel/sched_group_identity_enabled
コマンドを実行して機能を有効にする必要があります。
背景情報
レイテンシに敏感なタスクとコンピューティングタスクを同じインスタンスにデプロイする場合、Linuxカーネルスケジューラは、スケジューリングのレイテンシとカーネルスケジューリングに対する低優先度のタスクの影響を最小限に抑えるために、優先度の高いタスクにより多くのスケジューリング機会を提供する必要があります。 上記のシナリオでは、Alibaba Cloud LinuxはグループID機能を提供し、CPU cgroupsのスケジューリング優先順位を設定するために使用できるインターフェイスを追加します。 優先度が異なるタスクには、次の特徴があります。
優先度の高いタスクは、最小の起動待ち時間を有する。
優先度の低いタスクは、優先度の高いタスクのパフォーマンスには影響しません。
低優先度タスクの起動は、高優先度タスクのパフォーマンスに影響を与えません。
低優先度タスクは、ハードウェアユニットを共有することにより、高優先度タスクのパフォーマンスに影響を与えません。
グループID機能の仕組み
グループID機能を使用すると、CPU cgroupsのIDを設定して、cgroups内のタスクの優先順位を定義できます。 グループID機能は、デュアル赤黒ツリーアーキテクチャに依存しています。 低優先度タスクを格納するために、CFS (Completely Fair Scheduler) スケジューリングキューの赤黒ツリーに基づいて、低優先度の赤黒ツリーが追加されます。
カーネルが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
インターフェイスはクイック設定インターフェイスです。 インターフェースの書き込まれた値は、アイデンティティに変換される。cpu.identity
およびcpu.bvt_warp_ns
インターフェイスを使用して、CPU 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
インターフェイスを使用してカーネルスケジューリング機能のデフォルト設定を表示できます。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_UNDELCLASS
タスクは完全に抑制され、ID_NORMAL
またはID_HIGHCLASS
タスクが実行中のタスクキューにある場合はスケジュールできません。 最悪のシナリオでは、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
以降では、グループID機能を有効にできるように、/proc/sys/kernel/sched_group_identity_enabled
インターフェイスが追加されています。 グループ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。 |
よくある質問
質問: カーネルバージョンを4.19.91-25.1.al7
から4.19.91-25.5.al7
から4.19.91-25.6.al7
以降にアップグレードするにはどうすればよいですか?
回答: 次の手順を実行します。
カーネルバージョンをアップグレードするElastic Compute Service (ECS) インスタンスにログインします。
詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。
次のコマンドを実行して、カーネルのバージョンを照会します。
uname -r
次のコマンドを実行して、カーネルバージョンをアップグレードします。
yum update kernel
次のコマンドを実行して、新しいカーネルバージョンを有効にするためにECSインスタンスを再起動します。
reboot