5.2. 外部カーネルパラメーターの重要な変更

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

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

cpuidle.governor = [CPU_IDLE]
使用する cpuidle ガバナーの名前
deferred_probe_timeout = [KNL]

これは、プローブへの依存関係で遅延しているプローブが待機をやめるまでのタイムアウトを秒単位で設定するデバッグパラメーターです。

オプトインされている特定の依存関係 (サブシステムまたはドライバー) のみは無視されます。タイムアウト 0 の場合は、initcalls の最後にタイムアウトします。また、このパラメーターは、再試行後も遅延しているプローブリストにデバイスをダンプします。

kvm.nx_huge_pages = [KVM]

このパラメーターは、X86_BUG_ITLB_MULTIHIT バグのソフトウェアによる回避策を制御します。

オプションは次のとおりです。

  • force - 常に回避策をデプロイします。
  • off - 回避策をデプロイしません。
  • auto (デフォルト) - X86_BUG_ITLB_MULTIHIT の存在をベースに回避策をデプロイします。

ソフトウェアによる回避策がホストに対して有効化されている場合、ゲストはネスト化されたゲストに対して回避策を有効化する必要はありません。

kvm.nx_huge_pages_recovery_ratio = [KVM]
このパラメーターは、Huge Page に定期的にザッピングされる 4KiB ページの数を制御します。0 の値ではリカバリーが無効になります。値が 0 以外の N の場合、カーネルベースの仮想マシン (KVM) は、毎分 4KiB ページの N 分の 1 をザッピングします。デフォルト値は 60 です。
page_alloc.shuffle = [KNL]

ページアロケーターが空きリストをランダム化するかどうかを制御するブール値フラグ。

ランダム化は、カーネルがダイレクトマップ方式のメモリーサイドキャッシュのあるプラットフォームで実行中であることを検知すると、自動的に有効にされます。このパラメーターを使用して、この動作をオーバーライドすることや、無効にすることができます。

フラグの状態は、/sys/module/page_alloc/parameters/shuffle ファイルの sysfs pseudo ファイルシステムから読み込むことができます。

panic_print =

パニックが発生したときにシステム情報を出力するビットマスク。

ユーザーは、以下のビットを組み合わせて選択できます。

  • ビット 0 - すべてのタスク情報の出力
  • ビット 1 - システムメモリー情報の出力
  • ビット 2 - タイマー情報の出力
  • ビット 3 - CONFIG_LOCKDEP カーネル設定がオンの場合にロック情報を出力
  • ビット 4 - ftrace バッファーの出力
  • ビット 5 - バッファーのすべての printk メッセージを出力
rcutree.sysrq_rcu = [KNL]
新しい猶予期間がまだ開始していない原因を特定することを目的に、sysrq キーを強制的に使用して Tree RCU の rcu_node ツリーをダンプします。
rcutorture.fwd_progress = [KNL]
この観念をサポートするリードコピー更新 (RCU) のタイプについて、RCU の猶予期間の進捗テストを有効にします。
rcutorture.fwd_progress_div = [KNL]
進捗テストの緊密なループを実行する、CPU のストール警告期間の分数を指定します。
rcutorture.fwd_progress_holdoff = [KNL]
連続する進捗テスト間で待機する秒数
rcutorture.fwd_progress_need_resched = [KNL]
cond_resched() 呼び出しを、進捗テストの緊密なループ中に、need_resched() の確認に入れます。
tsx = [X86]

このパラメーターは、Transactional Synchronization Extensions (TSX) 制御に対応する Intel プロセッサーで TSX 機能を制御します。

オプションは次のとおりです。

  • on - システムで TSX を有効にします。すべての既知のセキュリティー脆弱性に対する軽減策はありますが、TSX は以前の予測関連の CVE を複数助長しました。その結果、有効にしたままにすると、これに関連する未知のセキュリティーリスクが存在する可能性があります。
  • off - システムで TSX を無効にします。このオプションは、Microarchitectural Data Sampling (MDS) に対する脆弱性がない新しい CPU でのみ実行可能です。つまり、そういった CPU には MSR_IA32_ARCH_CAPABILITIES.MDS_NO=1 があり、マイクロコード更新を介して新しい IA32_TSX_CTRL モデル固有レジスタ― (MSR) を取得します。この新しい MSR により、TSX 機能の信頼できる非アクティブ化が実現します。
  • auto - システムで、X86_BUG_TAA が存在する場合に TSX を無効にし、それ以外の場合に TSX を有効にします。

このパラメーターを指定しない場合は、tsx=off と同じです。

詳細は、アップストリームの カーネルドキュメント を参照してください。

tsx_async_abort = [X86,INTEL]

このパラメーターは、TSX Async Abort (TAA) 脆弱性の軽減策を制御します。

Micro-architectural Data Sampling (MDS) と同様に、Transactional Synchronization Extensions (TSX) に対応した特定の CPU は、CPU 内部バッファーに対する不正使用に関して脆弱です。この不正使用では、特定の条件下で情報を開示ガジェットに転送することが可能です。

脆弱なプロセッサーでは、攻撃者が直接アクセス権を持たないデータにアクセスするために、キャッシュ側のチャネル攻撃で、予測的に転送されるデータを利用できます。

オプションは次のとおりです。

  • full - TSX が有効な場合に、脆弱性のある CPU で TAA 軽減策を有効にします。
  • full,nosmt - 脆弱性のある CPU で TAA 軽減策を有効にし、同時マルチスレッディング (SMT) を無効にします。TSX が無効になっていると、CPU がクロススレッド TAA 攻撃に対して脆弱ではないため、SMT は無効になりません。
  • off - TAA 軽減策を無条件で無効にします。

    MDS の影響を受けるマシンでは、MDS 軽減策をアクティブにすることで tsx_async_abort=off パラメーターが阻害される可能性があります。これは両方の脆弱性が同じメカニズムで軽減されるためです。したがって、この軽減策を無効にするには、mds=off パラメーターも指定する必要があります。

    このオプションを指定しない場合、tsx_async_abort=full と同じになります。MDS の影響を受ける CPU と MDS 軽減策をデプロイする CPU では、TAA 軽減策は必要なく、その他の軽減策も提供されません。

詳細は、アップストリームの カーネルドキュメント を参照してください。

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

intel_iommu = [DMAR]

Intel IOMMU ドライバー Direct Memory Access Remapping (DMAR)。

オプションは次のとおりです。

  • sm_on [デフォルトではオフ] - デフォルトで、ハードウェアがスケーラブルモードのトランザクションに対応していると通知する場合に、スケーラブルモードが無効になります。このオプションが設定されていると、スケーラブルモードは、これをサポートすると主張するハードウェアで使用されます。
isolcpus = [KNL,SMP,ISOL]

このパラメーターは、特定のセットの CPU を阻害から分離します。

  • managed_irq - 分離された CPU が、管理割り込みによって対象とならないようにするサブパラメーター。これには、分離された CPU を含む割り込みマスクがあります。管理された割り込みのアフィニティーはカーネルが処理し、/proc/irq/* インターフェイス経由で変更することはできません。

    この分離はベストエフォートであり、デバイスキューに自動的に割り当てられる割り込みマスクに分離されたハウスキーピング CPU が含まれる場合にのみ有効です。ハウスキーピング CPU がオンラインの場合、この割り込みはハウスキーピング CPU に転送され、ハウスキーピング CPU で送信される I/O は分離された CPU を妨害できません。

    キューのアフィニティーマスクが分離された CPU しか含まない場合、このパラメーターは割り込みルーティングの決定には影響を与えません。ただし、割り込みは、それらの分離された CPU で実行しているタスクが I/O を送信する場合にのみ配信されます。ハウスキーピング CPU 上で送信された I/O は、これらのキューに影響を与えません。

mds = [X86,INTEL]

オプションの変更は次のとおりです。

  • off - TSX Async Abort (TAA) の影響を受けるマシンでは、TAA 軽減策をアクティブにすることで、mds=off が阻害される可能性があります。これは両方の脆弱性が同じメカニズムで軽減されるためです。したがって、この軽減策を無効にするには、tsx_async_abort=off カーネルパラメーターも指定する必要があります。

このパラメーターを指定しない場合は、mds=full と同じです。

詳細は、アップストリームの カーネルドキュメント を参照してください。

mem_encrypt = [X86-64]

AMD Secure Memory Encryption (SME) の制御

メモリー暗号化を有効にできる場合についての詳細は、アップストリームの カーネルドキュメント を参照してください。

mitigations =

オプションの変更は次のとおりです。

  • 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]

      以下の例外があります。

      kvm.nx_huge_pages=force の場合、kvm.nx_huge_pages に影響を与えません。

  • auto,nosmt - 必要に応じて同時マルチスレッディング (SMT) を無効にし、すべての CPU 脆弱性を軽減します。このオプションは、SMT が失われるとしても常に完全な軽減を希望するユーザー向けです。

    以下に相当します。

    • l1tf=flush,nosmt [X86]
    • mds=full,nosmt [X86]
    • tsx_async_abort=full,nosmt [X86]
rcutree.jiffies_till_sched_qs = [KNL]

このパラメーターは、リードコピー更新 (RCU) が rcu_note_context_switch() および cond_resched() 関数から静止状態のヘルプを求め始める前に指定の猶予期間で必要とされる期間を jiffy 単位で設定します。指定されていない場合、カーネルは、直近で設定された rcutree.jiffies_till_first_fqs および rcutree.jiffies_till_next_fqs カーネルパラメーターをベースに値を計算します。

この計算値は、rcutree.jiffies_to_sched_qs カーネルパラメーターで確認できます。rcutree.jiffies_to_sched_qs を設定しようとすると、上書きされます。

tsc =

このパラメーターは、Time Stamp Counter (TSC) のクロックソース安定性チェックを無効にします。

形式は、<文字列> です。

オプションは次のとおりです。

  • reliable [x86] - TSC クロックソースを信頼できるものとしてマークします。このオプションは、ランタイム時のクロックソース検証と、起動時に実行される安定性チェックを無効にします。また、このオプションでは、古いハードウェアおよび仮想化環境の high-resolution timer モードが有効になります。
  • noirqtime [x86] - Interrupt Request (IRQ) の計算に TSC を使用しません。Read Time-Stamp Counter (RDTSC) が遅れているプラットフォームで IRQ_TIME_ACCOUNTING を無効にする時間を実行するために使用されます。この計算はオーバーヘッドに追加される可能性があります。
  • unstable [x86] - TSC クロックソースを不安定としてマークします。このオプションは、システムの起動時に TSC を無条件で不安定としてマークし、TSC ウォッチドッグの通知が出た後の追加のウォブルを回避します。
  • nowatchdog [x86] - クロックソースウォッチドッグを無効にします。このオプションは、クロックソースウォッチドッグからの割り込みが許可されない厳密なレイテンシー要件のある状況で使用されます。

5.2.3. 新しい /proc/sys/kernel パラメーター

panic_print

パニックが発生したときにシステム情報を出力するビットマスク。

ユーザーは、以下のビットを組み合わせて選択できます。

  • ビット 0 - すべてのタスク情報の出力
  • ビット 1 - システムメモリー情報の出力
  • ビット 2 - タイマー情報の出力
  • ビット 3 - CONFIG_LOCKDEP カーネル設定項目がオンの場合にロック情報を出力
  • ビット 4 - ftrace バッファーの出力

    たとえば、パニック時にタスクとメモリーの情報を出力するには、以下を実行します。

    # echo 3 > /proc/sys/kernel/panic_print

5.2.4. 更新された /proc/sys/kernel パラメーター

threads-max

このパラメーターは、fork() 関数が作成できるスレッドの最大数を制御します。

初期化時に、カーネルは、最大数のスレッドが作成された場合でも、スレッド構造が利用可能な RAM ページの一部 (8 分の 1) だけを占有することのないように、この値を設定します。

threads-max に書き込める最小値は 1 です。最大値は、定数 FUTEX_TID_MASK (0x3fffffff) で指定されます。

この範囲外の値が threads-max に書き込まれた場合、エラー EINVAL が発生します。

5.2.5. 更新された /proc/sys/net パラメーター

bpf_jit_enable

このパラメーターは、Berkeley Packet Filter Just-in-Time (BPF JIT) コンパイラーを有効にします。

BPF は、さまざまなフックポイントでバイトコードの実行を可能にする、柔軟で効率的なインフラストラクチャーです。これは、ネットワーク (XDPtc など)、トレース (kprobesuprobestracepoints など)、およびセキュリティー (seccomp など) のような、数多くの Linux カーネルサブシステムで使用されます。

LLVM には、制限付きの C を一連の BPF 命令にコンパイルできる BPF バックエンドがあります。プログラムが bpf() システムコールを介してロードし、カーネルの検証器を渡した後、JIT はこれらの BPF プログレットをネイティブな CPU 命令に変換します。

JITには複数のフレーバーがあり、新しい eBPF JIT は現在以下の CPU アーキテクチャーでサポートされます。

  • x86_64
  • arm64
  • ppc64 (little および big endians 両方)
  • s390x