主な特徴と変更
次の項では、UEK R5U1に関連するUnbreakable Enterprise Kernelリリース5更新2 (UEK R5U2)の主な新機能について説明します。
64-bit Arm (aarch64)アーキテクチャ
Unbreakable Enterprise Kernelリリース5更新2では、Oracleは引き続きカーネルの変更を配信し、64-bit Arm (aarch64)アーキテクチャのサポートを可能にします。 これらの変更は、既存のArmハードウェアに対して作成およびテストされ、arm用のOracle Linuxのサポートを提供します。 このドキュメントで説明される機能は、ハードウェアが機能をサポートできるのであれば、Armで使用できます。 Armの現在の開発作業の範囲を超えた制限事項とアイテムについては、「Armの使用不可または利用不可の機能」で詳しく説明しています。
Armアーキテクチャに特定の変更が加えられた場合、通常はこのドキュメントで説明します。
カーネルの基本機能
UEK R5U2には、次のような重要なコア・カーネル機能が実装されます:
-
圧力ストール情報パッチセットが実装されました
圧力ストール情報(PSI)は、システム管理者がサーバー・リソースをより適切に最大化できるように設計されており、リソース使用率の問題を特定してトラブルシューティングするために使用できます。 PSIは、詳細なメトリックを提供し、
/proc/pressure
経由でレポートを行います。 たとえば:# cat /proc/pressure/cpu some avg10=94.45 avg60=66.32 avg300=21.06 total=73036145 # cat /proc/pressure/memory some avg10=0.00 avg60=0.00 avg300=0.00 total=0 full avg10=0.00 avg60=0.00 avg300=0.00 total=0 # cat /proc/pressure/io some avg10=0.00 avg60=1.09 avg300=13.39 total=621424943 full avg10=0.00 avg60=0.97 avg300=12.73 total=490558883
PSIはcgroupv2統計も記録できます。
この機能の詳細は、https://lwn.net/Articles/759781/およびhttps://lwn.net/Articles/763629/で説明されています。
-
cgroup v2 cpusetコントローラを有効にします
このリリースでは、
cpus
,mems
,sched.partition
,cpus.effective
やmems.effective
など、最小限の機能セットを使用して、デフォルトのcgroup
v2階層のcpuset
コントローラを有効にします。 新しい制御ファイルsched.partition
は、スケジュールのパースペクティブから独自の固有CPUセットを持つ新しいスケジューリング・ドメインまたはパーティションのルートであるcgroup
があるかどうかを指定する、試行状態フラグ・ファイルです。 パーティション・ルートは、フラグに値1を記述して有効にすることも、値0を書き込むことで無効にすることもできます。 パーティション・ルートがエラー状態にある場合は、-1の値が指定されますが、エラー状態が修正されると自動的に変更できます。 -
CPU集中型の作業をパレルライジングするためのktaskフレームワークの実装
このカーネル・リリースは、カーネル内のCPU負荷の高い作業を並列化するために使用されるktaskフレームワークを実装します。 この拡張機能により、アイドルCPUをハーネスにしてジョブをより迅速に完了させることに役立つパフォーマンス機能が提供されます。 このフレームワークには、一定範囲のページをゼロにする、iノードのリストを削除するなど、タスクの同時実行性を容易にするAPIが用意されています。
-
HPEシステムでUV BIOSタイムスタンプ・カウンタ(TSC)のサポートを有効にします
このカーネル更新には、HPEシステム用のUV BIOSタイムスタンプ・カウンタ(TSC)の拡張を有効にして利用するためのアップストリーム・パッチが含まれています。 パッチは、UV BIOS内の機能を利用して、一般的なカーネル関数よりもTSCの精度が高くなります。 これは、データベースにアクセスするためにTSC値を直接読み取るアプリケーションで重要です。
-
Armプラットフォーム用のカーネル・チューニング
カーネルはArmプラットフォーム用にチューニングされ、サポートされていないハードウェアのパラメータは、安定性とパフォーマンスを向上させるために無効になります。
-
AMD Rome機能使用可能
7002シリーズの第2世代のEPYCプロセッサ・ファミリであるAMD Romeプロセッサを使用できるように、カーネルにパッチが追加されました。 現時点ではすべてのAMD Rome機能を使用できるわけではありませんが、機能は必要に応じてerrataリリースに追加されます。
現在、次の機能がテストおよびサポートされています:
-
AMD Romeエラー検出/修正: 最新のAMD EDACドライバ・モジュールを使用すると、ECCメモリー・イベントおよびその他のエラーを収集してレポートできます。
-
x2APIC: APICでの8ビットから32ビットまでのプロセッサのxAPICアドレス機能を拡張し、オペレーティング・システムで2つのソケット・ローマ・システムの128 Cores (256スレッド)まで認識できるようにします。
-
CLWB (キャッシュ・ライン書込みバック): AMDの新規インストラクションは、すでにIntelでサポートされています。
-
WBNOINVD (ライトバック無効化なし): プロセッサの内部キャッシュにある変更済のすべてのキャッシュ行をメモリーに書き戻し、内部キャッシュの線を有効なままにしてキャッシュを印刷します。
-
AMDセキュアなメモリー暗号化(SME)およびセキュア化仮想化(SEV): ハイパーバイザ上で実行しているゲストのページの暗号化を、ゲストへのセキュア・キーの割当てを使用可能にします。 一部の新しいSEV機能は、まだ完全には機能していない可能性があります。
CPUIDはテストされ、使用可能な機能の次のリストが返されます:
-
CLWB (キャッシュ・ライン書込みバック)
-
PQE (キャッシュ割当てテクノロジ)
-
PQM (プラットフォームQoSモニタリング)
-
WBNOINVD (ライトバック無効化なし)
-
MBE (メモリー帯域幅の強制)
-
EncryptedMcodePatch (暗号化されたMcodeパッチ)
-
RDPRU (ユーザー・レベルでの読取りプロセッサ登録)
-
GMET (ゲスト・モード実行トラップ)
-
LBREXTN (最後のブランチ拡張子)
-
PerfCtrExtLLC (最終レベル・キャッシュ・パフォーマンス・カウンタ拡張)
-
AdMskExtn (命令ブレークポイントのアドレス・マスク拡張)
-
DTrace
次の重要なDTrace機能と修正は、UEK R5U2に実装されます:
-
libpcapパケット取得のサポート
このリリースには、DTraceでのlibpcapベースのパケット取得をサポートするためのカーネルおよびユーザー空間コードの更新が含まれています。
DTRACEACT_PCAP
アクションを追加することで、取得時間、完全なパケット長、およびバッファの許容量のパケットを記録できます。 取得は、線形および非線形ソケット・バッファに作用します(skb
)。 線形skb
の場合は、skb
がコピーされますが、skb
ページ・フラグメントを移動することにより、非線形skb
が収集されます。この機能には、
pcap(skb,proto)
処理を介してuserspaceでアクセスします。 アクションは2つの操作モードをサポートしています。 ファイルがfreopen()
でインストールされると、指定したファイルに対してpcap_dump
が実行されます。 たとえば:ip:::send { freopen("/tmp/cap.%s", probename); pcap((void *)arg0, PCAP_IP); freopen("");
ファイルが
freopen()
edでない場合、取得データは名前付きパイプを介してtsharkの起動に渡されて表示されます。tsharkが使用できない場合は、tracememのような形式で表示されます。 使用例:dtrace -n 'ip:::send { pcap((void *)arg0, PCAP_IP); }'
ファイル・システム
次の項では、UEK R5U2のファイル・システムに実装されている最も重要な機能について詳しく説明します:
Btrfs
次のBtrfsバグの修正および機能がこの更新で実装されました:
-
以前の修正がバックアップ・ストリームの修正によって解決されたあとで、マウント・エラーによってfsyncと電源障害が発生するような回帰問題の修正。
-
パッチは、チャンクが対応するブロック・グループにマップされるよう、追加チェックを実行するためにコードに適用されました。 これにより、欠落しているブロック・グループ・アイテムを含む作成済のイメージが予期せぬ動作の原因となった場合に問題が解決します。 問題はCVE-2018-14612としてファイルされ、このリリースで解決されました。
-
パッチがaarch64バージョンのカーネルのコードに適用され、ファイル・システムのトリミングが未割当て領域に制限され、一部のBtrfsファイル・システム上の既存ブロック・グループの領域をトリップしなかったという問題を解決します。
ext4
次のext4バグの修正および機能がこの更新で実装されました:
-
直接書込みが
i_disksize
の値を超え、i_size
よりも少ない場合にi_disksize
を更新するためのパッチが適用されました。 これは、ディスクのシミュレート後にファイルシステムの破損を引き起こす問題を解決しました。 この問題は、fsckを使用してiノード・エラーを修正しようとしたときに問題が発生しました。 -
パッチは、割り当てられていないAIOを含むブロックをゼロにする場合(非同期I/O))のデータ破損の原因となる可能性がある問題を修正するために適用されました。 問題は、AIOが
i_size
を超えて終了し、i_size
がブロック署名されていない場合に発生しました。 これにより、filesystemio_options=SETALL
オプション・セットで動作しているOracle Databaseで破損したバックアップ・データが生成された場合に、問題が解決しました。
OCFS2
次のOCFS2のバグ修正および機能がこの更新で実装されました:
-
すでにジャーナルにリンクされているブロックを読み取るときに、カーネル・パニックの原因となった問題を解決するパッチが適用されました。 通常、これは基礎となるストレージの問題から生じて、バッファーヘッド検証フラグを設定したままにします。
-
直接IOが失敗してiノードがクリアされなかったときに、カーネル・パニックを引き起こす問題を解決するためにパッチが適用されました。 パッチは、IO障害が発生した場合でも書込みコンテキストを解放します。
-
ファイル・システムがマウントされたにもかかわらず、正常にアンマウントされないために一貫性のないメタデータになる問題を解決するために、パッチが適用されています。 ファイル・システムがクリーンでない場合、マウントは失敗し、fsckを実行して必要な修正を実行し、ローカル割当てを回復するようにユーザーに通知するエラーが返されます。
-
同じブロックに対する2つの同期IOリクエストが発行され、読取り操作用のブロック・ヘッド
uptodate
フラグがクリアされた場合に、クラッシュとなった競合状態を解決するためにパッチが適用されました。
XFS
次のXFS機能が実装されています:
-
パッチが適用され、拒否ノードの検証が改善されてCVE-2018-10322が解決されました。 問題は、クラッシュしたXFSイメージを使用してサービス拒否攻撃を受ける可能性があります。 コードは、さらに複数の検証チェックを実行するために更新されました。
-
リアルタイム・デバイスの統計がボリュームに設定されている場合、
statfs
コールにリアルタイム・デバイスの統計が表示されるようパッチが適用されました。 これにより、dfのようなアプリケーションで、リアルタイム・ボリュームに使用可能な不適切なディスクが表示されるという問題が解決します。 -
XFS内の拡張属性の処理に使用される
listxattr
コールのコードに、メモリー破損のバグを修正するためにパッチが適用されました。 この問題は、xfs_xattr_put_listent
の複数の呼出しがある操作中に、バッファ領域が不足すると発生します。 それ以降の呼出しではバッファ前のバイトが書き込めるため、KASAN (Kernel Address Sanitizer)レポートがトリガーされます。
RDMA
リモート・ダイレクト・メモリー・アクセス(RDMA)は、ネットワークによって接続された2つのシステム間でダイレクト・メモリー・アクセスを可能にする機能です。 RDMAにより、クラスタ内の高スループットおよび低レイテンシ・ネットワーキングが容易になります。
Unbreakable Enterprise Kernelリリース5の更新2には、KspliceおよびDTraceの機能とOracle独自のRDMA機能(RDSとShared-PDのサポートが含まれる)が追加され、アップストリーム・カーネルで提供されるRDMA機能が含まれています。
UEK R5U2でのRDMA実装の重要な変更には、次のような変更があります:
-
RDMAは一連のモジュールとしてカーネルにマージされます
RDMAがカーネル・ロード可能モジュールとして使用可能になり、独立したサービスとして実行されなくなります。 コマンドsystemctl start rdmaは非推奨であり、サポートされなくなりました。
-
resilient_rdmaip
モジュールの修正と改善resilient_rdmaip
モジュールに適用される修正が含まれています。 特に、resilient_rdmaip
モジュールがアンロードされた場合にInfiniBandインタフェースへのアクセスで問題が発生した問題は解決され、デフォルトではモジュールをアンロードできません。
ストレージ
次の重要なストレージ機能は、Unbreakable Enterprise Kernelリリース5更新2で実装されています:
-
NVMeの更新
NVMeの多数のコード更新が、Broadcom/EmulexおよびQLogicデバイスの最新の更新されたドライバの機能を有効にするために、バージョン4.18から4.21へのアップストリームLinuxカーネル・リリースからバック・ポートされました。 これらの更新には、NVMeコア・レイヤー・コード内のトランスポート・クラスでFC-NVMeを有効にするための変更が含まれます。 SCSI/FCトランスポート・クラス内でNVMeを有効にするために、SCSIレイヤーにも更新が含まれています。 NVMectlおよびNVMe cliユーザー・スペース・ライブラリも更新されます。 NVM機能のサポートは、ハードウェア・ベンダーが提供するサポートに限定されています。
仮想化
次の重要な仮想化機能は、Unbreakable Enterprise Kernelリリース5更新2で実装されています:
-
LinuxからのKVM、XenおよびHyper-Vのバック・ポート更新4.19
KVM、XenおよびHyper-V用のLinux 4.19カーネルへのアップストリーム・コミットはすべて、この現在のカーネル更新リリースにバック・ポートされています。 KVMの主な更新には、PCIDエミュレーション、仮想マシン拡張機能(VMX)を使用するネストされたゲストに対するKVMのサポートの拡張、およびArmのサポートに対する追加作業が含まれます。 この更新では、KVMに対してバグの修正とコードの最適化が数多く行われています。 また、Microsoft Hyper-V更新は、セキュリティの修正、コードの実施、最適化とともに重要です。 この更新により、準仮想化されたゲスト内部プロセッサ割込み(IPI)は、パフォーマンス向上のためにハイ・パー・コールを使用できます。
-
KVMのセキュリティ修正
セキュリティ修正は、CVE-2018-19407のKVMコードに適用され、irqchipが初期化されていない場合にスキャンioapicロジックをトリガーするシステム・コールによって実現可能なサービス拒否アタッチの可能性を解決しました。 同様に、apicマップが間接参照された場合にpv_send_ipiインタフェースをトリガーすることで攻撃を受けるCVE-2018-19406に修正が適用されました。 Apicマップにnull値が含まれている場合、すぐにコールをバックアウトするためのチェックが含まれていました。 加えて、CVE-2019-7221にも修正が適用されました。従来では、エミュレートされたVMX事前移入タイマーをfree_nestedにアクセスでき、CVE-2019-7222(この場合、他のいくつかの指示のエミュレーションでは初期化されていないスタック・メモリーのリーク・コンテンツへのページ・フォルトが誤って挿入される可能性がある)という問題を、無条件に取り消すためです。
-
Xen blkfrontホット・プラグに関する問題の修正
問題はXen blkfrontコード内で解決され、blkfrontホット・プラグ対応デバイスが取り外されてメモリー割り当て障害が発生したときに、ゲストでカーネル・パニックが発生します。
-
Xen x86ゲスト・クロック・シェーダの修正
x86ゲスト・クロック・スケジューラが移行時にゲスト仮想マシンでクロック・ドリフトの原因となった問題は解決され、仮想マシンが再開されるときに単調なクロック値が保証されます。