11.8. カーネル
カーネルページサイズに依存する顧客アプリケーションは、ページサイズカーネルを 4k から 64k に移行するときに更新が必要になる場合がある
RHEL は、4k と 64k の両方のページサイズのカーネルと互換性があります。4K カーネルページサイズに依存する顧客アプリケーションは、4K から 64K ページサイズカーネルに移行するときに更新が必要になる場合があります。この既知の例には、jemalloc および依存アプリケーションが含まれます。
jemalloc メモリーアロケータライブラリーは、システムのランタイム環境で使用されるページサイズの影響を受けます。このライブラリーは、たとえば、--with-lg-page=16 または env JEMALLOC_SYS_WITH_LG_PAGE=16 (jemallocator Rust クレートの場合) で設定されている場合、4k および 64k ページサイズのカーネルと互換性があるように構築できます。その結果、ランタイム環境のページサイズと、jemalloc に依存するバイナリーのコンパイル時に存在したページサイズとの間に不一致が発生する可能性があります。その結果、jemalloc ベースのアプリケーションを使用すると、次のエラーが発生します。
<jemalloc>: Unsupported system page size
<jemalloc>: Unsupported system page size
この問題を回避するには、次のいずれかの方法を使用します。
- 適切なビルド設定または環境オプションを使用して、4k および 64k ページサイズと互換性のあるバイナリーを作成します。
-
最終的な 64k カーネルおよびランタイム環境で起動した後、
jemallocを使用するユーザー空間パッケージをビルドします。
たとえば、同じく jemalloc を使用する fd-find ツールを、cargo Rust パッケージマネージャーを使用して構築できます。最後の 64k 環境では、cargo コマンドを入力して、すべての依存関係の新しいビルドをトリガーし、ページサイズの不一致を解決します。
cargo install fd-find --force
# cargo install fd-find --force
Bugzilla:2167783[1]
dnf を使用して最新のリアルタイムカーネルにアップグレードしても、複数のカーネルバージョンは並行してインストールされない
dnf パッケージマネージャーを使用して最新のリアルタイムカーネルをインストールするには、パッケージの依存関係を解決して、新しいカーネルバージョンと現在のカーネルバージョンを同時に保持する必要があります。デフォルトでは、dnf は、アップグレード中に古い kernel-rt パッケージを削除します。
回避策として、現在の kernel-rt パッケージを /etc/yum.conf 設定ファイルの installonlypkgs オプションに追加します (例: installonlypkgs=kernel-rt)。
installonlypkgs オプションは、dnf で使用されるデフォルトのリストに kernel-rt を追加します。installonlypkgs ディレクティブにリストされているパッケージは自動的には削除されないため、複数のカーネルバージョンの同時インストールがサポートされます。
複数のカーネルをインストールすると、新しいカーネルバージョンを使用するときにフォールバックオプションを使用できるようになります。
Bugzilla:2181571[1]
デフォルトでは、Delay Accounting 機能は SWAPIN および IO% 統計列を表示しない
初期のバージョンとは異なり、Delayed Accounting 機能はデフォルトで無効になっています。その結果、iotop アプリケーションは SWAPIN および IO% 統計列を表示せず、次の警告を表示します。
CONFIG_TASK_DELAY_ACCT not enabled in kernel, cannot determine SWAPIN and IO%
CONFIG_TASK_DELAY_ACCT not enabled in kernel, cannot determine SWAPIN and IO%
taskstats インターフェイスを使用する Delay Accounting 機能は、スレッドグループに属するすべてのタスクまたはスレッドの遅延統計を提供します。タスク実行の遅延は、カーネルリソースが利用可能になるのを待つときに発生します。たとえば、空き CPU が実行されるのを待っているタスクです。統計は、タスクの CPU 優先度、I/O 優先度、および rss 制限値を適切に設定するのに役立ちます。
回避策として、実行時または起動時に、delayacct ブートオプションを有効にすることができます。
実行時に
delayacctを有効にするには、次のように入力します。echo 1 > /proc/sys/kernel/task_delayacct
echo 1 > /proc/sys/kernel/task_delayacctCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドはシステム全体で機能を有効にしますが、このコマンドの実行後に開始したタスクに対してのみ有効であることに注意してください。
起動時に
delayacctを永続的に有効にするには、次のいずれかの手順を使用します。/etc/sysctl.confファイルを編集して、デフォルトのパラメーターをオーバーライドします。次のエントリーを
/etc/sysctl.confファイルに追加します。kernel.task_delayacct = 1
kernel.task_delayacct = 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 詳細は、Red Hat Enterprise Linux で sysctl 変数を設定する方法 を参照してください。
- システムを再起動して、変更を反映させます。
カーネルコマンドラインに
delayacctオプションを追加します。詳細は、カーネルコマンドラインパラメーターの設定 を参照してください。
その結果、iotop アプリケーションは SWAPIN および IO% 統計列を表示します。
Bugzilla:2132480[1]
コア数が多いシステム上のリアルタイムカーネルのハードウェア認定で、skew_tick=1 ブートパラメーターを渡すことが必要になる場合がある
多数のソケットとコアカウントが大きい大規模なシステムまたは中規模のシステムでは、タイムキーピングシステムで使用される xtime_lock のロック競合により、レイテンシーの急増が発生する可能性があります。その結果、マルチプロセッシングシステムでは、レイテンシーの急増やハードウェア認定の遅延が発生する可能性があります。回避策として、skew_tick=1 ブートパラメーターを追加することで、CPU ごとにタイマーティックをオフセットし、別のタイミングで開始できます。
ロックの競合を回避するには、skew_tick=1 を有効にします。
grubbyでskew_tick=1パラメーターを有効にします。grubby --update-kernel=ALL --args="skew_tick=1"
# grubby --update-kernel=ALL --args="skew_tick=1"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 変更を有効にするために再起動します。
ブート中に渡すカーネルパラメーターを表示して、新しい設定を確認します。
cat /proc/cmdline
cat /proc/cmdlineCopy to Clipboard Copied! Toggle word wrap Toggle overflow
skew_tick=1 を有効にすると、消費電力が大幅に増加するため、レイテンシーの影響を受けるリアルタイムワークロードを実行している場合にのみ有効にする必要があります。
Jira:RHEL-9318[1]
kdump メカニズムは、LUKS 暗号化ターゲットで vmcore ファイルをキャプチャーできない
Linux Unified Key Setup (LUKS) で暗号化されたパーティションを使用するシステムで kdump を実行する場合、システムには一定量の使用可能なメモリーが必要です。使用可能なメモリーが必要なメモリー量より少ない場合、systemd-cryptsetup サービスはパーティションのマウントに失敗します。その結果、2 番目のカーネルは LUKS 暗号化ターゲット上のクラッシュダンプファイルのキャプチャーに失敗します。
回避策として、Recommended crashkernel value をクエリーし、メモリーサイズを適切な値まで徐々に増やします。Recommended crashkernel value は、必要なメモリーサイズを設定するための参考として役立ちます。
クラッシュカーネルの推定値を出力します。
kdumpctl estimate
# kdumpctl estimateCopy to Clipboard Copied! Toggle word wrap Toggle overflow crashkernelの値を増やして、必要なメモリー量を設定します。grubby --args=crashkernel=652M --update-kernel=ALL
# grubby --args=crashkernel=652M --update-kernel=ALLCopy to Clipboard Copied! Toggle word wrap Toggle overflow システムを再起動して、変更を反映させます。
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
これにより、LUKS で暗号化したパーティションがあるシステムで kdump が正常に機能します。
Jira:RHEL-11196[1]
kdump サービスが IBM Z システムで initrd ファイルの構築に失敗する
64 ビットの IBM Z システムでは、s390- subchannels などの znet 関連の設定情報が非アクティブな NetworkManager 接続プロファイルに存在する場合、kdump サービスは初期 RAM ディスク (initrd) のロードに失敗します。その結果、kdump メカニズムは次のエラーで失敗します。
dracut: Failed to set up znet kdump: mkdumprd: failed to make kdump initrd
dracut: Failed to set up znet
kdump: mkdumprd: failed to make kdump initrd
回避策として、次のいずれかの解決策を使用してください。
znet設定情報を持つ接続プロファイルを再利用して、ネットワークボンディングまたはブリッジを設定します。nmcli connection modify enc600 master bond0 slave-type bond
$ nmcli connection modify enc600 master bond0 slave-type bondCopy to Clipboard Copied! Toggle word wrap Toggle overflow 非アクティブな接続プロファイルからアクティブな接続プロファイルに
znet設定情報をコピーします。nmcliコマンドを実行して、NetworkManager接続プロファイルを照会します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 非アクティブな接続からの設定情報でアクティブなプロファイルを更新します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 変更を有効にするために
kdumpサービスを再起動します。kdumpctl restart
# kdumpctl restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow
iwl7260-firmware により、Intel Wi-Fi 6 AX200、AX210、および Lenovo ThinkPad P1 Gen 4 で Wi-Fi が切断される
iwl7260-firmware または iwl7260-wifi ドライバーを RHEL 9.1 以降で提供されるバージョンに更新すると、ハードウェアが不正な内部状態になります。その状態を誤って報告します。その結果、Intel Wifi 6 カードが機能せず、次のエラーメッセージが表示される場合があります。
kernel: iwlwifi 0000:09:00.0: Failed to start RT ucode: -110 kernel: iwlwifi 0000:09:00.0: WRT: Collecting data: ini trigger 13 fired (delay=0ms) kernel: iwlwifi 0000:09:00.0: Failed to run INIT ucode: -110
kernel: iwlwifi 0000:09:00.0: Failed to start RT ucode: -110
kernel: iwlwifi 0000:09:00.0: WRT: Collecting data: ini trigger 13 fired (delay=0ms)
kernel: iwlwifi 0000:09:00.0: Failed to run INIT ucode: -110
未確認の回避策は、システムの電源をオフにしてから再度オンにすることです。再起動しないでください。
Bugzilla:2129288[1]
kmod の weak-modules がモジュールの相互依存関係で機能しない
kmod パッケージによって提供される weak-modules スクリプトは、どのモジュールがインストールされたカーネルと kABI 互換であるかを判別します。しかし、weak-modules は、モジュールのカーネル互換性をチェックする際に、モジュールシンボルの依存関係を、そのビルド対象のカーネルの新しいリリースから古いリリースの順に処理します。結果として、異なるカーネルリリースに対して構築された相互依存関係を持つモジュールは互換性がないと解釈される可能性があるため、weak-modules はこのシナリオでは機能しません。
この問題を回避するには、新しいカーネルをインストールする前に、最新のストックカーネルに対して追加のモジュールをビルドまたは配置します。
Bugzilla:2103605[1]
Intel® i40e アダプターが IBM Power10 で永続的に失敗する
IBM Power10 システムで i40e アダプターに I/O エラーが発生すると、Enhanced I/O Error Handling (EEH) カーネルサービスがネットワークドライバーのリセットとリカバリーをトリガーします。 しかし、EEH は、i40e ドライバーが事前定義された最大値に達して EEH が応答を停止するまで、I/O エラーを繰り返し報告します。その結果、デバイスは EEH によって永続的に失敗します。
Jira:RHEL-15404[1]
64 ビット ARM CPU で正しくコンパイルされたドライバーでのプログラム失敗に関して dkms が誤った警告を出す
Dynamic Kernel Module Support (dkms) ユーティリティーは、4 kB および 64 kB のページサイズのカーネルで 64 ビット ARM CPU のカーネルヘッダーが動作することを認識しません。その結果、dkms は、カーネルの更新時に kernel-64k-devel パッケージがインストールされていない場合、正しくコンパイルされたドライバーでプログラムが失敗した理由に関して誤った警告を出します。この問題を回避するには、kernel-headers パッケージをインストールします。このパッケージは、両タイプの ARM CPU アーキテクチャー用のヘッダーファイルを含むもので、dkms とその要件に特化したものではありません。
Jira:RHEL-25967[1]