第5章 外部カーネルパラメーターへの重要な変更
この章では、Red Hat Enterprise Linux 9.1 で配布されるカーネルの重要な変更点の概要をシステム管理者に提供します。変更には、たとえば、proc
エントリー、sysctl
および sysfs
のデフォルト値、ブートパラメーター、カーネル設定オプション、または重要な動作の変更などが含まれます。
新しいカーネルパラメーター
- allow_mismatched_32bit_el0 = [ARM64]
このパラメーターを使用すると、EL0 レベルでの 32 ビットサポートが一致しないシステムが 32 ビットアプリケーションを実行できるようになります。32 ビット EL0 をサポートする CPU のセットは、
/sys/devices/system/cpu/aarch32_el0
ファイルによって示されます。また、ホットアンプラグ操作を制限できます。詳細は、
Documentation/arm64/asymmetric-32bit.rst
を参照してください。- arm64.nomte = [ARM64]
- このパラメーターを使用すると、Memory Tagging Extension (MTE) サポートを無条件に無効にすることができます。
- i8042.probe_defer = [HW]
-
このパラメーターを使用すると、
i8042
プローブエラーで遅延プローブを許可できます。 - idxd.tc_override = [HW]
このパラメーターを
<bool>
形式で使用すると、デバイスのデフォルトのトラフィッククラス設定をオーバーライドできます。デフォルト値は
false
(0
) に設定されます。- kvm.eager_page_split = [KVM,X86]
このパラメーターを使用すると、KVM がダーティロギング中にすべてのヒュージページをプロアクティブに分割するかどうかを制御できます。Eager page splitting は、巨大なページを遅延して分割するために必要な書き込み保護障害とメモリー管理ユニット (MMU) ロックの競合を排除することで、vCPU 実行の中断を減らします。
書き込みをほとんど実行しない、または VM メモリーの小さな領域にのみ書き込む VM ワークロードは、熱心なページ分割を無効にして、巨大なページを引き続き読み取りに使用できるようにすることでメリットが得られます。
積極的なページ分割の動作は、
KVM_DIRTY_LOG_INITIALLY_SET
オプションが有効か無効かによって異なります。-
無効にすると、その
memslot
でダーティロギングが有効になっているときに、memslot
内のすべての huge ページが積極的に分割されます。 有効にすると、
KVM_CLEAR_DIRTY
ioctl()
システムコール中に、ページがクリアされている場合にのみ、熱心なページ分割が実行されます。イーガーページ分割は現在、2 次元ページング (TDP) MMU によってマップされた Huge Page の分割のみをサポートしています。
デフォルト値は
Y
(on
) に設定されています。
-
無効にすると、その
- kvm.nx_huge_pages_recovery_period_ms = [KVM]
このパラメーターを使用すると、KVM が 4 KiB ページを huge ページにザッピングする期間を制御できます。
-
値がゼロ以外の
N
の場合、KVM はページの一部をN
ミリ秒ごとにザッピングします。 値が
0
の場合、KVM は比率に基づいて期間を選択し、ページが平均 1 時間後にザッピングされるようにします。デフォルト値は
0
に設定されています。
-
値がゼロ以外の
- l1d_flush = [X86,INTEL]
このパラメーターを使用して、L1D ベースのスヌーピングの脆弱性の軽減を制御できます。
特定の CPU は、特定の条件下で、開示ガジェットに情報を転送できる CPU 内部バッファーに対するエクスプロイトに対して脆弱です。脆弱なプロセッサーでは、攻撃者が直接アクセス権を持たないデータにアクセスするために、キャッシュ側のチャネル攻撃で、予測的に転送されるデータを利用できます。
利用可能なオプションは
on
です。これはenable the interface for the mitigation
を意味します。- mmio_stale_data = [X86,INTEL]
このパラメーターを使用して、プロセッサーメモリーにマップされた I/O (MMIO) の古いデータの脆弱性の緩和を制御できます。
Processor MMIO Stale Data は、MMIO 操作後にデータを公開できる脆弱性のクラスです。公開されたデータは、メタデータサーバー (MDS) および Transactional Asynchronous Abort (TAA) の影響を受ける同じ CPU バッファーで開始または終了する可能性があります。そのため、MDS や TAA と同様に、影響を受ける CPU バッファーをクリアすることで軽減できます。
利用可能なオプションは以下のとおりです。
-
full
: 脆弱な CPU で軽減策を有効にします -
full,nosmt
: 緩和策を有効にし、脆弱な CPU で SMT を無効にします。 off
: 無条件に緩和を無効にしますMDS または TAA の影響を受けるマシンでは、アクティブな MDS または TAA の軽減策によって
mmio_stale_data=off
を防ぐことができます。これらの脆弱性は同じメカニズムで軽減されるからです。したがって、この軽減策を無効にするには、mds=off
とtsx_async_abort=off
も指定する必要があります。このオプションを指定しないことは、
mmio_stale_data=full
と同等です。詳細は、
Documentation/admin-guide/hw-vuln/processor_mmio_stale_data.rst
を参照してください。
-
- random.trust_bootloader={on,off} = [KNL]
-
このパラメーターを使用すると、カーネルの CRNG を完全にシードするためにブートローダー (利用可能な場合) によって渡されるシードの使用を信頼することを有効または無効にすることができます。デフォルトの動作は、
CONFIG_RANDOM_TRUST_BOOTLOADER
オプションによって制御されます。 - rcupdate.rcu_task_collapse_lim = [KNL]
-
このパラメーターを使用すると、猶予期間の開始時に存在するコールバックの最大数を設定できます。これにより、RCU タスクフレーバーが単一のコールバックキューを使用するように折りたたむことができます。この切り替えは、
rcupdate.rcu_task_enqueue_lim
オプションがデフォルト値の-1
に設定されている場合にのみ発生します。 - rcupdate.rcu_task_contend_lim = [KNL]
-
このパラメーターを使用すると、RCU タスクフレーバーを CPU ごとのコールバックキューイングに切り替えるために必要な jiffy あたりのコールバックキューイング時のロック競合イベントの最小数を設定できます。この切り替えは、
rcupdate.rcu_task_enqueue_lim
オプションがデフォルト値の-1
に設定されている場合にのみ発生します。 - rcupdate.rcu_task_enqueue_lim = [KNL]
このパラメーターを使用すると、RCU フレーバーの RCU タスクファミリーに使用するコールバックキューの数を設定できます。デフォルト値の
-1
を使用して、コールバックキューの数を自動的かつ動的に調整できます。このパラメーターは、テストでの使用を目的としています。
- retbleed = [X86]
このパラメーターを使用して、リターン命令による任意の投機的コード実行 (RETBleed) 脆弱性の緩和を制御できます。利用可能なオプションは以下のとおりです。
-
off
: 緩和なし -
auto
: 軽減策を自動的に選択します -
auto,nosmt
: 緩和策を自動的に選択し、必要に応じて完全な緩和策として SMT を無効にします (STIBP を使用しない Zen1 以前のみ)。 -
ibpb
: 基本ブロック境界での短い投機ウィンドウも軽減します。安全で最高のパフォーマンスへの影響。 -
unret
: トレーニングされていないリターンサンクを強制的に有効にします。AMD f15h-f17h ベースのシステムでのみ有効です。 unret,nosmt
:unret
オプションと同様に、STIBP が利用できない場合に SMT を無効にします。auto
オプションを選択すると、実行時に CPU に応じて緩和方法が選択されます。このオプションを指定しないことは、
retbleed=auto
と同等です。
-
- sev=option[,option…] = [X86-64]
-
詳細は、
Documentation/x86/x86_64/boot-options.rst
を参照してください。
更新されたカーネルパラメーター
- acpi_sleep = [HW,ACPI]
フォーマット: { s3_bios、s3_mode、s3_beep、s4_hwsig、s4_nohwsig、old_ordering、nonvs、sci_force_enable、nobl }
-
s3_bios
およびs3_mode
の詳細は、Documentation/power/video.rst
を参照してください。 -
s3_beep
はデバッグ用です。カーネルのリアルモードエントリーポイントが呼び出されるとすぐに、PC のスピーカーからビープ音が鳴ります。 -
s4_hwsig
により、カーネルは休止状態からの再開中に ACPI ハードウェア署名をチェックし、変更されている場合は再開を適切に拒否します。デフォルトの動作は、s4_hwsig
オプションが有効になっていない限り、再開を許可し、署名が変更されたときに単に警告することです。 -
s4_nohwsig
は、再開中に ACPI ハードウェア署名が使用されたり、警告されたりするのを防ぎます。old_ordering
は、デバイスを低電力状態にすることに関して、_PTS
制御メソッドの ACPI 1.0 順序付けを強制します。デフォルトでは、_PTS
の ACPI 2.0 順序が使用されます。 -
nonvs
は、カーネルがサスペンド、ハイバネーション、およびレジューム中に ACPI NVS メモリーを保存および復元するのを防ぎます。 -
sci_force_enable
により、カーネルは S1/S3 からの再開時に直接SCI_EN
を設定します。この動作は ACPI 仕様に反していますが、一部の破損したシステムはそれなしでは機能しません。 nobl
は、システムのサスペンドとレジュームに関して何らかの点で正しく動作しないことが知られているシステムの内部拒否リストを無視します。このオプションを賢く使用してください。詳細は、
Documentation/power/video.rst
を参照してください。
-
- crashkernel=size[KMG],high = [KNL, X86-64, ARM64]
このパラメーターを使用すると、次のように物理メモリー領域を上から割り当てることができます。
- システムに 4 GB を超える RAM がインストールされている場合、物理メモリー領域は 4 GB を超える可能性があります。
システムに 4 GB 未満の RAM がインストールされている場合、物理メモリー領域は 4 GB 未満に割り当てられます (利用可能な場合)。
crashkernel=X
パラメーターが指定されている場合、このパラメーターは無視されます。
- crashkernel=size[KMG],low = [KNL, X86-64]
crashkernel=X,high
を渡すと、カーネルは 4 GB を超える物理メモリー領域を割り当てることができます。これにより、ある程度の低メモリー (たとえば、swiotlb
は少なくとも 64M+32K 低メモリーが必要) と、32 ビットデバイスの DMA バッファーが使い果たされないようにするのに十分な余分な低メモリーを必要とするシステムで、2 番目のカーネルクラッシュが発生します。カーネルは、4 GB 未満に少なくとも 256 M を自動的に割り当てようとします。このパラメーターを使用すると、代わりに 2 番目のカーネルに 4 GB 未満の範囲を指定できます。-
0:
低割り当てを無効にします。crashkernel=X,high
が使用されていない場合、または予約済みメモリーが 4 GB 未満の場合は無視されます。
-
- crashkernel=size[KMG],low = [KNL, ARM64]
-
このパラメーターを使用すると、クラッシュダンプカーネルの DMA ゾーンに低い範囲を指定できます。
crashkernel=X,high
が使用されていない場合、または予約済みメモリーが DMA ゾーンにある場合は無視されます。 - kvm.nx_huge_pages_recovery_ratio = [KVM]
このパラメーターを使用すると、4 KiB ページを定期的に巨大なページにザッピングする回数を制御できます。
-
0
はリカバリーを無効にします N
KVM は、4 KiB ページの1/N
を周期ごとに消去します。デフォルトは
60
に設定されます。
-
- kvm-arm.mode = [KVM,ARM]
このパラメーターを使用して、KVM 操作モードの 1 つを選択できます。
-
none
: KVM を強制的に無効にします。 -
nvhe
: 標準の nVHE ベースのモードで、保護されたゲストはサポートされていません。 protected
: 状態がホストから非公開に保たれているゲストをサポートするnVHE
ベースのモード。カーネルが EL2 レベルで実行されている場合は無効です。デフォルト値は、ハードウェアサポートに基づいて
VHE/nVHE
に設定されています。
-
- mitigations = [X86,PPC,S390,ARM64]
このパラメーターを使用すると、CPU の脆弱性に対するオプションの軽減策を制御できます。これは、厳選されたアーキテクチャーに依存しないオプションのセットであり、それぞれが既存のアーキテクチャー固有のオプションの集合体です。
off
: オプションの CPU 軽減策をすべて無効にします。これによりシステムパフォーマンスが向上しますが、ユーザーを複数の CPU の脆弱性にさらす可能性もあります。-
同等:
nopti [X86,PPC]
、kpti=0 [ARM64]
、nospectre_v1 [X86,PPC]
、nobp=0 [S390]
、nospectre_v2 [X86,PPC,S390,ARM64]
、spectre_v2_user=off [X86]
、spec_store_bypass_disable=off [X86,PPC]
、ssbd=force-off [ARM64]
、l1tf=off [X86]
、mds=off [X86]
、tsx_async_abort=off [X86]
、kvm.nx_huge_pages=off [X86]
、no_entry_flush [PPC]
、no_uaccess_flush [PPC]
、mmio_stale_data=off [X86]
-
例外:
kvm.nx_huge_pages=force
オプションが指定されている場合、これはkvm.nx_huge_pages
には影響しません。
-
同等:
auto
(デフォルト): すべての CPU の脆弱性を軽減しますが、脆弱であっても SMT を有効のままにします。- 同等: (デフォルトの動作)
auto,nosmt
: すべての CPU の脆弱性を軽減し、必要に応じて SMT を無効にします。-
同等:
l1tf=flush,nosmt [X86]
、mds=full,nosmt [X86]
、tsx_async_abort=full,nosmt [X86]
、mmio_stale_data=full,nosmt [X86]
-
同等:
- rcu_nocbs[=cpu-list] = [KNL]
オプションの引数は CPU リストです。
CONFIG_RCU_NOCB_CPU=y
でビルドされたカーネルでは、no-callback CPU モードを有効にできます。これにより、そのような CPU コールバックが softirq コンテキストで呼び出されるのを防ぎます。そのような CPU の RCU コールバックの呼び出しは、代わりに、その目的のために作成されたrcuox/N
kthreads
にオフロードされます。ここで、x
は RCU-preempt を表すp
、RCU-sched を表すs
、猶予期間を仲介するkthread
を表すg
です。N
は CPU 番号です。これにより、オフロードされた CPU の OS ジッターが減少し、HPC およびリアルタイムのワークロードに役立ちます。また、非対称マルチプロセッサーのエネルギー効率も改善できます。-
cpulist
が引数として渡された場合、指定された CPU のリストはブートからコールバックなしモードに設定されます。 -
=
記号とcpulist
引数を省略した場合、起動時に CPU がコールバックなしモードに設定されることはありませんが、cpusets
を使用して実行時にモードを切り替えることができます。
-
- rcutree.kthread_prio = [KNL,BOOT]
このパラメーターを使用すると、CPU ごとの RCU
kthreads
(rcuc/N
) のSCHED_FIFO
優先度を設定できます。この値は、RCU ブーストスレッド (rcub/N
) と RCU 猶予期間kthreads
(rcu_bh
、rcu_preempt
、およびrcu_sched
) の優先度にも使用されます。-
RCU_BOOST
が設定されている場合、有効な値は 1 から 99 であり、デフォルトは1
で、最も優先度の低い優先度です。 RCU_BOOST
が設定されていない場合、有効な値は 0 ~ 99 で、デフォルトは0
、非リアルタイム操作です。RCU_NOCB_CPU
が設定されている場合、NOCB
コールバックkthreads
の優先度を調整する必要があります。
-
- rcutorture.fwd_progress = [KNL]
このパラメーターを使用すると、この概念をサポートするタイプの RCU の RCU 猶予期間の前方進行テストに使用する
kthreads
の数を指定できます。デフォルトは
1
kthread
に設定されています。ゼロ未満の値または CPU の数より大きい値を指定すると、その数の CPU が使用されます。- spectre_v2 = [X86]
このパラメーターを使用すると、Spectre バリアント 2 (間接分岐スペキュレーション) の脆弱性の緩和を制御できます。デフォルトの操作は、カーネルをユーザー空間攻撃から保護します。
-
on
: 無条件に有効にし、spectre_v2_user=on
を意味します -
off
: 無条件に無効にし、spectre_v2_user=off
を意味します -
auto
: カーネルが CPU モデルが脆弱かどうかを検出します -
on
を選択すると、CPU、利用可能なマイクロコード、CONFIG_RETPOLINE
設定オプション、カーネルがビルドされたコンパイラーに応じて、実行時に緩和方法が選択されます (auto
も可能です)。 -
on
を選択すると、ユーザー空間からユーザー空間へのタスク攻撃に対する軽減も有効になります。 -
off
を選択すると、カーネルとユーザー空間の保護の両方が無効になります。 特定の軽減策を手動で選択することもできます。
-
retpoline
: 間接ブランチを置き換えます -
retpoline,generic
: Retpolines -
retpoline、lfence
: LFENCE;間接分岐 -
retpoline,amd
: retpoline,lfence のエイリアス -
eibrs
: 拡張 IBRS -
eibrs,retpoline
: 強化された IBRS + Retpolines -
eibrs,lfence
: 強化された IBRS + LFENCE ibrs
: IBRS を使用してカーネルを保護するこのオプションを指定しないことは、
spectre_v2=auto
と同等です。
-
-
新しい sysctl パラメーター
- max_rcu_stall_to_panic
-
panic_on_rcu_stall
を1
に設定すると、panic()
が呼び出される前に RCU がストールできる回数が決まります。panic_on_rcu_stall
を0
に設定すると、この値は無効になります。 - perf_user_access = [ARM64]
このパラメーターを使用すると、
perf
イベントカウンターを読み取るためのユーザー空間アクセスを制御できます。-
1
に設定すると、ユーザー空間はパフォーマンスモニターカウンターレジスターを直接読み取ることができます。 デフォルトは
0
に設定されており、これはaccess disabled
であることを意味します。詳細は、
Documentation/arm64/perf.rst
を参照してください。
-
- gro_normal_batch
-
このパラメーターを使用すると、GRO の出力でバッチ処理するセグメントの最大数を設定できます。パケットが結合されたスーパーフレームとして、または GRO が結合しないことを決定した元のパケットとして GRO を出ると、NAPI ごとのリストに配置されます。このリストは、セグメント数が
gro_normal_batch
制限に達すると、スタックに渡されます。 - high_order_alloc_disable
このパラメーターを使用すると、オーダー 0 の割り当てを選択できます。デフォルトでは、ページフラグメントのアロケータは高次ページ (X86 システムでは order-3) を使用しようとします。デフォルトの動作では良好な結果が返されますが、特定の状況では、ページの割り当てと解放で競合が発生します。これは、上位ページが CPU ごとのリストに格納されていない古いカーネル (バージョン 5.14 以降) で特に当てはまりました。このパラメーターは現在、主に歴史的に重要なものとして存在しています。
デフォルト値は
0
です。- page_lock_unfairness
このパラメーターの値を指定することにより、ウェイターからページロックを盗むことができる回数を決定できます。このファイルで指定された回数だけロックが盗まれた後、
fair lock handoff
セマンティクスが適用され、ロックを取得できる場合にのみウェイターが起動されます。デフォルト値は
5
です。
変更された sysctl パラメーター
- urandom_min_reseed_secs
-
このパラメーターを使用して、
urandom
プールの再シード間の最小秒数を決定できます。このファイルは互換性のために書き込み可能ですが、このファイルに書き込んでも RNG の動作には影響しません。 - write_wakeup_threshold
-
エントロピーカウントがこのしきい値をビット単位で下回ると、
/dev/random
ファイルへの書き込みを待機しているプロセスを起動できます。このファイルは互換性のために書き込み可能ですが、このファイルに書き込んでも RNG の動作には影響しません。