ビジネス要件に基づいて、カーネル5.10.134-17以降のバージョンを使用して、Alibaba Cloud Linux 3オペレーティングシステムでカーネルプリエンプションモードを動的に切り替えることができます。 たとえば、インスタンスの実行中に、なしプリエンプションモードから任意プリエンプションモードに切り替えて、ビジネスのレイテンシ要件を満たすことができます。 このトピックでは、カーネルバージョン5.10.134-17以降のバージョンのAlibaba Cloud Linux 3オペレーティングシステムでカーネルプリエンプションモードを切り替える方法と、サポートされているカーネルプリエンプションモードのパフォーマンスの違いについて説明します。
カーネルのプリエンプションモード
次の表に、カーネルバージョン5.10.134-17以降のAlibaba Cloud Linux 3オペレーティングシステムでサポートされているカーネルプリエンプションモードを示します。
プリエンプションモード | 説明 |
none |
|
任意 |
|
カーネルのプリエンプションモードを変更する
カーネルバージョン5.10.134-17以降のAlibaba Cloud Linux 3オペレーティングシステムでは、次の方法でカーネルプリエンプションモードを変更できます。
カーネルのプリエンプションモードを永続的に変更する
カーネルのプリエンプションモードは、インスタンスの再起動後に永続的に変更され、保持されます。
カーネルのプリエンプションモードを変更するには、preempt=none設定をbootcmdlineパラメーターに追加または削除します。
現在のカーネルのプリエンプションモードを表示します。
sudo cat /sys/kernel/debug/sched_preempt現在のカーネル情報を表示します。
sudo grubby --info=0カーネルのプリエンプションモードを変更します。
<kernel>の値を、手順2で照会したカーネルバージョンに置き換えます。 例:/boot/vmlinuz-5.10.134-17.2.al8.x86_64カーネルのプリエンプションモードを
任意に変更します。sudo grubby --update-kernel=<kernel> --remove-args="preempt=none"カーネルのプリエンプションモードを
noneに変更します。sudo grubby --update-kernel=/boot/vmlinuz-<kernel> --args="preempt=none"
インスタンスを再起動して、変更を有効にします。
sudo reboot新しいカーネルのプリエンプションモードを表示します。
sudo cat /sys/kernel/debug/sched_preempt
カーネルのプリエンプションモードを一時的に変更する
debugfsインターフェイスを使用して、カーネルのプリエンプションモードを一時的かつ動的に変更できます。 インスタンスの再起動後、新しいカーネルプリエンプションモードは無効になります。
この例では、カーネルプリエンプションモードが一時的に自発的に変更されています。
現在のカーネルのプリエンプションモードを表示します。
sudo cat /sys/kernel/debug/sched_preempt次の図は、現在のカーネルプリエンプションモードが
noneであることを示しています。
カーネルのプリエンプションモードを
任意に変更します。sudo sh -c 'echo voluntary > /sys/kernel/debug/sched_preempt'新しいカーネルのプリエンプションモードを表示します。
sudo cat /sys/kernel/debug/sched_preempt次の図は、新しいカーネルのプリエンプションモードが
任意であることを示しています。
カーネル先取りモードの性能解析
エンドツーエンドのシナリオでは、x86およびArm64アーキテクチャを使用するMySQL、Redis、およびNGINXインスタンスでは、noneモードおよび自発的なプリエンプションモードでのベンチマークテストの結果は、noneモードがほとんどの場合より良いパフォーマンスを提供し、2つのモード間のパフォーマンスギャップは比較的小さいことを示しています。 この例では、MySQLシナリオのベンチマークテスト結果が使用されます。
x86およびArm64アーキテクチャでは、oltp_write_only、oltp_read_only、およびoltp_read_writeメトリックがテストされます。 テスト結果は、1秒あたりのトランザクション (TPS) と1秒あたりのクエリ (QPS) の値が大きいほど、avg latencyとavg 95thの値が小さくなり、パフォーマンスが向上することを示しています。
以下の実施例では、無モードの試験結果を1に正規化している。 次の図は、なしモードと任意モードのパフォーマンスデータの違いを示しています。
x86

Arm64

x86およびArm64アーキテクチャでは、前の図に示すように、noneモードが任意モードよりも優れています。