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

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

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

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 に設定されています。

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=offtsx_async_abort=off も指定する必要があります。

    このオプションを指定しないことは、mmio_stale_data=full と同等です。

    詳細については、Documentation/admin-guide/hw-vuln/processor_mmio_stale_data.rst を参照してください。

rcutree.rcu_delay_page_cache_fill_msec = [KNL]
このパラメーターを使用すると、メモリー不足の状態に応じて、ページキャッシュのリフィルの遅延をミリ秒単位で設定できます。許可される値の範囲は 0:100000 です。
rcuscale.kfree_rcu_test_double = [KNL]
このパラメーターを使用すると、kfree_rcu() 関数の二重引数バリアントをテストできます。このパラメーターが rcuscale.kfree_rcu_test_single と同じ値である場合は、単一引数と二重引数の両方のバリアントがテストされます。
rcuscale.kfree_rcu_test_single = [KNL]
このパラメーターを使用すると、kfree_rcu() 関数の単一引数バリアントをテストできます。このパラメーターが rcuscale.kfree_rcu_test_double と同じ値である場合は、単一引数と二重引数の両方のバリアントがテストされます。
retbleed = [X86]

このパラメーターを使用して、リターン命令による任意の投機的コード実行 (RETBleed) 脆弱性の緩和を制御できます。利用可能なオプションは以下のとおりです。

  • off: 緩和なし
  • auto : 軽減策を自動的に選択します
  • auto,nosmt: 緩和策を自動的に選択し、必要に応じて完全な緩和策として SMT を無効にします (STIBP を使用しない Zen1 以前のみ)。
  • ibpb: 基本ブロック境界での短い投機ウィンドウも軽減します。安全で最高のパフォーマンスへの影響。
  • unret: トレーニングされていないリターンサンクを強制的に有効にします。AMD f15h-f17h ベースのシステムでのみ有効です。
  • unret,nosmt: unret オプションと同様に、STIBP が利用できない場合に SMT を無効にします。

    auto オプションを選択すると、実行時に CPU に応じて緩和方法が選択されます。

    このオプションを指定しないことは、retbleed=auto と同等です。

s390_iommu_aperture = [KNL,S390]

このパラメーターを使用すると、DMA および IOMMU API を介してアクセスできるデバイスごとの DMA アドレス空間のサイズを、メインメモリーのサイズの小数として指定できます。

  • デフォルト値は 1 に設定されています。これは、ハードウェアでサポートされている場合、インストールされている物理メモリーと同じ数の DMA アドレスを同時に使用できることを意味し、すべてのメモリーを一度にマップします。
  • 値を 2 にすると、すべてのメモリーを 2 回マップできます。
  • 0 の値は、ハードウェアによって与えられるもの以外の制限を課しませんが、テーブルのメモリー使用量が大幅に増加します。

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

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 未満の場合は無視されます。
kvm.nx_huge_pages_recovery_ratio = [KVM]

このパラメーターを使用すると、4KiB ページを定期的に巨大なページにザッピングする回数を制御できます。

  • 0 はリカバリーを無効にします
  • N KVM は、4KiB ページの 1/N を周期ごとに消去します。

    デフォルトは 60 に設定されます。

module.sig_enforce = norid [S390]
このパラメーターを使用すると、RID フィールドを無視して、PCI 機能ごとに 1 つの PCI ドメインの使用を強制できます。
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 を使用して実行時にモードを切り替えることができます。
spectre_v2_user = [X86]

このパラメーターを使用すると、ユーザー空間タスク間の Spectre バリアント 2 (間接分岐スペキュレーション) の脆弱性の緩和を制御できます。

  • auto: カーネルは、利用可能な CPU 機能と脆弱性に応じて緩和策を選択します。
  • デフォルトの軽減策は prctl に設定されています。
  • このオプションを指定しないことは、spectre_v2_user=auto と同等です。
spec_store_bypass_disable = [X86]

このパラメーターを使用すると、投機的ストアバイパス (SSB) の脆弱性を軽減するための最適化を使用するかどうかを制御できます。

  • このオプションを指定しないことは、spec_store_bypass_disable=auto と同等です。
  • デフォルトの軽減策は prctl に設定されています。

新しい sysctl パラメーター

perf_user_access = [ARM64]

このパラメーターを使用すると、パフォーマンスイベントカウンターを読み取るためのユーザー空間アクセスを制御できます。

  • 1 に設定すると、ユーザー空間はパフォーマンスモニターカウンターレジスターを直接読み取ることができます。
  • デフォルトは 0 に設定されており、これは access disabled であることを意味します。

    詳細については、Documentation/arm64/perf.rst を参照してください。

force_cgroup_v2_swappiness

このパラメーターを使用すると、cgroupsV1 でのみ使用可能な cgroup ごとの swappiness 値を非推奨にすることができます。systemd の設計上の選択により、すべてのシステムおよびユーザープロセスのほとんどは cgroup 内で実行されます。さらに、これらの cgroup swappiness 値のデフォルトは 60 です。これにより、システムの swappiness 値がシステムのスワップ動作にほとんど影響を与えないという望ましくない結果が生じる可能性があります。

cgroup ごとの swappiness 機能を使用する場合は、force_cgroup_v2_swappiness=1 でシステムを設定して、システム全体でより一貫した swappiness 動作を持たせることができます。

これは RHEL 固有の機能であることに注意してください。