第1章 新機能と変更点
Unbreakable Enterprise Kernelリリース3 (UEK R3)は、x86-64アーキテクチャ上のOracle Linux 6向けにテストを重ね、最適化されたオペレーティング・システム・カーネルのオラクル社が提供する3番目のメジャー・リリースです。 これはメインラインのLinuxカーネル・バージョン3.8.13に基づいています。
また、3.8.13-16リリースでは、ドライバが更新され、バグやセキュリティの修正が含まれています。
オラクル社は、積極的に、アップストリーム・チェックインを監視し、クリティカルなバグおよびセキュリティの修正をUEK3に適用しています。
UEK R3では、メインラインのLinuxカーネル・バージョンと同じバージョニング・モデルを使用します。 一部のアプリケーションでは、3.xバージョニング・スキームが認識されない可能性があります。 アプリケーションに2.6のコンテキストが必要な場合は、uname26ラッパー・コマンドを使用すると、アプリケーションを開始できます。 ただし、通常のLinuxアプリケーションでは、通常はLinuxカーネルのバージョン番号は認識されず、それによる影響もありません。
1.1 注目すべき変更点
次の各項では、UEK R2と比較した、Unbreakable Enterprise Kernelリリース3 (UEK R3)の主要な新機能について説明します。 機能が導入されたメインライン・バージョンがある場合はかっこ内に記載しています。
その他の変更点の概要は、付録A「その他の変更点」を参照してください。
1.1.1 アーキテクチャ
Intel IVBプロセッサ・ファミリのサポートが追加されました。
efivars
モジュールによって、ファームウェアで管理される不揮発性ストレージの領域が提供されます。これは、カーネルoopsのコピーを維持して問題の診断を支援するための永続的なストレージ・バックエンドとして使用できます。(3.1)
1.1.2 コントロール・グループとLinuxコンテナ
コントロール・グループ(cgroup)およびLinuxコンテナ(LXC)は、現在、サポートされている機能です。 LXCは、64ビットのホストでサポートされていますが、32ビットのホストではサポートされていません(いずれにしても、UEK R3は32ビットのx86アーキテクチャでは使用できません)。 32ビットと64ビット両方のゲスト・コンテナを構成できます。 ただし、一部のアプリケーションは、これらの機能での使用についてサポートされていない場合があります。
cgroup機能を使用すると、システム・リソースへのアクセスをプロセスによって管理できます。 詳細は、「Oracle® Linux 6: 管理者ソリューション・ガイド」の「コントロール・グループ」を参照してください。
LXCは、cgroupおよびネームスペースの機能に基づいています。 コンテナを使用すると、1つのホスト上で複数のアプリケーションまたはオペレーティング・システムのインスタンスを、互いに干渉する危険なしに安全かつ確実に実行できます。 コンテナは軽量かつリソース・フレンドリで、ラック・スペースおよび電力を節約します。 詳細は、「Oracle® Linux 6: 管理者ソリューション・ガイド」を参照してください。
lxc-attachコマンドは、
lxc-0.9.0-2.0.4
パッケージのUEK R3でサポートされています。lxc-attachを使用すると、実行中のコンテナ内の任意のコマンドをそのコンテナ外部から実行できます。 詳細は、lxc-attach(1)
マニュアル・ページを参照してください。注意この機能にアクセスするには、yum updateを使用して
lxc-0.9.0-2.0.4
パッケージ(またはこのパッケージの以降のバージョン)をインストールしてください。
1.1.3 カーネルの基本機能
3.xバージョニング・スキームを認識しないアプリケーションでバイナリ非互換性を回避するには、
UNAME26
パーソナリティ・パッチを使用すると、カーネル・バージョンを2.6.x
としてレポートできます(x
は実際のカーネル・バージョンから取得されます)。 uname26プログラムは、3.xカーネルのUNAME26
パーソナリティ・パッチをアクティブ化するために提供されます。uname26は、unameコマンドに代わるものではありません。 そのかわり、これは、2.6.x
というバージョン番号を返すようにuname()
システム・コールの戻り値を変更するラッパーとして動作します。 3.8.xというバージョン番号が原因でアプリケーションが失敗する場合は、次のコマンドを使用すると、2.6のコンテキストでアプリケーションを起動できます。#
uname26
application
次の例では、ラッパー・プログラムとしてuname26を使用した場合の結果を示します。
#
uname -r
3.8.13-16.el6uek.x86_64 #uname26 uname -r
2.6.48-16.el6uek.x86_64uname26プログラムは
uname26
パッケージで入手できます。(3.1)/dev/kmsg
で構造化されたロギングでは、printk()
を使用して、ログに記録されたメッセージに任意のキー/値ペアをアタッチできます。このメッセージは、作成時のメッセージのコンテキストを示す、マシンで読取り可能なデータを保持します。 キー/値ペアを使用すると、デバイス、ドライバ、サブシステム、クラスおよび型に従って、メッセージを確実に識別できます。syslog
の接頭辞に機能番号を追加することにより、継続レコードをマージできます。(3.5)PCI Expressランタイム電源状態D3coldがサポートされます。 PCIeデバイスのこの省電力状態が最も深くなると、すべての主電源が切れます。(3.6)
仮想ファンクションI/O (VFIO)により、直接デバイス・アクセス(デバイスの割当て)を使用して高I/Oパフォーマンスを得る仮想マシンによるユーザー・スペース・ドライバからベアメタル・デバイスへの権限のない安全なアクセスが許可されます。 デバイスおよびホストの観点から、VMはユーザー・スペース・ドライバとして表示されます。これにより、待機時間の短縮、帯域幅の増加およびベアメタル・デバイス・ドライバの直接使用という利点がもたらされます。 この機能は、パフォーマンスの高いコンピューティングや同様のアプリケーションで使用される可能性があります。(3.6)
ヒュージ・ページでは、パフォーマンスの最適化としてゼロ・ページがサポートされます。 この機能は、これまで標準サイズのページ(4KB)でのみ使用できました。 プロセスで新しいメモリー・ページを参照すると、カーネルは、メモリーの実ページを割り当ててこれに0 (ゼロ)を設定するのではなく、ポインタをゼロ・ページに割り当てます。 プロセスがゼロ・ページへの書込みを試みると、書込み保護違反が生成され、カーネルはメモリーの実ページをプロセスのアドレス空間に割り当てます。(3.8)
NUMAの実装の新しい基盤は、今後の拡張のための基本として使用されます。(3.8)
memory
コントロール・グループでは、現在、スタックとスラブ両方のカーネル使用パラメータに加え、(memory.kmem
と比較して指定された)次のメモリー使用パラメータがサポートされています。-
failcnt
カーネル・メモリー使用のヒット数(表示のみ)。
-
limit_in_bytes
カーネル・メモリーのハード制限(設定または表示)。
-
max_usage_in_bytes
記録されたカーネル・メモリーの最大使用量(表示のみ)。
-
usage_in_bytes
現在のカーネル・メモリー割当て(表示のみ)。
memory.kmem.limit_in_bytes
は、フォーク爆弾の影響を制限できるようにすることを目的としています。(3.8)-
NUMAノードに対するメモリー割当ての自動バランシング。(3.8)
現在、SCSIエラー処理タイムアウトの値は調整可能です。 ファイル・システムI/Oの処理中にSCSIデバイスがタイムアウトした場合、カーネルは、デバイス、バス、コントローラの順にリセットすることでデバイスをオンラインに戻そうとします。 エラー処理タイムアウトでは、毎回リカバリを試行してからプロセスの次のステップを実行するまでのカーネルの待機時間(秒数)を定義します。 高速-失敗シナリオの一部では、カーネルがバス・デバイス、ターゲット、バスおよびコントローラのいくつかの組合せを試すためにさらに時間が必要になる場合があるため、この値を調整できると便利です。 タイムアウトは、
/sys/class/scsi_device/*/device/eh_timeout
を介して読取りおよび設定が可能です。 デフォルトのタイムアウト値は10秒です。(3.8)mmap()
のflags
引数またはshmget()
のshmflg
引数を使用した可変サイズのヒュージ・ページ。 これらの引数のビット26-31は、ページ・サイズの2を底とする対数を指定します。 たとえば、値21 << 26
と30 << 26
は、それぞれ、ページ・サイズ2MB (2^21)と1GB (2^30)を表します。 値0の場合は、デフォルトのヒュージ・ページ・サイズが選択されます。(3.8)ウォッチドッグ・タイマー・デバイス(
/proc/devices
に表示されます)では、すべてのウォッチドッグ・タイマー・ドライバのフレームワーク、/dev/watchdog
、およびハードウェア固有のウォッチドッグ・コードのsysfs
インタフェースが提供されます。(3.8)IEEE 1588で定義されたPrecision Time Protocol (PTP)は有効になっています。 PTPを使用すると、数十マイクロ秒以内にシステムの同期を実現できます。 ハードウェアのタイムスタンプの単位が使用される場合は、数百ナノ秒以内に同期を実現できます。(3.8)
1.1.4 暗号化
Extended Verification Module (EVM)にはデジタル署名が含まれており、これを使用すると、ハッシュ・メッセージ認証コード(HMAC)ではなくデジタル署名を使用してファイル・メタデータを保護できます。(3.3)
カーネル・モジュールは、現在、X.509証明書を使用して署名できます。(3.7)
1.1.5 デバイス・マッパー
デバイス・マッパーでは、シン・プロビジョニングされるボリュームの元として外部の読取り専用デバイスがサポートされます。 シン・デバイスのプロビジョニングされない領域に対するすべての読取りは、このデバイスにパススルーされます。 たとえば、ホストは、シン・プロビジョニングされるボリューム上のゲストVMを実行できます(そのボリュームでは、すべてのVMの基本イメージが1つのデバイス上にあります)。(3.4)
1.1.6 診断
cpupowerutils
機能を使用すると、cpufrequtils
の機能が拡張され、CPUアイドルおよびターボ/ブースト・モードの統計情報が提供されます。 AMDシステムでは、ブースト状態とその頻度に関する情報も表示されます。 詳細は、http://lwn.net/Articles/433002/を参照してください。(3.1)zcache
バージョン3は、複数のクライアントおよびカーネル内高性能メモリー(tmem
)コードをサポートしており、zcache
ドライバのRAMsterと対応するno-opスタブをサポートするためにtmem
コールバックを追加します。 新しいsysfs
パラメータにより、追加情報が提供され、ポリシー制御が許可されます。(3.1)
1.1.7 DTrace
DTraceは、Oracle Solarisオペレーティング・システム用に最初に開発された、総合的な動的トレース・フレームワークです。 DTraceが提供する強力なインフラストラクチャにより、管理者、開発者およびサービス担当者は、オペレーティング・システムやユーザー・プログラムの動作に関する様々な質問に対してリアルタイムで簡潔に答えることができるようになります。
DTraceユーティリティ・パッケージ(dtrace-utils*
)は、Unbreakable Linux Network (ULN)上でのみ使用できます。
UEK R3のDTrace 0.4には、UEK R2のDTrace 0.3.2と比較して、次の追加機能があります。
UEK R2では、DTrace対応バージョンのカーネルを含む使用可能なパッケージを個別にインストールする必要がありました。また、DTraceを使用できるように、このカーネルを使用してシステムをブートすることも必要でした。 UEK R3では、DTraceのサポートがカーネルに統合されています。 DTraceを使用するには、まだ
dtrace-utils
パッケージおよびdtrace-modules
パッケージをインストールする必要があります。これらのパッケージは、ol6_x86_64_UEKR3_latest
チャネルおよびol6_x86_64_Dtrace_userspace_latest
チャネルで入手可能です。 yumを使用してdtrace-utils
パッケージをインストールする場合は、dtrace-modules
など、必要なその他のパッケージが自動的に取り込まれます。libdtrace
ヘッダー(libdtrace
コンシューマの実装に必要)は、現在、別のdtrace-utils-devel
パッケージにあります。 プロバイダ開発用のヘッダーは、dtrace-modules-provider-headers
パッケージにあります。 これらのパッケージが必要な場合は、dtrace-modules
パッケージまたはdtrace-utils
パッケージから個別にインストールする必要があります。メタプロバイダのサポートが実装されました。これにより、DTraceは、必要に応じて、プロバイダを動的にインスタンス化できます。 メタプロバイダの一例として、ユーザー・スペース・トレースに使用される
fasttrap
プロバイダがあります。ユーザー・スペース静的定義トレース(USDT)は、ユーザー・スペース実行可能ファイルおよびライブラリでSDTに似たプローブをサポートします。 プログラムで必要な場合にのみDTraceプローブの引数が計算されるようにするには、is-enabled probeテストを使用して、プローブが現在有効になっているかどうかを確認できます。
USDTでは、埋め込まれた静的プローブ・ポイントが含まれるようにプログラムを変更する必要があります。 USDTをサポートするための
sys/sdt.h
ヘッダー・ファイルが提供されていますが、dtraceに-hオプションを使用すると、プロバイダ記述ファイルから適切なヘッダー・ファイルを生成することもできます。dtraceコマンドの-Gオプションを使用すると、プロバイダ記述ファイルと、プローブ・ポイントを含むコード用にコンパイルされたオブジェクト・ファイルが処理され、DOF ELFオブジェクト・ファイルが生成されます(これは、DTrace Object Format (DOF)セクションを含むExtensible Linking Format (ELF)オブジェクト・ファイルです)。 その後、このDOF ELFオブジェクト・ファイルをオブジェクト・ファイルとリンクすることで、DTrace対応の実行可能ファイルまたは共有ライブラリを作成できます。
詳細は、「Oracle® Linux: DTraceガイド」を参照してください。
DTrace対応プログラムでUSDTプローブを使用できるようにするには、新しい
fasttrap
モジュールをロードする必要があります。#
modprobe fasttrap
現在、
fasttrap
プロバイダでは、USDTプローブの使用がサポートされています。 これは、pid
プロバイダの実装には使用されません。DTrace対応バージョンのユーザー領域アプリケーションは、Oracle Yum Server (https://yum.oracle.com/repo/OracleLinux/OL6/playground/latest/x86_64/)の再生リポジトリを介して使用可能にすることが計画されています。 プレイグラウンド・リポジトリで提供されるパッケージは、実験のみを目的としているため、本番システムでは使用しないでください。 オラクル社は、これらのパッケージのサポートを提供しておらず、その使用に関して一切の責任を負わないものとします。
PHP 5.4.20、PHP 5.5.4および以降のバージョンは、DTraceのサポート付きでOracle Linux上に構築できます。 https://blogs.oracle.com/opal/entry/using_php_dtrace_on_oracleを参照してください。
PostgreSQL 9.2.4には、DTraceのサポートが含まれています(http://www.postgresql.org/docs/9.2/static/dynamic-trace.htmlを参照)。 DTrace対応バージョンの
pgsql
は、http://www.postgresql.org/docs/9.2/static/install-procedure.htmlの説明に従ってconfigureに--enable-dtraceオプションを指定することで構築できます。 PostgreSQLパッケージの入手については、http://www.postgresql.org/download/linux/redhat/を参照してください。カーネル、カーネル・モジュールおよびDTraceユーザー・スペース・ユーティリティのDTraceヘッダー・ファイルは、カスタム・コンシューマおよびDTrace関連のユーティリティによりよいサポートを提供するために再構築されました。
systrace
プロバイダは、3.8.13カーネルの変更点に対応するように更新されました。シンボル参照は、現在、
&
演算子で実行できます。ELFオブジェクトのDT_NEEDED
セクションか、dlopen()
またはdlmopen()
でロードされたライブラリにシンボルが存在するのであれば、ustack()
の出力には、アドレスではなくシンボル名が含まれます。 ユーザー・スペース・プロセスにおけるグローバル・シンボルのシンボル参照では、シンボルの介入および同様の方法のシンボルの順序指定が考慮されます。 シンボル参照は、Oracle Linux 6.4以降に付属するGNU Cライブラリ(glibc
)に対してコンパイルしたプログラムで正常に動作します。 他のバージョンのglibc
を使用した場合、シンボル参照では、シンボルの介入またはdlmopen()
をサポートしていないより簡単な方法が再度使用されるようになる可能性があります。 シンボル参照は、waitfd()
およびPTRACE_GETMAPFD
を使用するカーネルの新しい機構に依存するため、以前のDTraceカーネルでは動作しません。dtraceの-x evaltime={exec | main | preinit | postinit}オプションは、現在、次の制限付きで使用できます。
postinit (デフォルトの動作)はmainに相当します。
静的にリンクされたバイナリでは、preinitはexecに相当し、
ld.so
の初期化(main()
の後に発生)をスキップする場合があります。ストリップされ、静的にリンクされたバイナリでは、postinitとmainの両方がpreinitに相当します。これは、シンボル・テーブルが存在しない場合に
main
シンボルを参照できないためです。
以前のバージョンのDTraceでは、デフォルトの動作が、設定されているevaltime=execに相当していました。
現在は、
DTRACE_OPT_
という名前の環境変数を使用してDTraceオプションを設定できます(NAME
NAME
は大文字表記のオプション名です)。 たとえば、プリプロセッサ検索パスに#include
ディレクトリを追加するincdir
に対応する変数名はDTRACE_OPT_INCDIR
です。#
export DTRACE_OPT_INCDIR=/usr/lib64/dtrace:/usr/include/sys
ユーザーから見える内側の部分には次の変更が行われました。
CTFデータが格納されるELFセクションの名前は、
.dtrace_ctf
から.ctf
に変更されました。内部カーネル・シンボルのストレージ表現が改良されました。これにより、起動時のDTraceメモリー使用量が約1MB少なくなります。
libdtrace
パブリックAPIヘッダーは、その引数に名前を付けるようになりました。複数の
libdtrace
関数のプロトタイプが変更されました。Oracle Solarisのマニュアルに記載されていない2つの
libproc
環境変数(_LIBPROC_INCORE_ELF
および_LIBPROC_NO_QSORT
)は削除されました。これは、これらの環境変数によって動作が調整されたコードがもう存在しないためです。オーバーヘッドの少ない、新しいデバッグ機構が実装されました。
DTRACE_DEBUG=signal
環境変数をエクスポートすると、DTraceは、SIGUSR1
を受け取る場合のみデバッグ出力を生成するため、タイミングに影響するprintf()
ロックによるオーバーヘッドが回避されます。 このメカニズムでは、デフォルト・サイズが100 (MB単位)のリング・バッファが使用されます。このサイズは、DTRACE_DEBUG_BUF_SIZE
変数の値を設定して調整できます。
正の整数のみを受け取るdtraceオプションに指定された負の値は、現在、正しくエラーと診断されています。
ERR
レジスタに適切な値を取得できます。DTraceの詳細は、「Oracle® Linux: DTraceガイド」で入手できます。
1.1.8 ファイル・システム
btrfs
UEK R3では、btrfsはバージョン3.8に基づいていますが、UEK R2に対する最新の更新に含まれるbtrfsは、大きなメタデータ・ブロックやデバイス統計のサポートなど、いくつかの追加でバックポートされた機能を含むバージョン3.0に基づいています。
UEK R3のbtrfsファイル・システムには、UEK R2ですでに提供されている機能に加えて、次の注目すべき機能が実装されています。
ファイル・システムのアンマウントなしでのRAIDプロファイルの変更のサポート。(3.3)
btrfs-restoreデータ・リカバリ・ツールは、壊れたファイル・システムからファイルを抽出して安全な場所にコピーを試みます。(3.4)
btrfsのfsckはエクステント割当てツリーを修復できるようになりました。(3.4)
最大64KB (お薦めは16KBまたは32KB)のメタデータ・ブロックに対するmkfsのサポート。(3.4)
ページ・キャッシュ、CPU使用率およびコピーオンライト・メカニズムのパフォーマンス向上。(3.4)
予期しない状況をより効果的に処理するために改善された監査。 予期しないエラーが発生すると、現在のトランザクションが中断し、エラーがユーザー・スペースのコール元に返され、ファイル・システムが読取り専用モードになります。(3.4)
btrfs device statsコマンドは、I/Oエラー、CRCエラー、各ドライバのメタデータ・ブロックの生成チェックなど、I/O失敗の統計情報をレポートします。(3.5)
メモリーの再利用および同期I/O遅延のパフォーマンス改善。(3.5)
サブボリューム対応の割当てグループ(qgroup)を使用すると、ボリュームとそのサブボリュームに異なるサイズ制限を設定できます。 詳細は、https://btrfs.wiki.kernel.org/index.php/UseCasesを参照してください。(3.6)
btrfsのsendサブコマンドおよびreceiveサブコマンドを使用すると、2つのサブボリューム間の差異を記録できます。これは、同じサブボリュームのスナップショットまたは親子サブボリュームになります。 送信/受信機能を使用して増分バックアップ・メカニズムを実装する例は、https://btrfs.wiki.kernel.org/index.php/Incremental_Backupを参照してください。(3.6)
サブボリューム間のreflinkを使用すると、マウントされた1つのbtrfsファイル・システム内の異なるサブボリューム間でファイルをクローニングできます。 ただし、個別にマウントされているサブボリューム間でファイルをクローニングすることはできません。(3.6)
空のファイルに対するコピーオンライト・メカニズムを無効にできます。これには、chattr +Cコマンドを使用してファイルにNOCOWファイル属性を追加するか、またはNOCOWを設定したディレクトリにファイルを作成します。 一部のアプリケーションでは、この機能によって、フラグメンテーションを少なくし、パフォーマンスを向上させることができます。(3.7)
ファイル・ホール・パンチングを使用すると、ファイルの一部を未使用としてマークできるため、関連するストレージが開放されます。
fallocate()
システム・コールにFALLOC_FL_PUNCH_HOLE
フラグを使用すると、指定されたデータ範囲がファイルから削除されます。 ファイルの末尾からブロックを削除した場合でも、そのコールによってファイルのサイズが変更されることはありません。 ホール・パンチングの典型的な使用事例では、以前に仮想マシン・イメージに割り当てられた未使用のストレージの割当てを解除します。(3.7)fsync()
システム・コールは、ファイルの変更済データをハード・ディスクに書き込みます。(3.7)アンマウントしたり、次のようにbtrfsにreplaceサブコマンドを使用してファイル・システムへのアクセスを中断したりすることなくデバイスを交換します。
#
btrfs replace
failed_device
replacement_device
mountpoint
ファイル・システムをアンマウントしたり、アクティブなタスクを停止したりする必要はありません。 交換中に停電が発生した場合は、次にファイル・システムがマウントされるときにプロセスが再開されます。(3.8)
詳細は、https://btrfs.wiki.kernel.org/index.php/Changelogを参照してください。
cifs
現在、Common Internet File System (CIFS)は、CIFSおよびSMBネットワーク・ファイル共有プロトコルに代わるSMB v2に対して実験に基づいたサポートを提供しています。(3.7)
ext3およびext4
ファイル・システムのバリアは、現在、デフォルトで有効になっています。 パフォーマンス・リグレッションが発生した場合は、mountにbarrier=0オプションを指定して機能を無効にできます。(3.1)
ext4
様々なメタデータ・フィールドのチェックサムを格納します。 メタデータ・フィールドを読み取るたびに、読み取ったデータのチェックサムが、格納されているチェックサムと比較され、メタデータの破損を検出します。(3.5)
割当てファイルは、現在、ファイル・システム・ディレクトリ階層内の個別のファイルではなく、ファイル・システム・メタデータとして非表示のinodeに格納されています。 割当ては、ファイル・システムがマウントされるとすぐに有効になります。(3.6)
f2fs
f2fsは、試験的なファイル・システムで、フラッシュ・メモリー・ストレージ・デバイスおよびソリッド・ステート・ドライブ(SSD)向けに最適化されています。(3.8)
FUSE
numaマウント・オプションは、NUMAシステム上でパフォーマンスを向上するコード・パスを選択するために追加されました。
NFS
NFSバージョン4.1クライアントは、RFC 5661で規定されているとおり、セッション、ディレクトリ委譲およびパラレルNFS (pNFS)をサポートします。pNFSは、ファイル・システム、または複数のサーバーに分散されている個別のファイルへのスケーラブルなパラレル・アクセスを提供することにより、クラスタ・システムを利用できます。(3.7)
XFS
ジャーナルには、ログの整合性を検証するためのチェックサムが実装されています。(3.8)
1.1.9 メモリー管理
frontswap機能では、高性能メモリーに格納されているスワップ・データを格納できます。これは、直接アクセスすることも、カーネルでアドレス指定することもできません。 このように高性能メモリーを使用すると、スワップI/Oを大幅に減らすことができます。 Frontswapは、スワップ・デバイスのバッキング・ストアとは正反対であると考えることができるため、このような名前になりました。 適切なストレージ・メディアは、Xen高性能メモリー(tmem)やカーネル内圧縮メモリー(zmem)など、同期型で安全に同時実行でき、ページ志向の擬似RAMデバイスです。(3.5)
安全なスワップは、ネットワーク・ブロック・デバイス(NBD)またはNFSを使用してサポートされています。(3.6)
1.1.10 ネットワーク
TCPが制御する遅延管理(CoDel)は、ネットワーク接続全体の過度なバッファリング(bufferbloat)を処理するように設計されている新しいアクティブなキュー管理アルゴリズムです。 このアルゴリズムは、キューの長さではなく、キューにバッファされるパケットの長さに基づいています。 最短キューイング時間がしきい値を上回ると、アルゴリズムによってパケットが破棄され、TCPのトランスミッション・レートが低下します。(3.5)
TCP接続の修復にプロセスのチェックポイントと再起動が実装されるため、TCP接続をあるホストで停止し、別のホストで再起動できます。 コンテナの仮想化では、この機能を使用してホスト間でネットワーク接続を移動できます。(3.5)
TCPおよびSTCPによる早期の再送信では、(特定の条件下での)高速な再トランスミッションにより、重複する受信確認の数を減らすことができます。(3.5)
TCP fast open (TFO)により、一部のTCPトランザクションから1つのラウンド・トリップ・タイム(RTT)がなくなり、2つのエンドポイント間の連続したTCP接続の開通を高速化できます。 Webページのロードでは、パフォーマンスが4%から41%向上することが測定されました。
TFOは、デフォルトでは有効になっていません。 これを有効にするには、次のコマンドを使用します。
#
sysctl -w net.ipv4.tcp_fastopen=1
システムの再起動後も変更内容を維持するには、次のエントリを
/etc/sysctl.conf
に追加します。net.ipv4.tcp_fastopen = 1
TFOを使用するアプリケーションは、
setsockopt()
のTCP_FASTOPEN
オプション(サーバー側)やsendto()
でのMSG_FASTOPEN
フラグ(クライアント側)など、適切なAPIコールを使用してシステムに通知する必要があります。(クライアント側は3.6、サーバー側は3.7)TCPの小規模なキュー・アルゴリズムは、バッファ膨張への対応を目的としたもう1つのメカニズムです。 このアルゴリズムにより、ソケットによる伝送用のキューに入れることができるデータの量が制限されます。 この制限は
/proc/sys/net/ipv4/tcp_limit_output_bytes
によって設定されます。この場合、デフォルト値は128KBです。 ネットワークの待ち時間を短縮するには、この制限により低い値を指定します。(3.6)
1.1.11 パフォーマンス
slubスラブ・アロケータは、現在、
CMPXCHG
(圧縮と交換)指示をサポートするCPUアーキテクチャ上のほとんどのパスに対するより幅広いロックレス操作を実装します。 この変更により、スラブ集中型のワークロードのパフォーマンスを向上させることができます。(3.1)perf report --gtkコマンドは、簡単なGTK2ベースのパフォーマンス・レポート・ブラウザを起動します。(3.4)
perf annotateコマンドでは、
[Enter]
キーを使用して、TUIインタフェースで関数コール全体を再帰的にトレースできます。(3.4)perf record -bコマンドでは、ブランチの実行を調査できるようにする、一部のCPU上にある新しいハードウェアベースのブランチ・プロファイリング機能をサポートしています。(3.4)
Uprobeを使用すると、パフォーマンス・プローブをユーザー・アプリケーション内の任意のメモリー・アドレスに配置できるため、デバッグやパフォーマンスの情報を中断することなく収集できます。(3.5)
perf traceコマンドを使用すると、指定されたスクリプトに従ってワークロードを記録したり、以前に記録されたワークロードの詳細なトレースを表示したりできます。 このコマンドは、straceの代替インタフェースを提供します。(3.7)
1.1.12 セキュリティ
セキュア・コンピューティング・モード機能(seccomp)は簡易サンドボックス・メカニズムです。strictモードで、この機能を使用すると、スレッドは、限定的なセット(
_exit()
、read()
、sigreturn()
およびwrite()
)を除くシステム・コールを行うことができず、すでに開かれているファイル記述子のみを使用できる状態に遷移できます。 フィルタ・モードでは、スレッドは、strictモードで禁止されている許可されたシステム・コールの任意のフィルタを指定できます。 この機能へのアクセスには、prctl()
システム・コールを使用します。 詳細は、prctl(2)
マニュアル・ページを参照してください。(3.5)Supervisor Mode Access Prevention (SMAP)は、今後のIntelプロセッサでサポートされる予定の新しいセキュリティ機能です。 SMAPは、カーネルによるユーザー・スペース・メモリー・ページへのアクセスを禁止します。これは、ある種の攻撃をなくすのに役立ちます。 SMAPのビットがCR4で設定されている場合、権限モードによるユーザー・スペース・メモリーへのアクセスを試みると、ページ・フォールト例外が発生します。 詳細は、『Intel® Architecture Instruction Set Extensions Programming Reference』を参照してください。(3.7)
1.1.13 ストレージ
LSI MPT3SASドライバが、LSI MPT FusionベースのSAS3 (SAS 12.0 Gb/s)コントローラをサポートするために追加されました。
OpenFabrics Enterprise Distribution (OFED) 2.0スタックが統合されました。これにより、x86-64アーキテクチャを含むシステムでは、次のInfiniBand (IB)ハードウェアがサポートされます。
Mellanox ConnectX-2 InfiniBandホスト・チャネル・アダプタ
Mellanox ConnectX-3 InfiniBandホスト・チャネル・アダプタは、Oracle X4-2、X4-2LおよびNetra X3-2のサーバーでサポートされています。
Sun InfiniBand QDRホスト・チャネル・アダプタPCIe #375-3696
OFED 2.0では、次のプロトコルがサポートされます。
SCSI RDMA Protocol (SRP)を使用すると、リモート・ダイレクト・メモリー・アクセス(RDMA)経由でリモートSCSIデバイスへのアクセスが可能になります。
iSCSI Extensions for RDMA (iSER)は、iSCSIストレージ・デバイスへのアクセスを提供します。
Reliable Datagram Sockets (RDS)は、高パフォーマンス、低レイテンシ、信頼できるコネクションレスなデータグラム配信用のプロトコルです。
Sockets Direct Protocol (SDP)では、RDMAネットワーク・ファブリック用のストリーム・ソケットがサポートされます。
Ethernet over InfiniBand (EoIB)
Internet Protocol over InfiniBand (IPoIB)
Ethernet tunneling over IPoIB (eIPoIB)
さらに、次のRDS機能もサポートされます。
非同期送信(AS)
サービス品質(QoS)
自動パス移行(APM)
アクティブ結合(AB)
共有リクエスト・キュー(SRQ)
Netfilter (NF)
IB、OFEDおよびRDSのサポートはカーネルに統合されています。 OFEDのユーザー・スペースRPMは引き続き提供されますが、
kernel-ib
およびofa-kernel
RPMは必要ありません。新しいiSCSIの実装により、サポートされるiSCSIターゲット・フレームワークがLIOバージョン4.1に引き上げられます。(3.1)
1.1.14 仮想化
準仮想化のサポートが、Windows Server 2008 Hyper-VおよびWindows Server 2008 R2 Hyper-VのOracle Linuxゲストで有効になりました。
VFSのスケーラビリティの改善点は次のとおりです。
inode_sta.nr_unused
カウンタはCPUごとのカウンタに変換されました。未使用のinodeのグローバルLRUリストはスーパーブロックごとのLRUリストに変換されました。
ipruce_semセマフォは、LRUリストの変更により、削除されました。
i_alloc_sem
機能は、簡素化されたスキームに代わりました。マウント・ロックのスケーラビリティは、マウント・ポイントを持たないファイル・システム向けに改善されました。
inode_hash_lock
はパイプおよびソケットで使用されなくなりました。
(3.1)
privcmd
は、XenFS経由での任意のハイパーコールへのアクセスを処理する文字デバイス・ドライバです。(3.3)xenbus_backend
は、XenFSで使用されるxenbus
用の新しいデバイス・ドライバです。(3.3)xenbus
デバイス・ドライバにより、事前に割り当てられたリング用にnmap
、XenFSを介したイベント・チャネル用にioctl()
を備えている新しい文字デバイスが追加されました。(3.3)Virtual Extensible LAN (VXLAN)トンネリング・プロトコルは、既存のレイヤー3インフラストラクチャに仮想ネットワークをオーバーレイして、レイヤー2イーサネットのパケットをUDP経由で転送できるようにします。 この機能は、仮想環境の仮想ネットワーク・インフラストラクチャで使用するためのものです。 ユースケースには、仮想マシンの移行やソフトウェア定義ネットワーク(SDN)があります。(3.7)
1.2 Xenの改良点
Unbreakable Enterprise Kernelリリース2四半期更新4と比較すると、Xenの使用をサポートするために、次のような多数のバグ修正およびパフォーマンスの改良点がUnbreakable Enterprise Kernelに組み込まれました。
EDD、x2apic、XenBusおよびPVHVM vCPUのホットプラグの問題の修正。
間接ディスクリプタ機能(ブロックI/Oのスループットが増加し、待機時間が短縮されます)。
1.3 ドライバの更新
Unbreakable Enterprise Kernelでは、多くのハードウェアおよびデバイスをサポートします。 ハードウェアおよびストレージのベンダーとの密接な協力関係により、オラクル社はいくつかのデバイス・ドライバを更新しました。 次に示すリストでは、メインラインLinux 3.8.13バージョンとは異なるバージョンのドライバを示します。
1.3.1 ストレージ・アダプタ・ドライバ
Broadcom
NetXtreme IIファイバ・チャネル・オーバー。イーサネット・ドライバ(
bnx2fc
)バージョン2.3.4。NetXtreme II iSCSIドライバ(
bnx2i
)バージョン2.7.6.1d。
Cisco
Cisco FCoE HBAドライバ(
fnic
)バージョン1.5.0.45。
Emulex
Blade Engine 2 Open-iSCSIドライバ(
be2iscsi
)バージョン10.0.467.0o。ファイバ・チャネルHBAドライバ(
lpfc
)バージョン0:8.3.7.26.2p。
LSI
LSI Fusion-MPTベース・ドライバ(
mptbase
)バージョン4.28.20.03。LSI Fusion-MPT
ioctl
ドライバ(mptctl
)バージョン4.28.20.03。LSI Fusion-MPTファイバ・チャネル・ホスト・ドライバ(
mptfc
)バージョン4.28.20.03。LSI Fusion-MPT IPオーバー・ファイバ・チャネル・ドライバ(
mptlan
)バージョン4.28.20.03。LSI Fusion-MPT SASドライバ(
mptsas
)バージョン4.28.20.03。LSI Fusion-MPT SCSIホスト・ドライバ(
mptscsih
)バージョン4.28.20.03。LSI Fusion-MPT SPIホスト・ドライバ(
mptspi
)バージョン4.28.20.03。LSI Fusion-MPT SAS 2.0ドライバ(
mpt2sas
)バージョン17.00.00.00。LSI Fusion-MPT SAS 3.0ドライバ(
mpt3sas
)バージョン03.00.00.00。
MegaRAID
MegaRAID SASドライバ(
megaraid_sas
)バージョン06.600.18.00。
Mellanox
ConnectXイーサネット・ドライバ(
mlx4_en
)バージョン2.1.4。Ethernet固有の機能を処理し、netdev中間レイヤーに接続します。
QLogic
ファイバ・チャネルHBAドライバ(
qla2xxx
)バージョン8.05.00.03.39.0-k。iSCSIドライバ(
qla4xxx
)バージョン5.03.00.03.06.02-uek3。Open-iSCSIをサポートします。
1.3.2 ネットワーク・アダプタ・ドライバ
Broadcom
NetXtreme IIネットワーク・アダプタ・ドライバ(
bnx2
)バージョン2.2.3n。NetXtreme II 10Gbpsネットワーク・アダプタ・ドライバ(
bnx2x
)バージョン1.76.54。コンバージド・ネットワーク・インタフェース・カード・コア・ドライバ(
cnic
)バージョン2.5.16g。Tigon3イーサネット・アダプタ・ドライバ(
tg3
)バージョン3.131d。
Emulex
Blade Engine 2 10Gbpsアダプタ・ドライバ(
be2net
)バージョン4.6.63.0u。
Intel
レガシー(PCIおよびPCI-X*)ギガビット・ネットワーク・アダプタ・ドライバ(
e1000
)バージョン7.3.21-k8-NAPI。UEK R3の
e1000
ドライバは、メインラインのLinuxカーネルのドライバから取得されています。 このドライバのバージョン番号は、Intelのバージョン(8.0.35-NAPI)より小さく見えますが、これには、Intel社がドライバのサポートを終了した後に行われた修正が組み込まれています。PRO/1000 PCI-Expressギガビット・ネットワーク・アダプタ・ドライバ(
e1000e
)バージョン2.4.14-NAPI。ギガビット・イーサネット・ネットワーク・アダプタ・ドライバ(
igb
)バージョン4.3.0。Intelイーサネット・ネットワーク・コネクション(
igbvf
)バージョン2.3.2用の基本ドライバ。10ギガビットPCI-Expressネットワーク・アダプタ・ドライバ(
ixgbe
)バージョン3.15.1。10ギガビット・サーバー・アダプタ仮想ファンクション・ドライバ(
ixgbevf
)バージョン2.8.7。
QLogic
1/10 GbEコンバージド/インテリジェント・イーサネット・アダプタ・ドライバ(
qlcnic
)バージョン5.2.43。QLE81xxネットワーク・アダプタ・ドライバ(
qlge
)バージョンv1.00.00.32。
Realtek PCI Expressギガビット・イーサネット・コントローラ
Realtek PCI Expressギガビット・イーサネット・コントローラ(
r8169
)バージョン2.3LK-NAPI。
Oracle
Sun Blade 40/10ギガビット・イーサネット・ネットワーク・ドライバ(
sxge
)バージョン0.06202013。
VMware
VMware VMXNET3仮想イーサネット・ドライバ(
vmxnet3
)バージョン1.1.30.0-k。
1.3.3 その他のドライバ
InfiniBand
iSCSI Extensions for RDMA (iSER) Protocol over InfiniBand (
ib_iser
)バージョン1.1。InfiniBand SCSI RDMA Protocolイニシエータ(
ib_srp
)バージョン1.2。
Oracle
高信頼性データグラム・ソケット・ドライバ(
rds
)バージョン4.1。RDSでは、数十万の非接続エンドポイント間で、規則的、非重複、高可用性、低オーバーヘッド、信頼性の高いデータグラムの配信が可能です。
1.4 新規パッケージと更新パッケージ
Unbreakable Enterprise Kernelリリース3で提供される新しく追加された機能をサポートするために、次のRPMパッケージは、ベース・ディストリビューションに含まれないパッケージから追加または更新されます。
bfa-firmware
(Brocadeファイバ・チャネルHBAファームウェア)crash
(crash、カーネル解析ユーティリティ)crash-devel
device-mapper-multipath
(デバイス・マッパー)device-mapper-multipath-libs
dracut
(イベント駆動型initramfs
インフラストラクチャ)dracut-caps
dracut-fips
dracut-fips-aesni
dracut-generic
dracut-kernel
dracut-network
dracut-tools
drbd84-utils
(MySQLおよびOracle Linux 6用のHAユーティリティ)dtrace-modules
(DTraceモジュール)dtrace-modules-headers
dtrace-modules-provider-headers
dtrace-utils
(DTraceユーティリティ)dtrace-utils-devel
e2fsprogs
(ext*
ファイル・システム・ユーティリティ)e2fsprogs-devel
e2fsprogs-libs
fuse
(FUSEファイル・システム)fuse-devel
fuse-libs
ib-bonding
(ip-bond、IPoIBボンディング・インタフェース・ユーティリティ)ibacm
(InfiniBandファブリックのib_acm
デーモン)ibacm-devel
ibutils
(OpenIB Mellanox InfiniBand診断ユーティリティ)infiniband-diags
(OpenFabrics Alliance InfiniBand診断ユーティリティ)infiniband-diags-compat
iscsi-initiator-utils
(iSCSIのデーモンおよびユーティリティ)iscsi-initiator-utils-devel
kernel-uek
(UEK R3カーネル)kernel-uek-debug
kernel-uek-debug-devel
kernel-uek-devel
kernel-uek-doc
kernel-uek-firmware
kernel-uek-headers
kexec-tools
(kexec
およびkdump
ユーザー・スペース・コンポーネント)kpartx
(kpartx、パーティション・マネージャ)libcom_err
(共通エラー記述ライブラリ)libcom_err-devel
libdtrace-ctf
(DTrace CTFライブラリ)libdtrace-ctf-devel
libibcm
(ユーザー・スペースInfiniBand接続マネージャ)libibcm-devel
libibmad
(OpenFabrics Alliance InfiniBandマネージメント・データグラム・ライブラリ)libibmad-devel
libibmad-static
libibumad
(OpenFabrics Alliance InfiniBandユーザーMADライブラリ)ibibumad-devel
libibumad-static
libibverbs
(ユーザー・スペースRDMA (InfiniBand/iWARP)ハードウェア・ライブラリ)libibverbs-devel
libibverbs-devel-static
libibverbs-utils
libmlx4
(Mellanox ConnectX InfiniBand HCAユーザー・スペース・ドライバ)libmlx4-devel
librdmacm
(ユーザー・スペースRDMA接続マネージャ)librdmacm-devel
librdmacm-utils
libsdp
(ユーザー・スペース・ソケット・ダイレクト・プロトコル・ライブラリ)libsdp-devel
libss
(コマンドライン・インタフェース解析ライブラリ)libss-devel
lxc
(Linuxコンテナ)lxc-devel
lxc-libs
mstflint
(Mellanoxファームウェア書込みユーティリティ)netxen-firmware
(QLogic Linuxインテリジェント・イーサネット(3000および3100シリーズ)アダプタ・ファームウェア)ofed-docs
(OpenFabrics Enterprise Distributionドキュメント)ofed-scripts
opensm
(OpenIB InfiniBandサブネット・マネージャおよび管理ユーティリティ)opensm-devel
opensm-libs
opensm-static
perftest
(RDMAネットワークのInfiniBandパフォーマンス・テスト)ql2400-firmware
(QLogic 2400シリーズ・マス・ストレージ・アダプタ・デバイス用ファームウェア)ql2500-firmware
(QLogic 2500シリーズ・マス・ストレージ・アダプタ・デバイス用ファームウェア)qperf
(qperf、ソケットおよびRDMAのパフォーマンスを測定するためのユーティリティ)rdma
(InfiniBand/iWARPカーネル・モジュール初期化スクリプト)rds-tools
(RDSユーティリティ)sdpnetstat
(sdpnetstat、InfiniBand SDP診断ユーティリティ)srptools
(InfiniBand SDPユーティリティ)uname26
(uname26、UNAME26
パーソナリティ・パッチのラッパー・ユーティリティ)xfsdump
(XFSファイル・システムの管理ユーティリティ)xfsprogs
(XFSファイル・システムのユーティリティ)xfsprogs-devel
xfsprogs-qa-devel
これらのパッケージを使用できるチャネルの詳細は、第3章「インストールと可用性」を参照してください。
1.5 テクノロジ・プレビュー
Unbreakable Enterprise Kernelリリース3に含まれている次の機能は、まだ開発中ですが、テストと評価の目的で使用できます。
分散複製型ブロック・デバイス(DRBD)
非共有型の同時複製ブロック・デバイス(ネットワーク経由のRAID1)で、高可用性(HA)クラスタのビルディング・ブロックの役割を果たすように設計されています。 自動フェイルオーバーのためにはクラスタ・マネージャ(ペースメーカーなど)が必要です。
カーネル・モジュール署名機能
暗号署名チェックをモジュール・ロード時にモジュールに適用し、カーネルにコンパイルされた公開キー・リングに対して署名をチェックします。 GPGは暗号化の作業を行うために使用され、署名およびキーのデータの書式を決定します。
Transcendent Memory
高性能メモリー(tmem)は、システム内で十分に利用されていないメモリーを回収して、最も必要とされる場所で利用できるようにすることで、仮想化環境での物理メモリーの利用を改善するための新しい方法を提供します。 オペレーティング・システムの観点から見れば、tmemはサイズが不確定で可変の高速擬似RAMで、主として実際のRAMが不足しているときに役に立ちます。 このテクノロジとそのユースケースの詳細は、透過メモリー・プロジェクト・ページ(https://oss.oracle.com/projects/tmem/)を参照してください。
1.6 互換性
Oracle LinuxではRed Hat Enterprise Linuxとのユーザー空間の互換性が維持され、これはオペレーティング・システムの下で実行されているカーネルのバージョンとは無関係です。 ユーザー空間の既存のアプリケーションは、Unbreakable Enterprise Kernelリリース3で変更なしに引き続き実行され、RHEL認定アプリケーションには証明書の更新は不要です。
Oracle Linuxチームはリリース時の互換性に関する影響を最小限に抑えるため、カーネル・モジュールに対する依存性があるハードウェアおよびソフトウェアを提供するサード・パーティ・ベンダーと緊密に協力しています。 UEK R3のカーネルABIは、最初のリリースの後のすべての更新において変更されていません。 このリリースでは、システム上でサード・パーティのカーネル・モジュールの再コンパイルを必要とするUEK R2と比較してカーネルABIに対する変更点があります。 UEK R3をインストールする前に、アプリケーション・ベンダーとそのサポート状況を確認してください。