4.8. カーネル
RHEL 8.4 のカーネルバージョン
Red Hat Enterprise Linux 8.4 には、カーネルバージョン 4.18.0-305 が同梱されています。
外部カーネルパラメーターの重要な変更 および デバイスドライバー も参照してください。
Extended Berkeley Packet Filter for RHEL 8.4
extended Berkeley Packet Filter (eBPF ) は、限られた一連の関数にアクセスできる制限付きサンドボックス環境において、カーネル領域でのコード実行を可能にするカーネル内の仮想マシンです。この仮想マシンは、特別なアセンブリーのようなコードを実行します。
eBPF バイトコードが最初にカーネルにロードされ、その後に検証が行われます。次に実行時のコンパイルでコードがネイティブマシンコードに変換され、その後、仮想マシンがコードを実行します。
Red Hat は、eBPF 仮想マシンを使用するコンポーネントを数多く提供しています。各コンポーネントの開発フェーズはさまざまです。そのため、現在すべてのコンポーネントが完全にサポートされている訳ではありません。RHEL 8.4 では、以下の eBPF コンポーネントがサポートされています。
- eBPF を使用して Linux オペレーティングシステムの I/O 分析、ネットワーク、およびモニタリングを行う BPF コンパイラーコレクション (BCC) ツールパッケージ。
- BCC ライブラリー。これを使用すると、BCC ツールパッケージで提供されるツールと同様のツールを開発できます。
- eBPF for Traffic Control (tc) 機能。これにより、カーネルネットワークデータパスでのプログラミング可能なパケット処理が可能になります。
- カーネルネットワーキングスタックを処理する前に受信パケットへのアクセスを提供する eXpress Data Path (XDP) 機能は、特定の条件でサポートされます。
-
libbpf
パッケージ。bpftrace
およびbpf/xdp
開発のようなアプリケーションに関連する bpf に極めて重要 -
xdp-tools
パッケージが、AMD および Intel 64 ビットアーキテクチャーでサポートされるようになりました。このパッケージには、XDP 機能用のユーザー空間サポートユーティリティーが含まれます。これには、libxdp
ライブラリー、XDP プログラムを読み込むxdp-loader
ユーティリティー、パケットフィルタリングのxdp-filter
サンプルプログラム、XDP が有効になっているネットワークインターフェイスからパケットを取得するxdpdump
ユーティリティーなどが含まれます。
特定のコンポーネントがサポート対象と示されていない限り、その他のすべての eBPF コンポーネントはテクノロジープレビューとして提供されます。
現在、以下の主要 eBPF コンポーネントは、テクノロジープレビューとして利用できます。
-
bpftrace
トレース言語 -
eXpress Data Path (XDP) パスをユーザー空間に接続する
AF_XDP
ソケット
テクノロジープレビューのコンポーネントに関する詳細情報は、テクノロジープレビュー を参照してください。
新しいパッケージ: kmod-redhat-oracleasm
今回の更新で、ASMLib ユーティリティーのカーネルモジュール部分を提供する新しい kmod-redhat-oracleasm
パッケージが追加されました。Oracle Automated Storage Management (ASM) は、Oracle データベースのデータボリュームマネージャーです。ASMLib は、Linux システムで Oracle ASM デバイスを管理するために使用できるオプションのユーティリティーです。
(BZ#1827015)
xmon プログラムが、攻撃に対して Secure Boot と kernel_lock の耐障害性に対応するように変更
Secure Boot メカニズムが無効になっている場合は、カーネルコマンドラインで xmon
プログラムを読み書きモード (xmon=rw
) に設定できます。ただし、xmon=rw
を指定して Secure Boot モードで起動すると、kernel_lockdown
機能は xmon=rw
を上書きし、これを読み取り専用モードに変更します。Secure Boot の有効化に応じて xmon
の追加動作を以下に示します。
Secure Boot がオンになっている。
-
xmon=ro
(デフォルト) - スタックトレースが出力されている
- メモリーの読み取りが動作している
- メモリー書き込みがブロックされている
Secure Boot がオフになっている。
-
xmon=rw
を設定可能 - スタックトレースが常に出力される
- メモリーの読み取りが常に機能する
-
メモリー書き込みが、xmon
=rw
でのみ許可されている
xmon
へのこれらの変更は、root 権限による攻撃者に対して Secure Boot および kernel_lock
の耐障害性をサポートすることを目的としています。
カーネルコマンドラインパラメーターの設定方法は、カーネルコマンドラインパラメーターの設定 を参照してください。
(BZ#1952161)
Cornelis Omni-Path Architecture (OPA) ホストソフトウェア
Red Hat Enterprise Linux 8.4 は、Omni-Path Architecture (OPA) ホストソフトウェアに完全に対応しています。OPA は、クラスター環境のコンピュートと I/O ノード間の高性能データ転送 (高帯域幅、高メッセージレート、低レイテンシー) のために、初期化とセットアップを行う Host Fabric Interface (HFI) ハードウェアを提供します。
Omni-Path Architecture のインストール手順は、Cornelis Omni-Path ファブリックソフトウェア のリリースノートを参照してください。
SLAB キャッシュのマージがデフォルトで無効
CONFIG_SLAB_MERGE_DEFAULT
カーネル設定オプションが無効になり、SLAB キャッシュはデフォルトでマージされなくなりました。この変更は、キャッシュ使用量のアロケーターの信頼性とトレーサビリティーを強化することを目的としています。以前の slab-cache マージ動作が望ましい場合は、カーネルコマンドラインに slub_merge
パラメーターを追加して再度有効にできます。カーネルコマンドラインパラメーターの設定方法は、カーネルコマンドラインパラメーターの設定 を参照してください。
(BZ#1871214)
ima-evm-utils パッケージがバージョン 1.3.2 にリベースされました。
ima-evm-utils
パッケージがバージョン 1.3.2 にアップグレードされ、バグ修正および機能強化が複数追加されました。以下は、主な変更点です。
- Trusted Platform Module (TPM2) マルチバンク機能の処理に対するサポートが追加されました。
- ブートアグリゲート値を Platform Configuration Registers (PCR) 8 および 9 に拡張
- CLI パラメーターを使用した事前ロードされた OpenSSL エンジン
- Intel Task State Segment (TSS2) PCR 読み込みのサポートが追加されました。
- 元の Integrity Measurement Architecture (IMA) テンプレートのサポートを追加
llibimaevm.so.0
および libimaevm.so.2
ライブラリーは ima-evm-utils
の一部です。libimaevm.so.0
のユーザーは、新しいアプリケーションで libimaevm.so.2
を使用すると影響を受けません。
(BZ#1868683)
サポートされる CPU アーキテクチャーでの IMA および EVM 機能のレベル化
ARM を除くすべての CPU アーキテクチャーでは、IMA (Integrity Measurement Architecture) および Extended Verification Module (EVM) 技術に類似した機能サポートがあります。有効な機能は、CPU アーキテクチャーごとに異なります。サポートされている各 CPU アーキテクチャーにおける最も重要な変更点を以下に示します。
- IBM Z: IMA アプリおよび信頼できるキーリングの有効化。
- AMD64 および Intel 64: セキュアなブート状態の特定のアーキテクチャーポリシー。
- IBM Power System (little-endian): セキュアで信頼できるブート状態の特定のアーキテクチャーポリシー。
- SHA-256 (サポートされているすべてのアーキテクチャーのデフォルトハッシュアルゴリズム)
-
すべてのアーキテクチャーで、測定テンプレートは IMA-SIG に変更になりました。このテンプレートには、存在する場合に署名ビットが含まれます。この形式は
d-ng|n-ng|sig
です。
この更新の目的は、サポートされるすべての CPU アーキテクチャーでユーザー空間アプリケーションを効率的に動作できるように、IMA と EVM の機能差レベルを低減することです。
(BZ#1869758)
RHEL 8 に disabled-by-default として、プロアクティブコンパクション 機能が追加されました。
実行中のワークロードアクティビティーにより、システムメモリーが断片化されます。断片化により、容量とパフォーマンスの問題が発生する可能性があります。場合によっては、プログラムエラーも可能となります。したがって、カーネルは、メモリー圧縮と呼ばれるリアクティブメカニズムに依存します。メカニズムの元の設計は保存でき、割り当て要求に応じて圧縮アクティビティーが開始されます。ただし、リアクティブ動作は、システムメモリーがすでに断片化されている場合は、割り当てレイテンシーを長くする傾向にあります。プロアクティブコンパクションは、割り当て要求を行う 前に メモリー圧縮作業を 定期的 に開始し、設計を改良します。今回の機能拡張により、オンデマンドでメモリーコンパクションを必要とせずに、メモリーの割り当て要求がメモリーの物理的に連続しているブロックを見つけられる可能性が高くなりました。その結果、特定のメモリー割り当て要求のレイテンシーが短縮されます。
プロアクティブな圧縮処理 により、圧縮のアクティビティーが向上する場合があります。これは、異なるプロセスに属するメモリーページが移動および再マッピングされるため、システム全体の影響を与える可能性があります。したがって、プロアクティブコンパクションな圧縮を有効にするには、アプリケーションでのレイテンシーが急増しないように注意する必要があります。
(BZ#1848427)
RHEL 8 に EDAC サポートが追加されました。
今回の更新で、RHEL 8 は、8 年目および 9 世代 Intel Core プロセッサー (CoffeeLake) で設定された Error Detection and Correction (EDAC) カーネルモジュールに対応します。EDAC カーネルモジュールは主に Error Code Correction (ECC) メモリーを処理し、PCI バスパリティーエラーを検出し、報告します。
(BZ#1847567)
新しいパッケージ: kpatch-dnf
kpatch-dnf
パッケージは、DNF プラグインを提供します。これにより、カーネルのライブパッチ更新に RHEL システムをサブスクライブできます。サブスクリプションは、今後インストールされるカーネルを含め、システムにインストールされているすべてのカーネルに影響します。kpatch-dnf の詳細は、man ページの dnf-kpatch(8)、または カーネルの管理、監視、および更新
を参照してください。
(BZ#1798711)
slab メモリー用の新しい cgroups コントローラー実装
コントロールグループ 技術にスラブメモリーコントローラーの新しい実装が RHEL 8 で利用可能になりました。現在、単一のメモリースラブには、異なるメモリー コントロールグループ が所有するオブジェクトを含めることができます。このスラブのメモリーコントローラーにより、スラブの使用率が改善され (最大 45%)、ページレベルからオブジェクトレベルにメモリーアカウンティングを移動できるようになりました。また、この変更により、各メモリーコントロールグループの重複された CPU ごとのスラブキャッシュがなくなり、すべてのメモリーコントロールグループに対して CPU ごとのスラブキャッシュの 1 つとノードごとのスラブキャッシュが 1 つ確立されます。その結果、カーネルメモリーのフットプリントの合計で大幅に減少し、メモリーの断片化による悪影響を観察できます。
新メモリーアカウンティングおよびより正確なメモリーアカウンティングには、より多くの CPU 時間が必要なことに注意してください。ただし、実際には大きな違いは無視可能であると思われます。
(BZ#1877019)
RHEL 8 にタイム名前空間が追加されました。
名前空間を使用すると、システムの単調増加およびブートタイムクロックが、AMD64、Intel 64、および 64 ビット ARM アーキテクチャーの名前空間ごとのオフセットと連携できるようになります。この機能は、Linux コンテナー内の日時の変更や、チェックポイントから復元後のクロックのコンテナーのチューニングに適しています。その結果、ユーザーは個々のコンテナーに個別に時間を設定できるようになりました。
(BZ#1548297)
新機能: Free memory page returning
今回の更新で、RHEL 8 ホストカーネルは、仮想マシンが使用していないメモリーページをハイパーバイザーに返すことができるようになりました。これにより、ホストの安定性およびリソースの効率が改善されます。応答するメモリーページが機能するには、仮想マシンで設定する必要があります。また、仮想マシンは virtio_balloon
デバイスも使用する必要があることに注意してください。
(BZ#1839055)
perf top
でのソート順序の変更に対応
今回の更新により、perf top
が最初の列でソートされるのではなく、グループの複数のイベントがサンプリングされる場合に備えて、任意のイベント列でサンプルをソートできるようになりました。これにより、数字のキーを使用して、一致するデータ列でテーブルをソートします。
列番号は 0
から始まります。
--group-sort-idx
コマンドラインオプションを使用すると、コラム番号でソートできます。
(BZ#1851933)
kabi_whitelist パッケージの名前が kabi_stablelist に変更されました。
Red Hat は問題のある言語の置き換えにしたがって、RHEL 8.4 リリースで kabi_whitelist
パッケージの名前を kabi_stablelist
に変更します。
(BZ#1867910、BZ#1886901)
BPF がバージョン 5.9 にリベースされました。
RHEL 8 の bpf
カーネルテクノロジーは、カーネル v5.9 のアップストリームのカウンターパートから最新に起動しました。
この更新により、バグ修正および機能強化が複数追加されました。以下は、主な変更点です。
- マップ要素の Berkeley Packet Filter (BPF) イテレーターが追加され、カーネル内の検査を効率的に行うためにすべての BPF プログラムを繰り返し処理できるようになりました。
- 同じコントロールグループ (cgroup) のプログラムは、cgroup ローカルストレージマップを共有できます。
- BPF プログラムは、ソケットルックアップで実行できます。
-
SO_KEEPALIVE
および関連するオプションは、bpf_setsockopt()
ヘルパーで利用できます。
一部の BPF プログラムには、ソースコードへの変更が必要な場合があることに注意してください。
(BZ#1874005)
bcc パッケージがバージョン 0.16.0 にリベースされました。
pcp
パッケージがバージョン 0.16.0 にアップグレードされ、バグ修正および機能強化が複数追加されました。以下は、主な変更点です。
-
ユーティリティー
klockstat
およびfuncinterval
を追加しました。 -
man ページ
tcpconnect
のさまざまな箇所を修正 -
tcptracer
ツールの出力に IPv6 アドレスの SPORT 列および DPORT 列が表示されるように修正 - 破損した依存関係の修正
(BZ#1879411)
bpftrace がバージョン 0.11.0 にリベースされました。
bpftrace
パッケージがバージョン 0.11.0 にアップグレードされ、バグ修正および機能強化が複数追加されました。以下は、主な変更点です。
-
ユーティリティー
threadsnoop
、tcpsynbl
、tcplife
、swapin
、setuids
、naptime
を追加しました。 -
tcpdrop.bt
およびsyncsnoop.bt
ツールの実行の失敗を修正しました。 - IBM Z アーキテクチャーで Berkeley Packet Filter (BPF) プログラムの読み込みに失敗する問題が修正されました。
- シンボルの検索エラーを修正しました。
(BZ#1879413)
libbpf がバージョン 0.2.0.1 にリベースされました。
libbpf
パッケージがバージョン 0.2.0.1 にアップグレードされ、バグ修正および機能強化が複数追加されました。以下は、主な変更点です。
-
BPF Type Format (BTF) 構造アクセスのあるプログラムから
bpf_map
構造の Berkeley Packet Filter (BPF) マップ フィールドにアクセスするためのサポートが追加されました。 - BPF リングバッファーの追加
-
bpf
イテレーターインフラストラクチャーを追加しました。 -
bpf_link
の可観測性を改善しました
perf
が、perf
を停止または再起動せずに実行中のコレクターへのトレースポイントの追加または削除に対応
以前は、perf record
のインスタンスからトレースポイントを追加または削除するには、perf
プロセスを停止する必要がありました。そのため、プロセスが停止したときに発生したパフォーマンスデータが収集されないため、失われていました。今回の更新で、perf record プロセスを停止せずに、perf record
が制御パイプインターフェイスを介して perf
レコードで収集されるトレースポイントを動的に有効または無効にできるようになりました。
(BZ#1844111)
perf
ツールが、トレースデータの絶対タイムスタンプの記録および表示をサポートするようになりました。
今回の更新で、perf script
は、絶対タイムスタンプを使用してトレースデータを記録し、表示できるようになりました。
注記: 絶対タイムスタンプでトレースデータを表示するには、クロック ID を指定してそのデータを記録する必要があります。
絶対タイムスタンプでデータを記録するには、クロック ID を指定します。
# perf record -k CLOCK_MONOTONIC sleep 1
指定したクロック ID で記録されたトレースデータを表示するには、次のコマンドを実行します。
# perf script -F+tod
(BZ#1811839)
dwarves がバージョン 1.19.1 にリベースされました。
dwarves
パッケージがバージョン 1.19.1 にアップグレードされ、バグ修正および機能強化が複数追加されました。今回の更新では、ftrace
関数のサブセットが生成されるように、関連する ftrace
エントリーを使用して DWARF デバッグデータから機能を確認する新しい方法が導入されました。
perf
が、指定されたイベントを使用してスナップショットをトリガーするボックバッファーをサポートするようになりました。
今回の更新により、指定したイベントが検出されると、perf.data
ファイルにデータを書き込むカスタムボローバッファーを作成できるようになりました。これにより、perf record
は、過剰なオーバーヘッドを生成し、perf.data
ファイルに継続的にデータを書き込むことで、システムバックグラウンドで継続的に実行できます。
イベント固有のスナップショットを記録する perf
ツールを使用してカスタムのアップリンクバッファーを作成するには、以下のコマンドを使用します。
# perf record --overwrite -e _events_to_be_collected_ --switch-output-event _snapshot_trigger_event_
(BZ#1844086)
Kernel DRBG および Jitter エントロピーソースは NIST SP 800-90A および NIST SP 800-90B に準拠しています。
Kernel determineistic Random Bit Generator (DRBG) および Jitter エントロピーソースは、DRBG (NIST SP 800-90A) 仕様に使用されるエントロピーソースの推奨事項に準拠するようになりました。また、ランダムなビットの生成 (NIST SP 800-90B) 仕様に使用されるエントロピーソースの推奨事項に準拠するようになりました。これにより、FIPS モードのアプリケーションは、これらのソースを FIPS 準拠のランダム性やリモートソースとして使用できます。
(BZ#1905088)
kdump が仮想ローカルエリアネットワークタグ付けされたチームネットワークインターフェイスに対応
今回の更新で、kdump
用の仮想ローカルエリアネットワークタグ付けされたチームインターフェイスの設定がサポートされるようになりました。これにより、kdump
が、vmcore ファイルをダンプするためにタグ付けされた仮想チームインターフェイスを使用して vmcore
ファイルをダンプできるようになりました。
(BZ#1844941)
kernel-rt ソースツリーが RHEL 8.4 ツリーに更新
kernel-rt
ソースが更新され、最新の Red Hat Enterprise Linux カーネルソースツリーを使用するようになりました。リアルタイムパッチセットも、最新のアップストリームバージョン v5.10-rt7 に更新されました。これらの更新はいずれも、バグ修正および機能強化を多数提供します。
(BZ#1858099, BZ#1858105)
RHEL 8.4 ディストリビューションに stalld パッケージが追加されました。
今回の更新で、stalld
パッケージが RHEL 8.4.0 に追加されました。stalld
は、低レイテンシーアプリケーションを実行しているシステムでスレッドを監視するデーモンです。これは、指定されたしきい値について CPU にスケジュールせずに、run-queue 上にあるジョブスレッドをチェックします。
停止しているスレッドを検出すると、stalld
はスケジューリングポリシーを一時的に SCHED_DEADLINE
に変更し、CPU 時間のスライスをスレッドに割り当てて進めます。時間のスライスの完了またはスレッドブロック時に、スレッドは元のスケジューリングポリシーに戻ります。
(BZ#1875037)
hv_24x7
と hv_gpci
PMUs での CPU ホットプラグのサポート
今回の更新で、PMU カウンターが CPU のホットプラグに正しく対応するようになりました。その結果、hv_gpci
イベントカウンターが無効な CPU で実行されている場合、カウントは別の CPU にリダイレクトされます。
(BZ#1844416)
POWERPC hv_24x7
ネストイベントのメトリックが利用可能に
POWERPC hv_24x7
ネストイベントのメトリックが perf
で利用可能になりました。複数のイベントを集計することで、これらのメトリックは perf
カウンターから取得した値をより明確に理解し、CPU がワークロードをどのように効果的に処理できるかを理解します。
(BZ#1780258)
hwloc がバージョン 2.2.0 にリベースされました。
hwloc
パッケージがバージョン 2.2.0 にアップグレードされ、以下の変更が行われました。
-
hwloc
機能が、合計ディスクサイズやセクターサイズを含む NVMe (Nonvolatile Memory Express) ドライブの詳細を報告
igc
ドライバーが完全にサポートされるようになりました。
igc
Intel 2.5G Ethernet Linux 有線 LAN ドライバーは、テクノロジープレビューとして RHEL 8.1 に導入されました。RHEL 8.4 以降では、すべてのアーキテクチャーで完全にサポートされています。ethtool
ユーティリティーは igc
有線 LAN もサポートします。
(BZ#1495358)