第10章 カーネル

AMD64 および Intel 64 システムにおいて kdump で複数 CPU に対応

AMD64 および Intel 64 のシステムで kdump カーネルクラッシュダンプメカニズムを複数の CPU が有効な状態で起動できるようになりました。カーネルクラッシュダンプの作成時に入出力が大きいため、maxcpus=1 または nr_cpus=1 のカーネルオプションを使用して CPU が 1 つだけ有効なときに 、Linux でデバイスの割り込みの割り当てに失敗する可能性のある場合は、一部のシステムでこの問題が解決されます。この機能は以前はテクノロジープレビューとして利用可能でしたが、完全にサポートされるようになりました。
クラッシュカーネルで複数の CPU を有効にするには、カーネルコマンドラインで nr_cpus=X オプション (ここでX はプロセッサーの数) のオプションを指定します。

kpatch のサポート

kpatch を使用することで、再起動せずにカーネルのパッチ適用を動的に行えるバイナリーカーネルパッチの集合を管理できるようになります。これまでは kpatch はテクノロジープレビューに含まれていましたが、Red Hat Customer Experience and Engagement チームの指示の下で使用されると、完全サポート対象となります。
ライブのカーネルパッチサポートに関する詳細は、https://access.redhat.com/solutions/2206511 を参照してください。

SHMMAX と SHMALL のカーネルパラメーターがデフォルト値に復帰

/usr/lib/sysctl.d/00-system.conf ファイルで設定される kernel.shmmaxkernel.shmall パラメーターの値が低すぎました。結果、SAP など一部のアプリケーションが正しく動作しませんでした。不適切な優先が削除され、十分に高い値となるカーネルのデフォルト値が使用されるようになります。

透過的 huge ページによるメモリー破損の原因を修正

読み取りおよび書き込みの動作中、透過的 huge ページが正しく同期されませんでした。このため透過的 huge ページを有効にするとメモリーが破損する場合がありました。メモリーバリアを透過的 huge ページ処理に追加することでメモリーの破損が起こらなくなります。

SCSI LIO リベース

SCSI カーネルターゲットの LIO が Linux-4.0.stable からリベースされています。多数のバグ修正が行われ、そのほとんどが iSER に重大となるバグでした。また、XCOPY、WRITE SAME、ATS などのコマンドに対するサポート、DIF データの整合性サポートなども含まれています。

makedumpfile で最大 16 TB の物理メモリーを表す sadump の新しい形式に対応

makedumpfile コマンドで 16 TB 以上の物理メモリー領域を表すことができる sadump の新しい形式に対応するようになります。これにより将来的なサーバーモデルの sadump で生成される 16 TB 以上のダンプファイルを読み取る際に makedumpfile を使用できるようになります。

カーネルの削除やアップグレードで警告を表示しない

kABI 互換のモジュールシンボリックリンクの管理に kmod で使用される weak-modules スクリプトがカーネル関連のファイルを削除する際に /lib/modules/<version>/weak-updates ディレクトリーを削除していました。kernel パッケージがこのディレクトリーを所有しているため削除するとファイルシステムと rpm で期待される状態とが一致しなくなっていました。このためカーネルのアップグレードや削除が行われる度に警告を表示していました。
スクリプトが更新され weak-updates ディレクトリーのコンテンツのみ削除しディレクトリー自体は残すようになるため、警告が表示されなくなります。

新パッケージ: libevdev

libevdev は Linux カーネル入力イベントデバイスインターフェースの低レベルのライブラリです。デバイスからのプロセスイベントやデバイスの機能を安全に問い合わせることができるインターフェースになります。現在のバージョン xorg-x11-drv-evdev と xorg-x11-drv-synaptics には依存ライブラリーとしてこのライブラリーが必要になります。

Tuned の no-daemon モードでの実行が可能に

Tuned がデーモンとしてしか実行できなかったため、Tuned デーモンのメモリーのフットプリントのため小規模システムのパフォーマンスに影響を及ぼすことがありました。本更新ではレジデントメモリーを必要としない no-daemon (1 回のみ) モードが追加されています。no-daemon モードには Tuned の多くの機能が欠落しているため、デフォルトでは無効になっています。

新パッケージ: tuned-profiles-realtime

tuned-profiles-realtime パッケージが Red Hat Enterprise Linux Server と Red Hat Enterprise Linux for Real Time に追加されています。CPU の隔離や IRQ のチューニングを行うため tuned ユーティリティーで使用されるリアルタイムのプロファイルが収納されています。プロファイルをアクティベートすると、隔離する CPU を指定しその CPU コアから移動できるスレッドをすべて移動する可変のセクションを読み取ります。

見やすい SCSI エラーメッセージ

printk() 関数に対するカーネルの変更があると SCSI (Small Computer System Interface) のエラーメッセージが複数行に渡ってログ記録されていました。結果、別々のデバイスで複数のエラーが発生するとエラーメッセージを正しく理解するのが困難な場合がありました。本更新により SCSI エラーログ機能のコードが変更され、各エラーメッセージとエラーを生成したデバイスとの関連付けを行う dev_printk() オプションを使ってエラーメッセージがログ記録されるようになります。

libATA サブシステムとドライバーの更新

本更新では libATA サブシステムとドライバーのバグ修正および機能強化が行われています。

FCoE と DCB のアップグレード

FCoE (Fibre Channel over Ethernet) と DCB (Data Center Bridging) カーネルコンポーネントが最新のアップストリームバージョンに更新されています。旧バージョンに対するバグ修正および機能強化が行われています。

perf がバージョン 4.1 へリベース

perf パッケージがアップストリームバージョンの 4.1 にアップグレードされ、旧バージョンに対するパフォーマンスおよび安定性に関する修正および機能拡張が行われています。特に、本リベースでは Intel Cache QoS Monitoring および AMD IBS Ops 機能が追加され、Intel Xeon v4、圧縮カーネルモジュール、パラメーター化イベントに対するサポートの他、ブレイクポイントの長さ指定に対応するようになりました。さらに、--system-widetop -ztop -wtrace --filter-pidstrace --event などのオプションも perf ツールに追加されています。

TPM 2.0 のサポート

本更新ではバージョン 2.0 準拠の TPM (Trusted Platform Module) デバイスに対するドライバーレベルのサポートが追加されています。

turbostat が正常な出力を提供

これまでは、turbostatcpu ではなく cpu0 の /dev/cpu/0/msr ファイルを読み取ってシステムに MSR デバイスサポートがあるかどうかを検出していました。その結果、CPU を無効にすると turbostat の出力から CPU が削除されていました。このバグが修正され turbostat ls コマンドを実行すると正しい出力が返されるようになります。

turbostat が Intel Xeon v5 プロセッサーをサポート

turbostat ツールに Intel Xeon v5 プロセッサーのサポートが追加されました。

zswap ツールが zpool API を使用

これまで zswap ツールは、2:1 の割合で圧縮ページを格納するストレージプール zbud を直接使用していました (フルの場合)。本更新では zbudzsmalloc プールにアクセスする zpool API を採用しています。zsmalloc は圧縮ページを高密度で格納する可能性があり、高密度での圧縮が可能なページにより多くのメモリーが再利用されることになります。本更新で zsmalloc が /mm ドライバーにプロモートされるので、zpool が目的通りに動作します。

/proc/pid/cmdline ファイルの長さが無制限に

これまでは、ps コマンドの /proc/pid/cmdline ファイルの長さの制限がカーネル内で 4096 文字以内にハードコード化されていました。本更新で /proc/pid/cmdlin の長さが無制限になりました。コマンドラインの引数が長いプロセスの記載に特に役立ちます。

dma_rmb と dma_wmb のサポート

本更新ではキャッシュに密着したメモリーの書き込みと読み取りの同期用に dma_wmb() と dma_rmb() の 2 種類の新しい基本命令を採用しています。ドライバー内で該当する用途に利用できるようになります。

qib HCA ドライバー接続

SRP LOGIN ID の不一致のために、SRP ターゲットはこれまで qib HCA デバイスドライバーでの接続に失敗していました。今回の更新でこのバグが修正され、上記の接続が正常に確立されるようになりました。

メモリー上限の拡大

Red Hat Enterprise Linux 7.2 から AMD64 および Intel 64 システムの対応メモリー上限が 6 TB から 12 TB に拡大されました。

dracut 向けの新しい変数

この更新では、カーネルコマンドラインで使用する dracut initramfs ジェネレーター向けの変数が導入されました。
  • rd.net.dhcp.retry=cnt – このオプションが設定された場合、dracut ユーティリティーは失敗するまで DHCP で cnt 回接続しようとします。デフォルト値は 1 です。
  • rd.net.timeout.dhcp=arg – このオプションが設定された場合、dhclient コマンドは -timeout arg オプションを使用して呼び出されます。
  • rd.net.timeout.iflink=seconds – リンクが表示されるまで seconds 秒待機します。デフォルト値は 60 秒です。
  • rd.net.timeout.ifup=seconds – リンクが UP 状態になるまで seconds 秒待機します。デフォルト値は 20 秒です。
  • rd.net.timeout.iflink=seconds – リンクが表示されるまで seconds 秒待機します。デフォルト値は 20 秒です。
  • rd.net.timeout.ipv6dad=seconds – IPv6 DAD が完了するまで seconds 秒待機します。デフォルト値は 50 秒です。
  • rd.net.timeout.ipv6auto=seconds – IPv6 の自動アドレスが割り当てられるまで seconds 秒待機します。デフォルト値は 40 秒です。
  • rd.net.timeout.carrier=seconds – キャリアが認識されるまで seconds 秒待機します。デフォルト値は 5 秒です。