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

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

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

fw_devlink.strict = [KNL]

形式: <bool>

このパラメーターを使用すると、推測されるすべての依存関係を必須の依存関係として扱うことができます。この設定は、fw_devlink=on|rpm の場合にのみ適用されます。

no_hash_pointers
このパラメーターを使用すると、コンソールまたはバッファーに出力されるポインターを強制的にハッシュ解除することができます。デフォルトでは、ポインターが %p フォーマット文字列を使用して出力される場合、そのポインターの値はハッシュによって隠されます。これは、権限のないユーザーから実際のカーネルアドレスを隠すセキュリティー機能です。ただし、同等でないポインターを比較できないため、カーネルのデバッグがより困難になります。このコマンドラインパラメーターを指定すると、すべての通常のポインターの真の値が出力されます。%pK フォーマット文字列を使用して出力されたポインターは、引き続きハッシュできます。no_hash_pointers は、カーネルをデバッグする場合にのみ指定し、本番環境では使用しないでください。
no_entry_flush = [PPC]
このパラメーターを使用すると、カーネルに入るときの L1-D キャッシュのフラッシュを回避できます。
no_uaccess_flush = [PPC]
このパラメーターを使用すると、ユーザーデータにアクセスした後に L1-D キャッシュがフラッシュされるのを回避できます。
rcutorture.nocbs_nthreads = [KNL]

このパラメーターを使用すると、Read-copy-update (RCU) コールバックオフロードトグルの数を設定できます。

デフォルト値は 0 (ゼロ) で、トグルを無効にします。

rcutorture.nocbs_toggle = [KNL]
このパラメーターを使用すると、連続するコールバックとオフロードの切り替え試行間の遅延をミリ秒単位で設定できます。
refscale.verbose_batched = [KNL]

このパラメーターを使用すると、追加の printk() ステートメントをバッチ処理できます。

ゼロ (デフォルト) または負の値を指定すると、すべてを印刷できます。それ以外の場合は、N 番目の冗長ステートメントごとに出力します。ここで、N は指定された値です。

strict_sas_size = [X86]

形式: <bool>

このパラメーターを使用すると、サポートされている浮動小数点ユニット (FPU) 機能に応じて、必要なシグナルフレームサイズに対する厳密な sigaltstack サイズチェックを有効または無効にすることができます。このパラメーターを使用して、AT_MINSIGSTKSZ 補助ベクトルをまだ認識していないバイナリーを除外できます。

torture.verbose_sleep_frequency = [KNL]

このパラメーターは、各スリープの間にいくつの詳細な printk() ステートメントを発行するかを指定します。

デフォルト値の 0 (ゼロ) は、verbose-printk() のスリープを無効にします。

torture.verbose_sleep_duration = [KNL]
このパラメーターは、各 verbose-printk() スリープの期間を jiffy 単位で指定します。
tsc_early_khz = [X86]

形式: <unsigned int>

このパラメーターにより、初期の Time Stamp Counter (TSC) キャリブレーションをスキップし、代わりに指定された値を使用できます。このパラメーターは、初期の TSC 周波数発見手順が信頼できない場合に役立ちます。CPUID.16h をサポートし、CPUID.15h を部分的にサポートするオーバークロックシステムなど。

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

amd_iommu = [HW,X86-64]

システム内の AMD IOMMU ドライバーにパラメーターを渡すことができます。

可能な値は次のとおりです。

  • fullflush - IO/TLB エントリーがマップされていないときのフラッシュを有効にします。それ以外の場合は、再利用される前にフラッシュされます。これにより、はるかに高速になります。
  • off - システムで見つかった AMD IOMMU を初期化しません。
  • force_isolation - すべてのデバイスのデバイス分離を強制します。IOMMU ドライバーは、必要に応じて分離要件を引き上げることができなくなりました。このオプションは iommu=pt をオーバーライドしません。
  • force_enable - IOMMU を有効にするとバグがあることがわかっているプラットフォームで、IOMMU を強制的に有効にします。このオプションは注意して使用してください。
acpi.debug_level = [HW,ACPI,ACPI_DEBUG]

形式: <int>

Advanced Configuration and Power Interface (ACPI) デバッグ出力を生成するには、CONFIG_ACPI_DEBUG を有効にする必要があります。debug_layer のビットは、ACPI ソースファイルの _COMPONENT に対応します。たとえば、debug_level の #define _COMPONENT ACPI_EVENTS ビットは、ACPI_DEBUG_PRINT ステートメントのレベルに対応します。たとえば、ACPI_DEBUG_PRINT((ACPI_DB_INFO, …

debug_level マスクのデフォルトは info です。デバッグレイヤーとレベルの詳細については、Documentation/acpi/debug.txt を参照してください。

プロセッサードライバー情報メッセージを有効にします。

acpi.debug_layer=0x20000000

AML の Debug 出力を有効にします。たとえば、AML の解釈中に Debug オブジェクトに保存します。

acpi.debug_layer=0xffffffff, acpi.debug_level=0x2 ACPI ハードウェアに関連するすべてのメッセージを有効にします (acpi.debug_layer=0x2, acpi.debug_level=0xffffffff)。

一部の値は、システムが使用できないほど多くの出力を生成します。log_buf_len パラメーターは、より多くの出力を取得する必要がある場合に役立ちます。

acpi_mask_gpe = [HW,ACPI]

形式: <byte> または <bitmap-list>

_Lxx/_Exx が存在するため、サポートされていないハードウェアまたはファームウェア機能によってトリガーされる一部の汎用イベント (GPE) によって、GPE ディスパッチャーによって自動的に無効にできない GPE フラッディングが発生する可能性があります。この機能を使用して、このような制御されていない GPE フラッディングを防ぐことができます。

cgroup_disable = [KNL]

形式: <無効にするコントローラーまたは機能の名前>

このパラメーターを使用すると、特定のコントローラーまたはオプション機能を無効にすることができます。

cgroup_disable = <controller/feature> の効果は次のとおりです。

  • すべての cgroup を単一の階層にマウントする場合、controller/feature は自動マウントされません
  • controller/feature は、個別にマウント可能なサブシステムとして表示されません
  • controller/feature がオプションの機能である場合、その機能は無効になり、対応する cgroups ファイルは作成されません

    現在、メモリーコントローラーのみがこれを処理してオーバーヘッドを削減し、他のコントローラーは使用を無効にするだけです。したがって、cgroup_disable=memory だけが実際に価値があります。

    pressure を指定すると、cgroup ごとの Pressure Stall Information のアカウンティング機能が無効になります。

clearcpuid = BITNUM[,BITNUM…​] [X86]
このパラメーターを使用すると、カーネルの CPUID 機能 X を無効にすることができます。有効なビット番号は、arch/x86/include/asm/cpufeatures.h を参照してください。Linux 固有のビットは、カーネルオプションに対して必ずしも安定しているわけではありませんが、ベンダー固有のビットは安定しているはずです。CPUID を直接呼び出すユーザープログラム、または何もチェックせずに機能を使用するユーザープログラムは、引き続き CPUID を認識します。これは、カーネルによって使用されたり、/proc/cpuinfo に表示されたりするのを防ぐだけです。また、いくつかの重要なビットを無効にすると、カーネルが誤動作する可能性があることに注意してください。
iommu.strict = [ARM64, X86]

形式: <"0" | "1">

このパラメーターを使用すると、変換ルックアサイドバッファー (TLB) の無効化動作を設定できます。

可能な値は次のとおりです。

  • 0 - レイジーモード。Direct Memory Access (DMA) 解除操作の使用を延期するように要求します。
  • 1 - 厳密モード (デフォルト)。DMA アンマップ操作は、IOMMU ハードウェア TLB を同期的に無効にします。

    AMD64 および Intel 64 では、デフォルトの動作は同等のドライバー固有のパラメーターに依存します。ただし、いずれかの方法で明示的に指定された厳格モードが優先されます。

rcutree.use_softirq = [KNL]

このパラメーターをゼロに設定すると、すべての RCU_SOFTIRQ 処理を per-CPU rcuc kthreads に移動します。デフォルトはゼロ以外の値です。これは、RCU_SOFTIRQ がデフォルトで使用されることを意味します。

rcutree.use_softirq = 0 を指定して rcuc kthreads を使用します。ただし、CONFIG_PREEMPT_RT=y カーネルは、このカーネルブートパラメーターを無効にする (強制的にゼロに設定する) ことに注意してください。

rcupdate.rcu_normal_after_boot = [KNL]

このパラメーターにより、起動が完了すると、通常の猶予期間プリミティブのみを使用できるようになります。これは、rcu_end_inkernel_boot() 呼び出しが呼び出された後です。CONFIG_TINY_RCU カーネルには影響しません。

CONFIG_PREEMPT_RT=y 設定のカーネルは、このカーネルブートパラメーターを有効にし、強制的に値 1 に設定します。つまり、迅速な Read-copy-update (RCU) 猶予期間でのブート後の試行を、代わりに通常の非迅速な猶予期間処理を使用するように変換します。

spectre_v2 = [X86]

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

デフォルトの操作は、カーネルをユーザー空間攻撃から保護します。

可能な値は次のとおりです。

  • on - 無条件に有効にします。spectre_v2_user=on を意味します
  • off - 無条件に無効にし、spectre_v2_user=off を意味します
  • auto - CPU モデルが脆弱かどうかをカーネルが検出します

    on を選択すると、CPU に応じて実行時に緩和方法が選択されます。使用可能なマイクロコード、CONFIG_RETPOLINE 設定オプションの設定、およびカーネルのビルドに使用されたコンパイラー。

    on を選択すると、ユーザー空間からユーザー空間へのタスク攻撃に対する緩和も有効になります。

    オフを選択すると、カーネルとユーザー空間の保護の両方が無効になります。

    特定の軽減策を手動で選択することもできます。

  • retpoline - 間接分岐を置き換える
  • retpoline,generic - Retpolines
  • retpoline,lfence - LFENCE;間接分岐
  • retpoline,amd - retpoline,lfence の別名
  • eibrs - 強化された間接分岐制限投機 (IBRS)
  • eibrs,retpoline - 強化された IBRS + Retpolines
  • eibrs,lfence - 強化された IBRS + LFENCE
  • ibrs - IBRS を使用してカーネルを保護する
  • ibrs_always - IBRS を使用してカーネルとユーザーランドの両方を保護する
  • retpoline,ibrs_user - 間接ブランチを retpolines に置き換え、IBRS を使用してユーザーランドを保護します

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