第1章 新機能および変更点
Unbreakable Enterprise Kernelリリース4 (UEK R4)は、x86-64アーキテクチャ上のOracle Linux 6更新7以上およびOracle Linux 7更新1以上向けにテストを重ね、最適化された、オラクル社が提供するオペレーティング・システム・カーネルの4番目のメジャー・リリースです。 これはメインラインのLinuxカーネル・バージョン4.1.12に基づいています。
UEK R4 update 6は、セキュリティとバグの修正やドライバの更新を含む、UEK R4カーネルの4.1.12-112.14.1バージョンとビルドを使用します。 このカーネルは、最新のOracle Linuxリリースを実行している環境でテストされています: Oracle Linux 6更新8、Oracle Linux 6更新9、Oracle Linux 7更新3、およびOracle Linux 7更新4。
オラクルは上流のチェックインを積極的に監視し、重大なバグおよびセキュリティ修正をUEK R4に適用します。
UEK R4では、メインラインのLinuxカーネル・バージョンと同じバージョニング・モデルを使用します。 一部のアプリケーションでは、4.1.バージョニング・スキームが認識されない可能性があります。 ただし、通常のLinuxアプリケーションでは、通常はLinuxカーネルのバージョン番号は認識されず、それによる影響もありません。
1.1 注目すべき変更点
この更新プログラムには、以下の注目すべき変更と機能が含まれています:
-
「NUMAの自動バランシングはデフォルトで無効になっています。」この更新では、自動不均一メモリー・アクセス(NUMA)バランシングの自動有効化が無効になりました。 この変更により、複数のNUMAノードを持つシステムで発生したいくつかの問題が解決され、NUMAの自動分散が有効になりました。 報告された症状には、高い
iowait
時間と、プロセス・スタック内のwait_on_page_bit()
関数上に座っていたD
状態で観測された多数のプロセス(Oracle DBプロセスなど)が含まれていました。kernel.numa_balancing
カーネル・パラメータを1
に設定することにより、NUMA自動バランシングを手動で有効にすることができます。実行時に
kernel.numa_balancing
カーネル・パラメータを設定するには、次のようにsysctl
コマンドを使用します:#
sysctl -w kernel.numa_balancing=1
自動NUMAバランシングの有効化をリブートの間中永続化するには、
kernel.numa_balancing=1
パラメータを/etc/sysctl.conf
ファイルに追加します。kernel.numa_balancing
カーネル・パラメータが設定されているかどうかを確認するには、次のコマンドを実行します:#
sysctl kernel.numa_balancing
-
「遅延コンパクション機能がバック・ポートされ、デフォルトで
madvise
に設定されます。」 Transparent Huge Pages (THP)の遅延圧縮機能はメイン・ライン・カーネルからバック・ポートされており、デフォルトのdefrag
動作はmadvise
に設定されています。 この修正により、メモリー断片化のためにTHPからの膨大なページ割り振りに長時間を要した場合に、THPがアプリケーション・ストールを引き起こす可能性のある問題が解決されます。 -
「RDSにFRWRサポートが追加されました。」この更新では、RDSの作業リクエスト(一般的にFRWR/fastreg/FRMRと呼ばれます)を介したMR登録のサポートが追加されました。 この変更により、RDSはFMRまたはFRWRのいずれかを登録メソッドとして選択できます。 選択は、
prefer_frwr
モジュール・パラメータで指定されたプリファレンスと、基礎となるデバイスによって提供されるサポートに基づいています。 -
「
ibacm
はOracle OFEDリリースで利用可能です。」 Oracle OFED 1.0.0-33リリース以降、ibacm
にはNetlinkサポートが含まれています。ibacm
サービスは、パス・レコード問合せを処理し、パス・レコードもキャッシュします。ibacm
はカーネル・コンポーネント用の簡単なパス・レコード・キャッシュを提供するため、この実装は大規模なファブリック・システムのパフォーマンスを大幅に向上させます。 -
「
libnvdimm
サブシステムがカーネルに追加されました。」この更新では、NVDIMM (Non-Volatile Dual Inline Memory Module)の検出、構成、および管理を担当するlibnvdimm
カーネル・サブシステムが追加されます。 その結果、NVDIMMがシステムに存在する場合は、/dev/pmem*
デバイス・ノードを介して公開され、ndctlユーティリティを使用して構成できます。 -
「
panic_on_rcu_stall
パラメータがsysctl
に追加され、vmcore
のRCUがデバッグされます。」panic_on_rcu_stall
インタフェースは、vmcore
の使用時にRCUストールの根本原因を定義する場合に役立ちます。 RCUストールが検出されると、panic()
関数を呼び出すために、パラメータ値を1
に設定することができます。 -
「カーネル内のiSCSIターゲットに対するTCMU (Target Core Module in Userspace)のサポート。」この機能では、ユーザー・スペース・パススルーがサポートされており、ユーザー・スペース・モジュールをiSCSIターゲットとして指定できます。 通常、組み込みモジュールは、SCSIデバイス用のバック・ストアまたはストレージ・エンジンとして使用され、完全にカーネル・コードとして実装されます。 バック・ストアは一般的なユース・ケースをカバーしますが、一部のターゲット・ソリューションは代替バック・ストアをサポートし、これらの非従来型ストレージ・システムにデータを格納する必要のあるイニシエータのトランスレータとして機能します。 TCMUをサポートすることにより、各バック・ストアごとに小さなアダプタ・モジュールをリリースすることができます。 この機能は、Filesystem in Userspace (FUSE)に似ていますが、ファイルシステム層ではなくSCSI層にあります。
-
「
uio_hv_generic
ドライバが有効になっています。」uio_hv-generic
ドライバは、任意のHyper-V VMBusデバイスにバインドできる汎用ドライバです(ネットワークへのユーザー空間アクセスがあり、適切なストレージが使用可能な場合)。 このドライバを追加すると、virtioドライバとXenドライバの両方に役立ちます。
1.2 暗号APIの改善
この更新では、以下のCrypto APIの改良が行われました:
-
「バグの修正。」セキュリティを強化するために、いくつかのバグ修正が適用されました。
-
「
ccp
ドライバが追加されました。」ccp
ドライバはAMD Cryptographic Coprocessor (CCP)のサポートを提供します。 AMD CCPは、ハードウェア暗号化、ハッシング、およびその他の関連操作を提供します。 提供されているドライバのバージョンは1.1.0です。 さらに、このドライバで見つかった最初のバグを解決するためにいくつかのアップストリーム・パッチが適用されています。 -
NULLハッシュをより適切に処理するために、Crypto API内の様々なコンポーネントに「ハッシュ処理の修正。」の修正が適用されました。 特に、
shash
アルゴリズムでNULLハッシュが使用されたときにダイジェスト操作で発生したクラッシュを修正するための修正がalgif_hash
APIに適用されました。サービス拒否を引き起こす可能性のある
ahash
EINPROGRESS通知コールバック・ループを修正する修正も適用されています。 -
「Jitter Entropy RNGが追加されました。」 Jitter Entropy Random Number Generator (RNG)は、Linuxカーネルに対するCPUタイミングの違いを介してエントロピを収集します。 この機能は、デフォルトで
algif_rng
インタフェースから利用できます。 生成された番号は、/dev/random
ファイルを介してカーネルに戻され、これらの番号は他の/dev/random
ユーザーが利用できるようになります。 その結果、オペレーティング・システムにはより多くのエントロピのソースが利用できるようになりました。 -
「
testmgr
バウンド・アウトのバグ修正。」ソフトウェア実装のテストに使用されるtestmgr
コードは、一部のesp aead
テストの実行時に範囲外アクセス・エラーを生成していました。 この問題は、aes_gcm_enc
/dec test
テンプレートのIVサイズが限られていること、およびtestmgr
コードがmemcpy
からの入力を処理する方法に起因するものです。 このエラーが発生しないように、配列は適切なサイズに増やされました。
1.3 DTraceの改良点
UEK R4u6のDTraceには、モジュールとユーティリティの更新を含むいくつかのバグ修正と強化が含まれており、現在のバージョンは0.6.1になっています。
含まれているその他の注目すべき変更は次のとおりです:
-
安定性とパフォーマンスを向上させるために、「バグの修正。」 Numerousバグ修正が適用されました。
-
「DTrace lockstatプロバイダが追加されました。」この更新では、lockstat DTraceプロバイダの定義を追加するパッチが追加されました。 DTrace lockstatサポートは、最も頻繁に使用されるロック、最も競合を示すロック、最も長く保持されるロックなど、カーネル・ロック・イベントの動的トレースを可能にします。
-
「動的にサイズ変更された
tracemem()
アクションが追加されました。」可変サイズの構造をサポートするために、オプションの3番目の引数形式がtracemem()
アクションに追加されました。 この機能は、以前はOracle Solaris DTraceに追加されていました。 -
「FBTの改善。」では、パフォーマンスを向上させ、関数境界トレース(FBT)モジュールの機能を拡張するために、いくつかのパッチおよびバグ修正が適用されました。
-
「NFS用に追加されたI/Oプロバイダ。」この更新では、DTrace I/Oプロバイダ
start
およびdone
プローブがNFSおよびDTrace I/Oプロバイダ・プローブ用にNFSread
およびwrite
リクエストに追加されました。 -
「
llquantize()
集約が追加されました。」線形ログ量子化集計アクション、llquantize()
では、ログ/線形結果が提供され、線形ステップ・バケットでデータを収集できます。 この機能は、以前はOracle Solarisに追加されていました。 -
「IPI関数呼び出し用に実装されたロック・フリー・アルゴリズム。」ロック・フリー・アルゴリズムの実装により、システムで監視されるIPI (プリプロセッサ割込み)関数コールの量が削減されます。 障壁を引き起こす可能性のあるIPIトラップに頼るのではなく、ロック・フリー・アルゴリズムがより軽量になり、カーネルとCPUへのストレスが軽減され、システム・パフォーマンスが向上します。
-
「構造体のメンバー名はDキーワードと同じにすることができます。」構造体メンバー名がDキーワード(
struct
やgroup.self
など)と競合した場合に構文エラーが発生する問題を修正するためにバグ修正が適用されました。 Dキーワードと同じ名前を使用して構造メンバーを参照できるようになりました。 -
「64ビット・ホスト上の32ビット・アプリケーションのUSDTサポート。」 64-bitホスト上の32-bitアプリケーションに対してユーザー・レベルの静的に定義されたトレース(USDT)をサポートできるようにバグ修正が適用されました。
1.4 Xenハイパーバイザの改良点
この更新には、Linux 4.11および4.12カーネル・リリースの変更からバック・ポートされたXen Hypervisor用のパッチがいくつか含まれています。 これらのパッチの多くは、パフォーマンス、エラー処理、および一般的なバグ修正を改善します。
以下は、この更新で行われた注目すべき修正および改善点です:
-
Xenメモリー管理コードにパッチが適用され、重複したメモリー割り当てによってゲスト仮想マシンでカーネル・パニックが発生する可能性がある問題を解決しました。
-
PVゲストを起動するときに
dmesg
の出力に表示される次の不要なエラー・メッセージが表示されないように、パッチが適用されました:Unable to read sysrq code in control/sysrq
-
この更新では、Xenのセキュリティを強化するためのパッチが適用されています。
-
この更新には、XenゲストによるNVMeデバイスのサポートの改善が含まれています。
-
パッチを適用し、Xen
blkfront
モジュールで更新して、永続的許可が常に最初に割り当てられるようにして、blkfront
リングの許可の管理を最適化しました。 この変更は、利用可能な権限がごくわずかな場合でも十分な許可がある場合にI/Oがハングしないようにするために実装されています。 -
blkfront
ドライバでI/Oがハングする競合状態を修正するためのパッチが適用されました。 -
この更新には、Xenブロック・ドライバの許可管理のデバッグに役立つロギングの改善が含まれています。
1.5 ファイルシステムの改善
以下のファイルシステムの改良がなされました:
-
サブボリュームまたはスナップショットの名前とIDを
/proc/mounts
に含めるためのパッチが適用されました。 この変更により、/
がサブボリュームまたはスナップショットとしてマウントされているかどうかを簡単に識別できます。ここで、root
パーティションはbtrfs
を使用してフォーマットされています。 -
inodeの除外に関する問題を修正し、重複排除操作中に
ctime
およびmtime
タイムスタンプが更新された問題を解決するために、いくつかのパッチが適用されました。 アライメントされていないブロック・サイズの問題、または過去のEOFを除外して、重複している間にエラーが発生する可能性のある別の問題も解決されました。 -
btrfs
をカーネル内に新しい空き領域btree
マウント機能が必要なオプションをサポートするユーザー・スペース・ツールと連動させるためにいくつかのパッチが適用されました。 -
IDでデバイスを削除するときに、デバイスIDをユーザー引数として持つ強化された構造をサポートするために、いくつかのパッチが適用されました。 この変更により、
btrfs
はこの機能をサポートするユーザー・スペース・ツールと並行して動作します。
-
この更新では、新しい静的NFSトレース・ポイントが追加され、デバッグの効率が向上しました。 これらのトレース・ポイントは、LinuxカーネルのNFSクライアントにすでに存在するトレース・ポイントに追加されています。
以下の6つのトレース・ポイントは、NFSのI/Oオペレーション
nfs:nfs_initiate_read
、nfs:nfs_readpage_done
、nfs:nfs_initiate_write
、nfs:nfs_writeback_done
、nfs:nfs_initiate_commit
、およびnfs:nfs_commit_done
をキャプチャするために特別に用意されています。トレース・ポイントを個別または同時に有効にするオプションがあります。 生成される各イベントには、タイムスタンプ情報と、操作をリクエストしたCPUコアおよびプロセスに関する情報が含まれます。
trace-cmdツールを使用して、カーネル内の他の静的トレース・ポイントを制御するのと同じ方法で、NFSトレース・ポイントを制御します。 カーネルNFSクライアントに関連するトレース・ポイントを検出するには、「trace-cmdリスト| grep nfs」コマンドを使用します。
-
透過状態の移行中にNFS4v1クライアントがリースを破棄して新しいリースを申請する問題が修正されました。 この問題により、透過状態移行のメリットが大幅に削減されました。 トランスペアレント状態移行の2番目の問題は、移行されたリースのシーケンスIDをクライアントが失った場合にも識別されました。 修正プログラムが適用され、クライアントが宛先サーバーによって返された意図しないスロット順序値を保存して使用するようにしました。
-
セキュリティ修正は、サービス拒否(DoS)につながるおそれのある特大のNFSv2およびNFSv3引数のチェックを含む、このリリースに含まれるようにバック・ポートされました。pNFS LAYOUTGETオペランドの処理中に不適切なレイアウト・タイプの検証が原因でNFSv4サーバーがリモートDoS攻撃を受け易くなる問題を解決する一連のパッチが含まれています。
-
いくつかのパッチをバック・ポートして再帰的クラスタ・ロックを引き起こした問題を修正し、デッドロックが発生し、クラスタ内のノードがハングアップする可能性がありました。
-
POSIX ACLを使用してiノードを作成する際に発生するデッドロックの問題を修正するためのパッチが含まれていました。 このコードでは、クラスタ全体のinodeロックが考慮されていません。ブロックされたリモート・ロック・リクエストがロックがダウン・コンバートされるのを待っていると、デッドロックが発生する可能性があります。
-
XFSのエラー処理と動作に関連する多数のバグを修正するために、いくつかのパッチが適用されていました。 その他の変更には、XFSの構成可能なエラー・サポートを改善する拡張機能が含まれています。
次の例に示すように、
sysfs
インタフェースを使用してXFSエラー処理を調整することができます:#
ls -l /sys/fs/xfs/dm-1/error/metadata/
total 0 drwxr-xr-x. 2 root root 0 Oct 24 16:54 default drwxr-xr-x. 2 root root 0 Oct 24 16:54 EIO drwxr-xr-x. 2 root root 0 Oct 24 16:54 ENODEV drwxr-xr-x. 2 root root 0 Oct 24 16:54 ENOSPC #ls -l /sys/fs/xfs/dm-1/error/metadata/default/
total 0 -rw-r--r--. 1 root root 4096 Oct 24 16:54 max_retries -rw-r--r--. 1 root root 4096 Oct 24 16:54 retry_timeout_seconds #ls -l /sys/fs/xfs/dm-1/error/metadata/ENOSPC/
total 0 -rw-r--r--. 1 root root 4096 Oct 24 16:54 max_retries -rw-r--r--. 1 root root 4096 Oct 24 16:54 retry_timeout_seconds -
パッチを適用して一般的なバグを解決し、パフォーマンスを向上させました。 含まれる修正: a backported patch to fix a deadlock issue that resulted when work queue log processes hung while waiting for each others to complete; a couple of patches to resolve an issue around read-only remounts that resulted in the file system reporting failed orphan inode recovery on remount; and a patch to resolve a race condition that could cause file corruption during a file-extending direct I/O write.
1.6 ドライバの更新
Unbreakable Enterprise Kernelでは、広範なハードウェアおよびデバイスをサポートします。 ハードウェアおよび記憶域ベンダーと緊密に協力して、次の表の情報に従って、いくつかのデバイス・ドライバがOracleによって更新または追加されています。
ドライバ |
バージョン |
説明 |
---|---|---|
|
1.2-1[41010]-ms + パッチ |
Adaptec Advanced Raid製品 |
|
11.4.0.0 |
Broadcom/Emulex OneConnect 10Gbps NICドライバ |
|
1.713.10 + パッチ |
QLogic BCM57710/57711/57711E/57712/57712_MF/57800/57800_MF/57810/57810_MF/57840/57840_MFドライバ |
|
1.8.0 +パッチ |
Broadcom/Emulex BCM573xx NICドライバ |
|
1.1.0 |
AMD暗号化プロセッサ・ドライバ |
|
1.0.0 |
AMD暗号プロセッサの暗号APIサポート |
|
7.3.21-k8-NAPI +パッチ |
Intel(R) PRO/1000ネットワーク・ドライバ |
|
3.2.6-k + パッチ | Intel(R) PRO/1000ネットワーク・ドライバ |
|
1.6.0.34 |
Cisco FCoE HBAドライバ |
|
2.1.14-k |
Intel® Ethernet Connection XL710ネットワーク・ドライバ |
|
3.0.0-k |
Intel® XL710 X710 Virtual Functionネットワーク・ドライバ |
|
5.4.0-k |
Intel®ギガビット・イーサネット・ネットワーク・ドライバ |
|
2.4.0-k |
Intel®ギガビット仮想ファンクション・ドライバ |
|
5.1.0-k |
Intel®10ギガビットPCIエクスプレス・ネットワーク・ドライバ |
|
4.1.0-k + パッチ |
Intel® 82599 Virtual Functionドライバ |
|
0:11.4.0.2 |
Broadcom/Emulex LightPulseファイバ・チャネルSCSIドライバ |
|
07.701.17.00-rc1 |
Avago MegaRAID SASドライバ |
|
パッチ |
Matrox GP200e4デバイス・ドライバ |
|
16.100.00.00 |
LSI MPT Fusion SAS 3.0デバイス・ドライバ |
|
1.0 + パッチ |
NVMeブロック・デバイス・ドライバおよびコア・サポート |
|
8.10.11.21 8.10.10.21 |
QLogic FastLinQ 4xxxx Ethernetドライバおよびコア・モジュール |
|
8.10.4.0 |
QLogicストレージ・ドライバ |
|
9.00.00.00.40.0-k |
QLogic Fibre Channel HBAドライバ |
|
1.1.2-126 |
Microsemi Smart Familyコントローラ・ドライバ |
|
0.02.0 |
VMBus用のユーザー・スペースI/Oドライバ |
|
パッチ |
Xen Virtual Block DeviceドライバおよびXen Virtual Network Deviceドライバ |
|
6.0.r8044 |
コア・サポート、VHBA、XSVNICおよび仮想イーサネット用のOracle Virtual Network Driverモジュール。 |
ドライバの更新に関するその他のノート
表に示されたドライバに関してベンダーの要請により、次のノートがあります。
-
lpfc
: ロックされたオプティクスのサポートは、LPE32000 HBAおよびこのアーキテクチャの様々なHBAすべてに対して有効になっています。 この機能により、これらのHBAでは、AvagoまたはEmulex認定のSFPオプティクスとQSFPオプティクスの両方を検出して有効にします。ドライバ・リビジョン11.0.0.13以降では、不適格なオプティクスは無効になってリンクが表示されず、エラー・メッセージがログ・ファイルに書き込まれ、lpfcドライバによって次のメッセージが表示されます。
3176 Port Name [wwpn] Unqualified optics - Replace with Avago optics for Warranty and Technical support
-
mpt3sas
: UEK R4更新4では、mpt2sas
ドライバがmpt3sas
ドライバとマージされ、SAS 2.0とSAS 3.0 HBAの両方をサポートする単一ドライバ・モジュールを提供しました。 単一ドライバ・モジュールへの移行のためにモジュールの別名を正しく処理するよう、dracut
に変更が適用されました。
1.7 テクノロジ・プレビュー
Unbreakable Enterprise Kernelリリース4に含まれる以下の機能は、まだ開発中ですが、テストおよび評価の目的で利用できます:
-
DCTCP (Data Center TCP)
DCTCPは、最新のネットワーク・スイッチであるExplicit Congestion Notification (ECN)機能を使用して、遅延制御を強化します。 DCTCPを使用すると、システムは、TCPを使用するよりも高度な処理能力で遅延に対応するため、バッファ占有が低減し、スループットが高くなります。
-
分散複製型ブロック・デバイス(DRBD)
非共有型の同時複製ブロック・デバイス(ネットワーク経由のRAID1)で、高可用性(HA)クラスタのビルディング・ブロックの役割を果たすように設計されています。 自動フェイルオーバーのためにはクラスタ・マネージャ(ペースメーカーなど)が必要です。
-
カーネル・モジュール署名機能
暗号署名チェックをモジュール・ロード時にモジュールに適用し、カーネルにコンパイルされた公開キー・リングに対して署名をチェックします。 GPGは暗号化の作業を行うために使用され、署名およびキーのデータの書式を決定します。
-
サーバー・サイド・パラレルNFS
サーバー・サイド・パラレルNFS (pNFS)により、ファイル・メタデータおよびデータを個別のパスで使用できるようになり、NFSサーバーのスケーラビリティおよびパフォーマンスが向上します。
1.8 互換性
Oracle LinuxではRed Hat Enterprise Linux (RHEL)とのユーザー空間の互換性が維持され、これはオペレーティング・システムの下で実行されているカーネルのバージョンとは無関係です。 ユーザー空間の既存のアプリケーションは、Unbreakable Enterprise Kernelリリース4で変更なしに引き続き実行され、RHEL認定アプリケーションには証明書の更新は不要です。
Oracle Linuxチームはリリース時の互換性に関する影響を最小限に抑えるため、カーネル・モジュールに対する依存性があるハードウェアおよびソフトウェアを提供するサード・パーティ・ベンダーと緊密に協力しています。 UEK R4のカーネルABIは、最初のリリースの後のすべての更新において変更されていません。 このリリースでは、システム上でサード・パーティのカーネル・モジュールの再コンパイルを必要とするUEK R3と比較してカーネルABIに対する変更点があります。 UEK R4をインストールする前に、アプリケーション・ベンダーとそのサポート状況を確認してください。
1.9 開発用ヘッダー・パッケージ
UEK-3.8-QU2現在、kernel-uek-headers
パッケージは作成および配布されなくなりました。 開発目的に役立つ3つのカーネル・パッケージがあります。 kernel-headers
パッケージは、ユーザー・スペース・プログラム用のAPIの一部を形成しています。 kernel-devel
パッケージは、標準のRHCK開発およびモジュール・コンパイルに使用されます。 kernel-uek-devel
パッケージは、UEK開発およびモジュール・コンパイルに使用されます。 kernel-uek-headers
パッケージとkernel-headers
パッケージはいずれも、カーネル開発には不要です。
kernel-headers
パッケージには、ユーザー領域のバイナリまたはライブラリとUEKまたはRHCKとの間のインタフェースを指定するCヘッダー・ファイルが用意されています。 これらのヘッダー・ファイルでは、ほとんどの標準プログラムのビルドまたはglibc
パッケージの再ビルドに必要な構造体および定数を定義します。
kernel-devel
およびkernel-uek-devel
の各パッケージには、UEKおよびRHCKに対するモジュールのビルドに必要なカーネル・ヘッダーとmakefileが用意されています。
UEKおよびUEKとRHCK両方のCヘッダー・ファイルに対するモジュールのビルドに必要なパッケージをインストールするには:
# yum install kernel-uek-devel-`uname -r` kernel-headers