第3章 外部のカーネルパラメーターに対する重要な変更

本章では、システム管理者向けに Red Hat Enterprise Linux 7.7 に含まれるカーネルの重要な変更点をまとめています。変更には、procエントリー、sysctl、および sysfsのデフォルト値、boot パラメーター、カーネル設定オプションの追加や更新、注目すべき動作の変更などが含まれます。

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

usbcore.quirks = [USB]

このパラメーターは、組み込みの usb コア quirk 一覧を強化する quirk エントリーの一覧を提供します。

このエントリーはコンマで区切られています。各エントリーの形式は VendorID:ProductID:Flags です。

IDs は 4 桁の16 進数で、Flags は文字のセットです。各文字は、ビルトインの quirk を変更します。何もない場合は設定され、設定されている場合は消去します。これらの文字は以下の意味を持ちます。

  • a = USB_QUIRK_STRING_FETCH_255 (文字列記述子は、255 バイトの読み取りで取得しないでください)
  • b = USB_QUIRK_RESET_RESUME (デバイスを正しく再開できないため、リセットすることはできません)
  • c = USB_QUIRK_NO_SET_INTF (デバイスは Set-Interface 要求を処理できません)
  • D = USB_QUIRK_CONFIG_INTF_STRINGS (デバイスはその設定またはインターフェース文字列を処理できません)
  • e = USB_QUIRK_RESET (デバイスはリセットできません (morph デバイスなど)。あるいは、リセットを使用しません)
  • f = USB_QUIRK_HONOR_BNUMINTERFACES (デバイスには bNumbufs 数よりも多くのインターフェース記述があり、これらのインターフェースとの通信を処理できません)
  • g = USB_QUIRK_DELAY_INIT (デバイス記述子を読み取った後、初期化中にデバイスを一時停止する必要があります)
  • h = USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL (高速およびスーパースピードの割り込みエンドポイントの場合、USB 2.0 および USB 3.0 仕様では、インターバル = 2 ^ (bInterval-1) として計算するマイクロフレーム (1 マイクロフレーム = 125 ミリ秒) 単位の間隔が必要です。この quirk を持つデバイスは、計算で使用される指数変数の代わりに、この計算結果として bInterval をレポートします。
  • i = USB_QUIRK_DEVICE_QUALIFIER (デバイスは device_qualifier 記述子要求を処理できません)
  • J = USB_QUIRK_IGNORE_REMOTE_WAKEUP (デバイスは不要なウェイクアップを生成し、リモートウェイクアップ機能を無視します)
  • k = USB_QUIRK_NO_LPM (デバイスは Link Power Management を処理できません)
  • l = USB_QUIRK_LINEAR_FRAME_INTR_BINTERVAL (デバイスは USB 2.0 の計算ではなく、その bInterval をリニアフレームとして報告します)
  • m = USB_QUIRK_DISCONNECT_SUSPEND (正しくないウェイクアップを回避するために、サスペンドの前にデバイスの接続を解除する必要があります)
  • n = USB_QUIRK_DELAY_CTRL_MSG (デバイスは各制御メッセージの後に一時停止する必要があります)

    エントリーの例:

    quirks=0781:5580:bk,0a5c:5834:gij
ppc_tm = [PPC]

ハードウェアトランザクションメモリーを無効にします。

Format: {"off"}

cgroup.memory = [KNL]

cgroup メモリーコントローラーにオプションを渡します。

Format: <string>

nokmem - このオプションは、カーネルメモリーアカウンティングを無効にします。

mds = [X86,INTEL]

MDS (Micro-architectural Data Sampling) 脆弱性の軽減策を制御します。

特定の CPU は、CPU 内部バッファーの悪用に脆弱です。CPU の内部バッファーは、特定の条件下で漏えいさせるガジェットに情報を転送します。

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

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

  • full - 脆弱な CPU で MDS 軽減を有効にします。
  • full,nosmt - 脆弱な CPU で MDS の軽減を有効にし、Simultaneous multithreading (SMT) を無効にします。
  • off - MDS の軽減策を無条件で無効にします。

    このオプションを指定しないと、mds=full と同等になります。

mitigations = [X86,PPC,S390]

CPU 脆弱性に対するオプションの軽減策を制御します。これは、既存のアーキテクチャー固有のオプションの集約となる、一連の、アーキテクチャーに依存しないオプションです。

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

  • off - オプションの CPU 軽減策をすべて無効にします。これによりシステムパフォーマンスが向上しますが、複数の CPU の脆弱性にさらされる可能性もあります。

    以下と同等:

    • nopti [X86,PPC]
    • nospectre_v1 [PPC]
    • nobp=0 [S390]
    • nospectre_v2 [X86,PPC,S390]
    • spec_store_bypass_disable=off [X86,PPC]
    • l1tf=off [X86]
    • mds=off [X86]
  • auto (デフォルト) - すべての CPU 脆弱性を緩和しますが、脆弱な場合でも SMT (Simultaneous multithreading) を有効にしたままにしておきます。これは、SMT がカーネルのアップグレードで勝手に無効化されないようにしたいユーザーや、SMT ベースの攻撃を他の方法で回避できるユーザーを対象にしています。

    以下と同等:

    • (デフォルトの動作)
  • auto,nosmt - すべての CPU 脆弱性を分類し、必要に応じて SMT (Simultaneous multithreading) を無効にします。SMT が失われるでも、これは常に完全な緩和を求めるユーザーを対象としています。

    以下と同等:

    • l1tf=flush,nosmt [X86]
    • mds=full,nosmt [X86]
watchdog_thresh = [KNL]

ハードロックアップ検出ストールのしきい値を秒単位で設定します。

ソフトロックアップ検出のしきい値は、値の倍に設定されます。

値が 0 の場合は、両方のロックアップ検出が無効になります。デフォルトは 10 秒です。

novmcoredd [KNL,KDUMP]

デバイスダンプを無効にします。デバイスダンプにより、ドライバーがダンプデータを vmcore に追加できるようになり、ドライバーが指定したデバッグ情報を収集できるようになります。

ドライバーは、制限なしでデータを追加することができ、このデータはメモリーに保存されるため、メモリーのストレスが著しく発生する可能性があります。

デバイスダンプを無効にすると、メモリーの節約に役立ちますが、ドライバーのデバッグデータは利用できなくなります。

このパラメーターは、CONFIG_PROC_VMCORE_DEVICE_DUMP が設定されている場合にのみ使用できます。

更新済みカーネルパラメーター

resource_alignment

調整したメモリーリソースを再割り当てする調整とデバイスを指定します。

書式は以下のようになります。

  • [<order of align>@][<domain>:]<bus>:<slot>.<func>[; …​]
  • [<order of align>@]pci:<vendor>:<device>\[:<subvendor>:<subdevice>][; …​]

<order of alignment> を指定しないと、PAGE_SIZE がアライメントとして使用されます。PCI-PCI ブリッジはリソースウィンドウを展開する必要がある場合に指定できます。

irqaffinity = [SMP]

デフォルトの irq アフィニティマスクを設定します。

書式は以下のようになります。

  • <cpu number>,…​,<cpu number>
  • <cpu number>-<cpu number>
  • ドライバー (昇順で正の範囲である必要があります)
  • 混合 <cpu number>,…​,<cpu number>-<cpu number>

    ドライバーは、CPU0 にすべてを配置するのではなく、デフォルトの割り込み割り当てにドライバーのアフィニティーマスクを使用します。

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

  • auto (デフォルト) - すべての CPU 脆弱性を緩和しますが、脆弱な場合でも SMT (Simultaneous multithreading) を有効にしたままにしておきます。これは、SMT がカーネルのアップグレードで勝手に無効化されないようにしたいユーザーや、SMT ベースの攻撃を他の方法で回避できるユーザーを対象にしています。

    以下と同等: (デフォルトの動作)

  • auto,nosmt - すべての CPU 脆弱性を分類し、必要に応じて SMT (Simultaneous multithreading) を無効にします。SMT が失われるでも、これは常に完全な緩和を求めるユーザーを対象としています。

    以下と同等:

    • l1tf=flush,nosmt [X86]
    • mds=full,nosmt [X86]

新しい /proc/sys/net/core パラメーター

bpf_jit_kallsyms

Berkeley Packet Filter Only in Time コンパイラーを有効にすると、コンパイルされたイメージはカーネルに対して不明なアドレスになります。これは、トレースや /proc/kallsyms ファイルでは表示されないことを意味します。このため、これらのアドレスのエクスポートが有効になり、デバッグやトレースに使用できます。bpf_jit_harden パラメーターが有効な場合、この機能は無効になっています。

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

0 - Just in Time (JIT) kallsyms エクスポート (デフォルト値) を無効にします。

1 - 特権ユーザーに対してのみ Just in Time (JIT) kallsyms エクスポートを有効にします。

更新済み /proc/sys/fs パラメーター

dentry-state

dentry の割り当てと解除は、自動的に行われます。

linux/include/linux/dcache.h:

struct dentry_stat_t dentry_stat {
        int nr_dentry;
        int nr_unused;
        int age_limit;         (秒単位の期間)
        int want_pages;        (システムによってリクエストされたページ)
        int nr_negative;       (使用されない負のエントリーの数)
        int dummy;              (今後使用するために保持)
};

nr_dentry の数値は、割り当てられた deentry の合計数 (アクティブ + 未使用) を示します。

nr_unused 数値は、アクティブには使用されていないものの、将来再利用するために、最近使用した (LRU) の一覧に保存されている dentry の数を示します。

age_limit 数値は、メモリーが不足したときに再取得できるようになった後の秒単位の期間です。また、shrink_dcache_pages() 関数が呼び出され、dcache がまだ削除されていないときに want_pages はゼロ以外になります。

nr_negative 数値は、いかなるファイルにもマッピングされない負の dentry の未使用 dentry の数を示しています。その代わりに、ユーザーが提供した、存在しないファイルの拒否を加速します。