第5章 外部カーネルパラメーターへの重要な変更

本章では、システム管理者向けに、Red Hat Enterprise Linux 8.5 に同梱されるカーネルの重要な変更点の概要を説明します。変更には、たとえば、proc エントリー、sysctl および sysfs のデフォルト値、ブートパラメーター、カーネル設定オプション、または重要な動作の変更などが含まれます。

新しいカーネルパラメーター

idxd.sva = [HW]

形式: <bool>

このパラメーターでは、idxd カーネルモジュールに対する SVA (Shared Virtual Memory) サポートを強制的に無効にできます。

デフォルト値は true (1) です。

lsm.debug = [SECURITY]
このパラメーターを使用すると、Linux Security Module (LSM) 初期化デバッグ出力を有効にできます。
lsm = lsm1,…​,lsmN [SECURITY]

このパラメーターでは、Linux セキュリティーモジュール (LSM) の初期化の順序を選択できます。

このパラメーターは、CONFIG_LSM オプションおよび security= パラメーターを上書きします。

rcutree.qovld = [KNL]

このパラメーターでは、キューに入れられた RCU (Read-copy-update) コールバックのしきい値を設定できます。このしきい値を超えると、RCU の force-quiescent-state スキャンにより、cond_resched() システムコールのヘルプが積極的に追加され、IPI の設定により、CPU がより速く静止状態に到達できるようになります。

このパラメーターは、システムの起動時に rcutree.qhimark パラメーターに基づいて設定するため、このパラメーターを 0 より小さい値に設定できます。また、このパラメーターをゼロに設定すると、より積極的なヘルプの参加が無効になります。

rcutree.rcu_unlock_delay = [KNL]

このパラメーターでは、設定のブール値が CONFIG_RCU_STRICT_GRACE_PERIOD=y に設定されているカーネル単位で、rcu_read_unlock()-time 遅延を指定できます。

デフォルト値は 0 です。

遅延が大きいほど、RCU (Read-copy-update) ポインターリークをキャッチする可能性が高くなります。これは、関連する rcu_read_unlock() が完了した後の RCU 保護ポインターの欠陥による使用です。

rcutorture.irqreader = [KNL]
このパラメーターを使用すると、割り込み要求 (IRQ) ハンドラーまたはタイマーハンドラーから RCU (Read-copy-update) リーダーを実行できます。
rcutorture.leakpointer = [KNL]
このパラメーターを使用すると、リーダーから RCU (Read-copy-update) 保護ポインターをリークできます。これによりスプラットが発生することがあります。このようなリークを検出するために、CONFIG_RCU_STRICT_GRACE_PERIOD=y などの設定の機能をテストすることを目的としています。
rcutorture.read_exit = [KNL]
このパラメーターでは、read-then-exit kthread の数を設定して、Read-copy-update (RCU) 更新プログラムと task-exit 処理の相互作用をテストできます。
rcutorture.read_exit_burst = [KNL]
このパラメーターでは、指定した read-then-exit エピソードで、一連の read-then-exit kthread が起動する回数を指定できます。
rcutorture.read_exit_delay = [KNL]
このパラメーターでは、連続した read-then-exit テストエピソードの間の遅延を秒単位で指定できます。
rcutorture.stall_cpu_block = [KNL]
このパラメーターでは、停止中にスリープを設定できます。その結果、他のストール関連のアクティビティーのほかに、プリエンプティブな RCU (Read-copy-update) からの警告が発生する可能性があります。
rcutorture.stall_gp_kthread = [KNL]

このパラメーターでは、RCU (Read-copy-update) 猶予期間 kthread 内で強制スリープし、RCU CPU ストール警告をテストする期間 (秒) を指定できます。

このパラメーターをゼロに設定すると、機能が無効になります。

stall_cpu パラメーターと stall_gp_kthread パラメーターの両方が指定されている場合は、最初に kthread が不足し、次に CPU が不足します。

rcupdate.rcu_cpu_stall_suppress_at_boot = [KNL]
このパラメーターを使用すると、システムの初期起動時に発生する RCU CPU stall 警告メッセージおよび rcuture writer stall 警告を抑制できます。これは、init タスクが起動する前の時間です。
rcupdate.rcu_task_ipi_delay = [KNL]

このパラメーターでは、指定の猶予期間の開始から始まり、RCU (Read-copy-update) タスクが IPI の送信を回避する時間を jiffies 単位で設定できます。

大きな数を設定すると、リアルタイムワークロードへの阻害を回避できますが、猶予期間は長くなります。

refscale.holdoff = [KNL]
このパラメーターでは、test-start holdoff 期間を設定できます。このパラメーターの目的は、干渉を防ぐために、システムの起動が完了するまでテストの開始を遅らせることです。
refscale.loops = [KNL]

このパラメーターでは、テスト中の同期プリミティブでループの数を設定できます。この数を増やすと、ループの開始や終了のオーバーヘッドによるノイズが低減します。

デフォルト値では、パスごとのノイズがすでに、約 2020 x 86 ラップトップでほんの数ピコ秒に低減されています。

refscale.nreaders = [KNL]

このパラメーターでは、リーダーの数を設定できます。

デフォルト値の -1 は N を選択します。N は、CPU 数の約 75% です。

refscale.nruns = [KNL]
このパラメーターでは、実行数を設定できます。各実行数はコンソールログにダンプされます。
refscale.readdelay = [KNL]
このパラメーターでは、読み取り側の critical-section 持続時間 (マイクロ秒) を設定できます。
refscale.scale_type = [KNL]
このパラメーターを使用すると、テストする読み取り保護の実装を指定できます。
refscale.shutdown = [KNL]

このパラメーターを使用すると、パフォーマンステストの終了時にシステムをシャットダウンできます。

デフォルト値は 1 で、システムがシャットダウンします。refscale はカーネルに組み込まれています。

この値は 0 で、システムは実行したままになります。refscale はモジュールとして構築されます。

refscale.verbose = [KNL]
このパラメーターを使用すると、追加の printk() ステートメントを有効にできます。
scftorture.holdoff = [KNL]

このパラメーターでは、テストを開始する前に保留する秒数を指定できます。

このパラメーターは、モジュール挿入の場合はデフォルトで 0 になり、組み込みの smp_call_function() テストの場合は 10 秒になります。

scftorture.longwait = [KNL]

このパラメーターを使用すると、選択した制限までランダムに選択される非常に長い待機を要求できます (秒単位)。

デフォルト値はゼロで、この機能は無効になります。

ゼロ以外の秒数を少しでも要求すると、RCU (Read-copy-update) の CPU stall 警告、ソフトウェアロックに関するエラーなどが発生する可能性があることに注意してください。

scftorture.nthreads = [KNL]

このパラメーターでは、smp_call_function() 関数ファミリーを呼び出すために起動する kthread の数を指定できます。

デフォルトの -1 は、CPU 数と同じ kthread 数を指定します。

scftorture.onoff_holdoff = [KNL]
このパラメーターでは、CPU ホットプラグ操作を開始する前に、テストの開始後待機する秒数を指定できます。
scftorture.onoff_interval = [KNL]

このパラメーターでは、CPU ホットプラグによる連続した操作の間待機する秒数を指定できます。

デフォルト値はゼロで、CPU ホットプラグの操作が無効になります。

scftorture.shutdown_secs = [KNL]

このパラメーターでは、テスト開始後の秒数を指定できます。テストが終了すると、システムがシャットダウンします。

デフォルト値をゼロにすると、システムのシャットダウンを回避できます。ゼロ以外の値は自動テストに役立ちます。

scftorture.stat_interval = [KNL]

このパラメーターでは、現在のテスト統計をコンソールに出力する間隔を秒数で指定できます。

値をゼロにすると、統計出力が無効になります。

scftorture.stutter_cpus = [KNL]
このパラメーターでは、テスト対象の CPU セットへの変更ごとに待機する jiffies 数を指定できます。
scftorture.use_cpus_read_lock = [KNL]
このパラメーターでは、デフォルトの preempt_disable() システムコールの代わりに use_cpus_read_lock() システムコールを使用して、smp_call_function*() 関数のいずれかを呼び出す際に CPU ホットプラグを無効にできます。
scftorture.verbose = [KNL]
このパラメーターを使用すると、追加の printk() ステートメントを有効にできます。
scftorture.weight_single = [KNL]

このパラメーターでは、ゼロの wait パラメーターを持つ smp_call_function_single() 関数に使用する確率の重み付けを指定します。

値を -1 にすると、その他のすべての重みが -1 の場合にデフォルトが選択されます。ただし、少なくとも 1 つの重みにその他の値がある場合は、-1 に設定すると、重みがゼロになります。

scftorture.weight_single_wait = [KNL]
このパラメーターでは、ゼロ以外の wait パラメーターを持つ smp_call_function_single() 機能に使用する確率の重み付けを指定します。詳細は weight_single を参照してください。
scftorture.weight_many = [KNL]

このパラメーターでは、ゼロの wait パラメーターを持つ smp_call_function_many() 関数に使用する確率の重み付けを指定します。

この重みの確率を高く設定すると、システムに深刻な IPI (Inter-processor Interrupt) 負荷がかかる可能性があることに注意してください。

詳細は weight_single を参照してください。

scftorture.weight_many_wait = [KNL]

このパラメーターでは、ゼロ以外の wait パラメーターを持つ smp_call_function_many() 関数に使用する確率の重み付けを指定します。

詳細は、weight_single および weight_many を参照してください。

scftorture.weight_all = [KNL]

このパラメーターでは、ゼロの wait パラメーターを持つ smp_call_function_all() 関数に使用する可能性の加重を指定します。

詳細は、weight_single および weight_many を参照してください。

scftorture.weight_all_wait = [KNL]

このパラメーターでは、ゼロ以外の wait パラメーターを持つ smp_call_function_all() 関数に使用する確率加重を指定します。

詳細は、weight_single および weight_many を参照してください。

sched_energy_aware

このパラメーターは、Energy Aware Scheduling (EAS) を有効または無効にします。

EAS は、Energy Model が利用可能な非対称 CPU トポロジーを持つプラットフォームで自動的に起動します。

お使いのプラットフォームが EAS の要件を満たしているが、これを使用しない場合は、この値を 0 に変更します。

torture.disable_onoff_at_boot = [KNL]
このパラメーターを使用すると、init タスクが起動するまで、CPU ホットプラグコンポーネントの機能を防ぐことができます。
torture.ftrace_dump_at_shutdown = [KNL]

このパラメーターを使用すると、エラーが発生していなくても、torture-test のシャットダウン時に ftrace バッファーをダンプできます。

多くの torture テストが同時に実行されている場合 (特に、rotating-rust ストレージを使用するシステムで) は、これにより操作が非常にコストがかかる場合があります。

更新されたカーネルパラメーター

iommu.forcedac = [ARM64, X86]

このパラメーターを使用すると、PCI デバイスへの IOVA (Input-output Virtual Address) の割り当てを制御できます。

形式: { 0 | 1 }

  • 0 - まず 32 ビットの DMA (Direct Memory Access) アドレスを割り当ててから、必要に応じてフルレンジに戻すようにします。
  • 1 - 使用可能な全範囲から直接割り当てます。このオプションは、32 ビットを超えるアドレス指定に対応する PCI カードに対して Dual Address Cycle を強制します。
page_poison = [KNL]

この boot-time パラメーターを使用すると、CONFIG_PAGE_POISONING=y 設定で利用可能なバディアロケーターのポイズニング状態を変更できます。

  • オフ - ポイズニングを無効にします (デフォルト)。
  • on: ポイズニングを有効にします。
rcuscale.gp_async = [KNL]
このパラメーターを使用すると、call_rcu() などの非同期の猶予期間プリミティブのパフォーマンスを測定できます。
rcuscale.gp_async_max = [KNL]
このパラメーターでは、ライター・スレッドごとの未解決のコールバックの最大数を指定できます。ライタースレッドがこの制限を超えると、対応する rcu_barrier() フレーバーを呼び出して、事前にポストされたコールバックをドレイン (解放) できるようにします。
rcuscale.gp_exp = [KNL]
このパラメーターを使用すると、非同期の猶予期間プリミティブのパフォーマンスを測定できます。
rcuscale.holdoff = [KNL]
このパラメーターでは、test-start holdoff 期間を設定できます。このパラメーターの目的は、干渉を防ぐために、システムの起動が完了するまでテストの開始を遅らせることです。
rcuscale.kfree_rcu_test = [KNL]
このパラメーターを使用すると、kfree_rcu() フラッディングのパフォーマンスを測定できます。
rcuscale.kfree_nthreads = [KNL]
このパラメーターでは、kfree_rcu() 機能のループを実行しているスレッドの数を指定できます。
rcuscale.kfree_alloc_num = [KNL]
このパラメーターでは、1 回の反復で実行する割り当てと解放の数を指定できます。
rcuscale.kfree_loops = [KNL]
このパラメーターでは、rcuscale.kfree_alloc_num 数の割り当てと解放を行うループの数を指定できます。
rcuscale.nreaders = [KNL]

このパラメーターでは、RCU (Read-copy-update) リーダーの数を設定できます。

値 -1 は N を選択します。N は CPU の数です。

rcuscale.nwriters = [KNL]

このパラメーターでは、RCU (Read-copy-update) ライターの数を設定できます。

値の動作は rcuscale.nreaders=N と同じです。N は CPU の数になります。

rcuscale.perf_type = [KNL]
このパラメーターでは、テストする RCU (Read-copy-update) 実装を指定できます。
rcuscale.shutdown = [KNL]
パフォーマンステストが完了したら、このパラメーターを使用してシステムをシャットダウンできます。これは、自動テストをハンズオフする場合に役立ちます。
rcuscale.verbose = [KNL]
このパラメーターを使用すると、追加の printk() ステートメントを有効にできます。
rcuscale.writer_holdoff = [KNL]

このパラメーターでは、猶予期間の間に、マイクロ秒単位で holdoff を書き込むことができます。

デフォルト値はゼロで、no holdoff を意味します。

security = [SECURITY]

このパラメーターでは、システムの起動時に有効にする従来のメジャーセキュリティーモジュールを選択できます。

これは、lsm パラメーターで非推奨になりました。

split_lock_detect = [X86]

このパラメーターでは、スプリットロック検出、またはバスロック検出を有効にできます。

これを有効にし、ハードウェアのサポートがある場合は、キャッシュラインの境界を越えてデータにアクセスするアトミック命令の結果が以下のようになります。

  • スプリットロック検出用のアラインメントチェック例外
  • バスロック検出用のデバッグ例外

    値:

  • off - 機能は有効になりません。
  • warn - カーネルはアプリケーションに関するレート制限付きの警告を出力し、#AC 例外または #DB 例外をトリガーします。このモードは、スプリットロック検出またはバスロック検出に対応する CPU のデフォルトです。ハードウェアで両方の機能が有効になっている場合、デフォルトの動作は #AC になります。
  • fatal - カーネルは、#AC 例外または #DB 例外をトリガーするアプリケーションに SIGBUS シグナルを送信します。ハードウェアで両方の機能が有効になっている場合、デフォルトの動作は #AC になります。
  • ratelimit:N - バスロック検出では、システム全体のレート制限を 1 秒あたり N 個のバスロックに設定します (0 < N ⇐ 1000)。スプリットロック検出の場合は N/A。

    カーネルまたはファームウェアで #AC 例外がヒットすると (ユーザーモードでの実行中には実行されない)、カーネルが warn モードまたは fatal モードで oops を発生させます。

    バスロックの #DB 例外は、CPL > 0 の場合にのみトリガーされます。

usb-storage.quirks =
k = NO_SAME (WRITE_SAME を使用しない、UAS のみ)