主な特徴と変更
次の項では、UEK R5を基準に、Unbreakable Enterprise Kernelリリース6 (UEK R6)の主な新機能について説明します。 このリリースの主な機能のサマリー・リストは次のとおりです:
-
Linux 5.4安定したカーネル・ベース
UEK R6のベース・カーネルとして使用される5.4メイン・ライン・カーネル・リリースには、以前のリリースやRHCKよりも多くのアップストリーム・カーネル機能と改善が含まれています。 以前のメジャー・リリースUEKとは対照的に、このカーネルで使用可能な主な機能および拡張機能のリストについては、「カーネル基本機能」を参照してください。
-
Armサポート
このリリースの多くの機能および改善は、Arm (aarch64)プラットフォームのサポートの向上を目的としています。 注目すべき変更は、セキュリティの改善とArmでの仮想化サポートの改善などです。 詳細は、「Arm (aarch64)プラットフォーム」を参照してください。
-
Cgroup v2の機能拡張
CPUコントローラ機能を有効にするには、まずUEK R5でCgroup v2機能が導入されました。 UEK R6には、すべてのCgroup v2機能と、「カーネル基本機能」で説明されているいくつかの機能改善が含まれています。
-
ktaskの拡張機能
ktaskは、カーネルのCPU集中型作業を並列化するためのフレームワークです。 タスクがユーザー領域でシングル・スレッドである、大量の使用可能なCPU電力を備えたシステムで、大規模なタスクを高速化できます。ktaskには汎用APIが用意されており、これを使用すると、様々な種類のタスクに同時実行性を追加できます。同時に、複数スレッドの管理の複雑さを減らすことができます。また、構造体ページの初期化およびVFIO対応のKVMゲスト初期化の実行時に、起動時間を大幅に削減できます。
/usr/share/doc/kernel-uek-doc-5.4/core-api/ktask.html
には、ktaskのドキュメントが用意されていますが、インタフェースはまだ安定していません。 -
パラレル化されたkswapd
ページ置換は、kswapdによってカーネルで非同期的に処理され、直接リクレイムによって同期的に処理されます。 ゾーンの空きリスト内の空きページが少ない場合、kswapdはページをスキャンして、新しいページ割当てのための領域を解放するために追い出される未使用のページがあるかどうかを判断します。 この最適化によって、リソース消費量が多く、時間がかかる可能性があるダイレクト再利用を回避することでパフォーマンスが向上します。
-
Kexecファームウェア署名
カーネル・イメージ・シグネチャをチェックおよび検証するオプションは、UEK R6で有効です。 kexecを使用してUEK R6内からカーネルをロードする場合、システムがシグネチャおよび検証済のカーネル・イメージのみをロードするように、カーネル・イメージ・シグネチャ・チェックおよび検証を実装できます。
-
メモリー管理の改善
いくつかのパフォーマンス強化がカーネル・メモリー管理コードに実装されており、ページやキャッシュをクリアする効率の向上と、障害管理やレポート作成の機能強化が実現されています。 詳細は、「メモリー管理」を参照してください。
-
NVDIMMの更新
NVDIMM機能の更新が実装されているため、永続メモリーを従来のRAMとして使用でき、ゼロ・キー消去機能を標準化するのに役立つ更新も含まれています。 詳細は、「カーネル基本機能」を参照してください。
-
DTrace v2.0
DTraceサポートはUEK R6で有効になっており、Linuxカーネルに統合されているBerkeleyパケット・フィルタ(BPF)を使用するように再実装されています。 現在のバージョンは、新しい実装に基づく最初のDtraceリリースで、まだUEK R5のDTraceで機能パリティを達成するのではなく、将来処理されます。 アップストリームのツール・チェーンが改善されたため、DTraceで使用可能なRPMのセットを簡素化するために追加されました。 詳細は、DTrace v 2.0を参照してください。
-
OCFS2
OCFS2ファイル・システムのサポートは、UEK R6で有効です。 詳細については、OCFS2を参照してください。
-
Btrfsファイル・システムのサポート
UEK R6がシステムにインストールされている場合、Oracle Linux 8システムではBtrfsファイル・システムのサポートが有効になります。 このリリースでは、Btrfにさらに拡張機能が加えられました。 詳細については、Btrfsを参照してください。
カーネルの基本機能
UEK R5のベース・カーネル・バージョンとして使用された4.14リリースから、UEK R6のベース・カーネル・バージョンとして使用される5.4カーネル・リリースまでに、アップストリーム・カーネルに複数の主要なカーネル機能が実装されています。 更新リリースでは一部の機能がUEK R5カーネルにバックポートされていますが、次の重要な新機能がUEK R6で使用可能です:
-
ロックダウン・モード(x86_64のみ)
ロックダウン・モードは大幅に改善され、注目に値する実装の変更がいくつかあります。 このリリースでは、「整合性」モードと「機密性」モードが区別されます。 この機能の詳細は、「セキュリティ」を参照してください。
-
fs-verity
fs-verityは、読み取り専用ファイルの完全性と信頼性保護のためにファイルシステムがフック・インできるカーネル機能です。 この機能を使用すると、システムで変更すべきでない、通常とは異なるファイルの破損や悪意のあるファイルの変更を検出できます。 この機能は現在、ext4およびf2fsファイル・システムでのみ動作します。
-
io_uringを使用した高パフォーマンスの非同期I/O
この機能は、バッファリングされたI/OsとバッファリングされていないI/Osの両方に対して、高速でスケーラブルな非同期I/Oインタフェースを提供します。 非同期ポーリングI/Oもサポートしています。 ユーザー領域ライブラリ
liburing
では、ヘルパーを持つアプリケーションの基本的な機能を提供しており、アプリケーションはio_uring
インスタンスを簡単に設定し、I/Oを発行および完了できます。 -
Cgroupの更新
フルCgroup v2機能は、UEK R6に含まれています。 UEK R5の機能には、CPUコントローラなど、特定のタスク・グループのためにCPUリソースを設定できる機能が含まれています。 UEK R6にはこれらの機能が含まれており、次の注目すべき機能強化が加えられています:
-
ワークロードの整合性を維持するために、cgroupを単一のユニットとして強制終了させるのに使用できる、cgroup対応のOOM強制終了サービス。 この機能を有効にするには、cgroup v2メモリー・コントローラで
memory.oom.group
を設定します。 この設定により、cgroupは表示対象でないワークロードであると判断され、タスクはそれらの子孫とともに、OOM killerによって同時に(またはallではない)強制終了されます。 -
固定コントローラがcgroupsv2に追加され、cgroupでワークロードを停止して一部のリソースを一時的に解放できるようになります。
-
このリリースでは、I/Oのコストベース・モデルの作業が適切なコントローラとして機能する、ぼかしが導入されています。 現在は、単純な線形コスト・モデルが組み込まれており、各I/Oは連続コストまたはランダム・コストに分類され、それに応じてベース・コストが付与されます。 その後、追加のサイズ調整原価が上部に追加されます。
-
-
NVDIMM
パーシステント・メモリーを従来のRAMとして使用できるようになりました。 さらに、libnvdimm内のセキュリティ関連コマンドの周囲に修正を実装して、ペイロード・データがゼロ値で埋められたキーの使用を有効にして、ゼロ・キーが使用されている場合でもセキュアな操作を続行できるようにしました。 共通の実装は、すべてのコマンドが同じゼロ・キー・セマンティックを使用することを保証するため、またNVDIMMのデータの安全な消去を実行できるようにするために実施されました。この場合、ゼロ・キーを使用します。 一部のNVDIMMプラットフォームでは、オペレーティング・システムに初期キーを指定させるのではなく、デフォルトのゼロ・キーによるセキュリティを有効にし、セキュリティを有効にした場合の操作を妨げる可能性があるため、この変更は重要です。
Arm (aarch64)プラットフォーム
次の注目すべきARM機能がUEK R6に実装されています:
-
セキュリティの向上
攻撃に対する緩和を改善するために、次のような様々な機能強化が行われました: syscallラッパー、ポインタ認証、KASLR (カーネル仮想アドレスのランダム化)サポート、およびPSTATE.SSBSビット・サポート(ARM v8.5コア)。
-
メモリー・ホット・プラグ
ホット・プラグ・メモリーのコア・サポート。
-
KVMの改善
Arm (aarch64)システムでのKVMゲストの改善には、ポインタ認証(ARM v8.3)およびScalable Vector Extension (SVE)のサポートが含まれます。
暗号化
次の注目すべき暗号機能は、UEK R6に実装されています:
-
キーの説明管理の簡素化
キーとキーリングは、ネームスペース対応です。
-
Zstandard圧縮
Zstandard圧縮(zstd)が暗号および圧縮に追加されます。 デフォルトのレベルのみが有効になっています。
DTrace v2.0
DTrace v2.0はDTraceの再実装で、eBPFのような既存のLinuxカーネル・トレース機能を利用します。このような機能は、DTraceがLinuxに最初にポートされたときには存在していません。 新しい実装では、特化されたカーネル・パッチに対するDTraceの依存性が削除されます。
DTrace v2.0はUEK R6でのみ使用可能です。 前のバージョンのUEKでは、元のDTrace実装が引き続き追加されます。
Oracle Linux 8上のDTrace V2.0は、ユーザー・スペース・アプリケーションとして再実装されました。 Oracle Linux 8で実行するためにlibdtrace-ctfライブラリは必要なくなりました。 このライブラリの機能は、Oracle Linux 8 GNUツール・チェーンに統合されています。 Oracle Linux 7では、libdtrace-ctfがまだ必要であることに注意してください。
使用可能になるとすぐに機能が配布されますが、限定された機能セット(主に、多数のユーザーに表示される機能を提供しないフレームワーク機能)からです。ただし、最終的には、前のサポートに向けて、その機能を超えます。
-
重要な変更と改善
次の重要な変更点および改善点が含まれています:
-
基礎となるコアDTrace機能の大部分は、ユーザー空間で再実装されます(Dコンパイラ、プロバイダAPI、プローブ管理)。 この機能の多くは、以前にカーネルに存在していました。
-
現在、DコンパイラがeBPFコードを生成することをターゲットにしています。このため、D言語の多くはコンパイラですでにサポートされています。
-
BPFベリファイア・レポート出力が有効化されます。 コンパイルされたDスクリプトがBPFプログラムとしてカーネルにロードされると、BPF検証では静的コード分析が実行され、プログラムの安全性が確保されます。 この分析が失敗すると、出力が生成され、DTraceによってこの出力がユーザーに報告されます。
-
カーネルが
/proc/kallsyms
(または/proc/kallmodsyms
)でこの情報を提供している場合、関数の境界トレース(FBT)プローブは、モジュールによってグループ化された関数(モジュールがコンパイルされるかロード可能かにかかわらず)で有効になります。 -
Syscallエントリおよびreturn probes (systraceプロバイダ)は、型付きプローブ引数のサポートとともに有効になります。 現在は
-lv
出力でのみ使用可能です。 -
Linuxのトレース・ポイントに基づく静的定義トレース(SDT)プローブが有効で、型付きプローブ引数がサポートされています。 現在は
-lv
出力でのみ使用可能です。
-
-
注目すべき制限
ノートの制限は次のとおりです:
-
printf()
関数はまだ実装されていません。trace()
を使用してください。 -
現在、
trace()
アクションは文字列ではなく数値のみに機能します。 -
exit()
などのほとんどのアクションはまだ実装されていません。 -
3つの変数のスコープのうち、
Global ("x")
とthread-local ("self->x")
はまだ実装されていません。 -
多数のプロバイダ(dtraceまたはprofileなど) --
BEGIN
、END
およびprofile-1n
のようなプローブを含む -- 機能していません -
ワイルドカードを使用した複数のプローブと一致するプローブ記述(provider:module:function:name)は、まだサポートされていません。 たとえば、
write:entry
はsyscall:vmlinux:write:entry
のみと一致するため機能しますが、write:*
はsyscall:vmlinux:write:entry
とsyscall:vmlinux:write:return
の両方と一致するため、一致しません。
-
使用例
次の例では、DTrace v2.0のUEK R6の現在の機能を説明します。 コマンドがルートとして実行され、/usr/sbin
がPATHにあるとします。
-
DTraceバージョン情報を表示:
# dtrace -V DTrace 2.0.0 [Pre-Release with limited functionality] dtrace: Oracle D 2.0
-
プローブのリスト:
# dtrace -l DTrace 2.0.0 [Pre-Release with limited functionality] ID PROVIDER MODULE FUNCTION NAME 1 dtrace BEGIN 2 dtrace END 3 dtrace ERROR 4 fbt vmlinux trace_initcall_finish_cb entry 5 fbt vmlinux trace_initcall_finish_cb return 6 fbt vmlinux initcall_blacklisted entry 7 fbt vmlinux initcall_blacklisted return
この特定のシステム上で、次のものがありました:
-
3 dtraceプローブ
-
87890 fbtプローブ(kprobesに基づく)
-
1262 sdtプローブ(Linuxトレース・ポイントに基づく)
-
666 syscallプローブ
-
-
コンパイル済のDコードをeBPFプログラムとして出力し、その
-e
オプションを使用してコンパイル後に終了する-S
オプションを使用するスクリプトの例:# dtrace -Sen 'write:entry { trace(1) }' DTrace 2.0.0 [Pre-Release with limited functionality] Disassembly of ::write:entry DIFO 0x46af600 returns D type (integer) (size 8) [record 16 bytes] INS OFF OPCODE INSTRUCTION 000 000: 62 a 0 fef8 ffffffff stw [%fp-264], -1 ! = EPID 001 008: 62 a 0 fefc 00000000 stw [%fp-260], 0 002 016: 7a a 0 ff00 00000000 stdw [%fp-256], 0 003 024: 7a a 0 ff08 00000000 stdw [%fp-248], 0 004 032: 7a a 0 ff10 00000000 stdw [%f [...]
-
スクリプト例:
# dtrace -n ' write:entry, write:return { this->x = 3; /* clause-local variables */ this->y = 8; trace(this->x * this->y); trace(&`max_pfn); }'
各値の説明は次のとおりです。
-
write()
システム・コール・エントリを調べて終了します(一度に複数のプローブ)。 -
カーネル識別子(
max_pfn
)やその他のデータ・アイテムのアドレスを記録するプローブ -
プローブには、同じアクションを持つ名前(明示的にはワイルドカードなし)が付けられます。
-
句ローカル変数が使用されます。
-
trace()
アクションは、出力のレポートに使用されます。
-
ファイル・システム
UEK R6のファイル・システムに対して実装された最も注目すべき機能は次のとおりです:
Btrfs
BtrfはUEKで引き続きサポートされます。 この更新では、スワップ・ファイルのサポート、ZStandard圧縮、様々なパフォーマンス改善など、いくつかの改善とパッチが適用されています。 ルート・ファイル・システムのBtrfsのサポートについては、Oracle Linux 8.3を参照してください。
OCFS2
OCFS2は、UEKで引き続きサポートされます。 この更新では、'nowait' AIO機能のサポート、Armプラットフォームでのサポート、オンラインのジャーナル・スーパー・ブロックの読取りおよびオフライン操作のサポートなど、いくつかの改善とパッチが適用されています。
メモリー管理
次の注目すべきメモリー管理機能は、UEK R6に実装されています:
-
TLBフラッシュ
TLBフラッシュ・コードは、不要なフラッシュを回避し、TLBシュート・ダウンを減らすために改善されます。
-
大規模ページの消去
メモリー管理は、膨大なページのクリアをより最適に活用してスループットを向上させます。
-
ページ・キャッシュの改善
Xarrayデータ型を使用すると、ページ・キャッシュの効率が向上します。
-
断片化の回避の改善
断片化回避アルゴリズムが改善され、圧縮およびデフラグ時間が短縮されます。
-
THP障害処理の改善
透明ヒュージ・ページ(THP)の障害を処理し、THPステータスに関するより優れたレポートを提供するために改善が実装されています。
ネットワーク
次の注目すべきネットワーク機能がUnbreakable Enterprise Kernelリリース6で実装されています:
-
TCP Early Departure Time
TCPスタックでは、できるだけ高速モデルではなく、パケットの送信にEarly Departure Timeモデルが使用されるようになりました。 この改善によって、元のTCP/IPフレームワークの制限が解決され、ハードウェア制限およびボトルネックを過剰にするためのスケジュールされたパケットのリリースが導入されるため、複数のパフォーマンスの向上が発生します。
-
一般受信オフロード
GROは、ユーザー・データグラム・プロトコル(UDP)に対して有効です。
-
TLS受信
以前のUEKリリースでは、カーネルでTLSメッセージの送信が有効になりました。 このリリースでは、カーネルはTLSメッセージも受信できます。 TLS接続のカーネル処理の実装は、ユーザー領域に限定される実装を介して、大幅なパフォーマンスの向上を提供します。
-
ゼロ・コピーTCP受信
以前のUEKリリースでは、ネットワークにパケットを送信するためのゼロ・コピーTCP機能が導入されました。 このリリースでは、TCPのゼロ・コピーが可能になります。
-
パケット・フィルタリング
nftablesがファイアウォール・ルールのデフォルトのバックエンドになりました。 BPFベースのネットワーク・フィルタリング(bpfilter)もこのリリースに追加されます。
-
Expressデータ・パス(XDP)が追加されました
XDPは、高速ネットワークのための柔軟で最小限のカーネル・ベースのパケット・トランスポートです。
RDMA
リモート・ダイレクト・メモリー・アクセス(RDMA)は、ネットワークによって接続された2つのシステム間でダイレクト・メモリー・アクセスを可能にする機能です。 RDMAにより、クラスタ内の高スループットおよび低レイテンシ・ネットワーキングが容易になります。
Unbreakable Enterprise Kernelリリース6には、アップストリーム・カーネルで提供されているRDMA機能が含まれており、KspliceおよびDTraceの機能が追加されています。
UEK R6は、UEK R5の機能パリティを保守し、次の注目すべきアップストリーム更新を含みます:
-
動的統計インフラストラクチャ
動的統計インフラストラクチャは、ネット・リンク・インタフェースからアクセス可能なカウンタにバインドすることによって、さまざまなオブジェクトのモニタリングを容易にするために実装されています。
-
動詞フロー・カウンタ
パッチが適用され、ユーザー空間アプリケーションが管理する動詞オブジェクトのリアルタイム・トラフィック・アクティビティおよびイベントをモニターできるAPIが提供されます。
-
RDMA ioctl()の改善
RDMA
ioctl()
を改善するために、さまざまな更新が適用されています。 重要性は、新しいヘッダーが使用され、命名の整合性が高くなっています。uverbs_ioctl
ヘッダーは、uverbs_attr_spec
のdriver_id
およびコンパクト表現を含めるように拡張されています。 -
RDMAリソース・トラッキング
RDMAリソース・トラッキングの一般的なインフラストラクチャが実装されています。 このインフラストラクチャは、詳細なキュー・ペア(QP)情報およびグローバル・リソース利用情報を提供するために使用されます。
-
CQモデレーションはユーザー・スペースに公開されます
パッチは、完了キュー(CQ)をユーザー空間アプリケーションに公開して、イベントの作成に必要なCQEの数を制御します。 この変更により、パフォーマンス・チューニングを改善するためのユーザー・アプリケーションの制御が向上します。
-
ネームスペース機能の改善
ネームスペース機能を改善するために、さまざまなパッチが適用されています。 コマンドを追加するためにRDMAデバイスのネット・ネームスペースを安全に変更できるパッチが適用されました。 複数のネット・ネームスペースでのデバイス共有が無効になり、init_net以外のネット・ネームスペースでnetlinkコマンドを実行できるようになりました。
セキュリティ
Unbreakable Enterprise Kernelリリース6では、次の注目すべきセキュリティ機能が実装されています:
-
x86_64システムのロックダウン・モード
ロックダウン・モードが改善されました。 このリリースでは、整合性モードと機密性モードが区別されています。 Secure BootがUEK R6で有効になっている場合、ロックダウン整合性モードがデフォルトで適用されます。 機密保護モードは、カーネル・コマンド行上で、またはUEFI Secure Bootが有効になっている場合はsecurityfsを使用して有効化できます。 ロックダウン・モードは、Secure Bootを無効にするためにカーネル・コマンドライン・オプションが使用される場合も有効にできますが、Secure Bootが無効な場合にロックダウン強制はデフォルトで実行されません。
整合性モードが有効になっている場合は、次の制限が適用されます:
-
カーネル・モジュール・シグネチャの施行
-
/dev/{mem,kmem,port}
への読取り/書込みアクセスの制限 -
efivar_ssdt_loadの制限
-
kexec_loadシステム・コールを使用不可にします
-
ハイバネーションの無効化
-
PCI BARアクセスをユーザー領域から禁止
-
ユーザー領域からのX86 IOポートへのアクセスを禁止
-
MSRアクセスの制限
-
ACPI custom_methodへのアクセスを制限
-
acpi_rspdカーネル・パラメータを無視
-
「ACPIの無効化」表の上書き
-
PCMCIA CISストレージの禁止
-
TIOCSSEARIALの禁止
-
安全でないカーネル・モジュール・パラメータの禁止
-
testmmiotraceモジュールの禁止
-
デバッグによるアクセスを禁止
機密保持モードが有効な場合、次の制限が適用されます:
-
トレースおよびperfパッドの禁止
-
Bpfの使用をカーネル・メモリーの読み取りに制限
-
Perfの安全でない使用を禁止
-
tracefsを禁止
-
/proc/kcore
へのアクセスを禁止
カーネル・キーリング管理がUEK R6でも変更され、これにより、メインラインのアップストリーム・カーネルのコードが使用されて、プラットフォーム・キーリングが実装されることに注意してください。 UEFI Secure Boot DBキーとマシン所有者キー(MOK)はプラットフォーム・キーリングに格納されるようになり、カーネル・トラスト・キーリングと同等に扱われません。 kexecはプラットフォーム・キーリング内の鍵を信頼しますが、これらはIMA (整合性測定アーキテクチャ)のカーネルに新しいCAを追加するために使用できず、カーネル・モジュールを検証するために使用できません。
-
-
IBRS
間接ブランチ制限仕様(IBRS)は、Spectre V2の投機的実行サイド・チャネル脆弱性の影響を受けるプロセッサでも引き続きサポートされ、他のソフトウェアまたはハードウェア技術では十分でないか、使用できない可能性があります。
-
書き込み可能な世界ディレクトリでの保護を改善
このカーネル・リリースでは、FIFOまたはユーザーが所有していない通常ファイルのオープン(
/tmp
など)を禁止することによって、スプーフィング攻撃を妨げます。 -
Arm KASLR
Armプラットフォームでは、カーネル仮想アドレスのランダム化がデフォルトで有効になっています。
-
aarch64ポインタ認証
この機能により、Armプラットフォーム上の特定のクラスのメモリー・スタック破損攻撃を軽減するために使用できるプリミティブが追加されます。
ストレージ
次の注目すべきストレージ機能がUnbreakable Enterprise Kernelリリース6で実装されます:
-
NVMeの改善点
NVMe over Fabrics TCPホストとターゲット・ドライバが追加されました。 マルチパス・サポートおよびパススルー・コマンド・サポートが追加されました。 NVMeネームスペースのサポートは、ネームスペース書込み保護および非同期ネームスペース・アクセスを含むように拡張されました。
仮想化
Unbreakable Enterprise Kernelリリース6では、次の注目すべき仮想化機能が実装されています:
-
VirtIOの改善点
VirtIO PMEM機能は、VirtIOベースの非同期フラッシュ・メカニズムを追加し、永続メモリーをゲストにシミュレートして、ゲスト・ページ・キャッシュをバイパスできるようにします。 VirtIO-IOMMUでの仮想化ドライバで、ページ表をエミュレートせずにVirtIOトランスポートを処理することもできます。
-
Armプラットフォームの改善
Arm (aarch64)プラットフォーム・システム上のゲストには、ポインタ認証(ARM v8.3)およびScalable Vector Extension (SVE)のサポートが含まれます。