“10年使えるOS”Red Hat Enterprise Linux 6を解剖する
11月16日に発表されたレッドハットのRed Hat Enterprise Linux 6(以下RHEL6)は、ビジネスにおいて、今後10年間の基盤となるOSだ。前バージョンのRHEL5からは3年半と、大幅にメジャーアップデートが遅れたが、その分、ここ数年のトレンドを大幅に取り込み、「10年後でも色あせないOS」として開発されている。
RHEL6は、レッドハットのとっても多大なリソースをかけて開発された。バージョンアップに3年半かかったのもうなずける | RHEL6で機能強化されたテーマ。スケーラビリティ、仮想化、グリーンITの3つを開発のテーマとしている |
■スケーラビリティと仮想化の機能を強化したRHEL6
RHELの各バージョンの比較。RHEL6は、Linuxカーネルの2.6.32をベースとするが、2.6.33/34の機能が取り込まれたスペシャルバージョンになっている |
RHEL6は、Linuxカーネル2.6.32をベースとしているが、カーネル2.6.33/2.6.34などで追加される新しい機能が追加されている。RHEL6は、将来のLinuxカーネルの機能をいち早く取り込むことで、今後提供されるであろうRHEL7やRHEL8にスムーズに移行できる基盤を提供している。
RHEL6では、サポートされるCPU数(CPUコア)は4096CPUコア(理論値)となる。RHEL5の192CPUコアから比べると、比較にならないほどアップしている(レッドハットのサポート上限としては128CPUコアとなっている)。
ただし、レッドハットでも最大値となる4096CPUコアはテストできていないという。これは、4096CPUコアを持つサーバーが現存しないためだ。現存するものとしては、SGIのAltixにおいて、Xeon 7500番台(8CPUコア)を256ソケット分使用し、全体で2048CPUコアをサポートしたサーバーをリリースしている。現在、このAltix上でのRHEL6のテストが行われているため、問題なくテストが終了すればレッドハットからサーバーに対して認証が発効され、この時点でRHEL6のサポートCPU数も2048個までに引き上げられる。
また、Altixでは2048CPUコアだが、CPUトレンドを考えれば、1つのCPUに内蔵されるCPUコアの数が増えてきている(メニーコア化)。このため、数年のうちに4096CPUコアをサポートするHPCサーバーもリリースされるだろう。
なお、x64に関しては、CPUコア数は大幅にアップしているが、x86(32ビット環境)に関しては32CPUコアと、RHEL5と変わっていない。これは、32ビットのx86の限界ということもできる。また、現在リリースされているサーバーのほとんどが、64ビット環境のx64をサポートしているため、わざわざ32ビット環境のx86を積極的に利用する機会も少なくなっている。
サポートするCPU数の増加に伴って、NUMAアーキテクチャを改良することで、性能の向上が図られている。RHEL6では、NUMA対応アプリケーションの性能が、NUMA非対応アプリケーションに比べると、1.2倍~1.54倍に向上している。
RHEL6でサポートされるCPUコア数。RHEL5から見れば、約21倍ものCPUコアがサポートされることになった | RHELの各バージョンがサポートするCPUコア数 |
サポートされているメモリに関しては、64ビット環境のx64に関しては、理論値として64TBまでサポートされている(32ビット環境のx86は16TBと、RHEL5と変わらない)。レッドハットのサポートとしては2TBとなっている。これも、より多くのメモリ環境でのテストが終了すれば、レッドハットがサポートするメモリの容量もアップするだろう。
もう1つ、ファイルシステム自体も拡張されている。RHEL6ではXFSというファイルシステムを使用することで、ファイルシステムのサポートが最大100TBとなっている。これは、ファイルシステムとして100TBをサポートするだけでなく、1つのファイルの最大サイズとして100TBをサポートしている。
RHEL6では、RHEL5の64倍の64TBまでサポートしている。実際に、64TBものメインメモリを持つサーバーが無いため、理論値だが、将来的に64TBをサポートしたサーバーがリリースされれば、実質サポートになる | ファイルシステムとしては、XFSを利用して100TBにまで拡張されている |
仮想化に関してもRHEL6では、大きな改良が行われている。RHEL6では、ハイパーバイザーとしてKVMが採用されている。RHEL5でサポートされていたXenは、RHEL6からはパッケージには同梱されていない。レッドハットの非サポートであれば、Xenをインストールして利用することはできる。
さらにRHEL6では、KVMの性能が向上している。KVMの仮想環境でサポートされている仮想CPUとしては最大64CPU、仮想メモリに関しては1TBにまでアップしている。さらに、1つのホストで同時実行できる仮想環境の数としては、2000VM以上にまで拡張されている。
SMPでの性能がRHEL6は向上している。ベンチマークを行うと、RHEL6のKVMは数%のオーバーヘッドで動作する。ここまでくると仮想も物理もあまり変わらないかもしれない | NUMA対応アプリケーションは、RHEL6では最大1.5倍も性能が向上する |
■RHEL6のカーネル機能の改良
RHEL6では、カーネルのスケジューラが改良されている。今までのLinuxで使用していたO(1)スケジューラは、タスクの優先度ごとに実行キューを用意して、優先度の高いモノから処理する仕組みを採用していた。
しかし、長い間利用されていたスケジューラだが、機能を拡張し続けたため、スケジューラ自体が複雑になってきた。また、アプリケーションがインタラクティブなインターフェイスを備えてきたため、O(1)スケジューラでは、タスクへの公平なCPU時間の割り当てができなくなってきていた。
そこで、CFS(Completely Fair Scheduler)という新しいスケジューラが開発された。CFSでは、アルゴリズムによって、タスクに公平にCPU時間を割り当てることで、ヒューリスティックなインプリメントを廃止している。
さらに、スケジュールクラスとして、リアルタイムタスククラス、リアルタイムでないタスククラス、アイドルタスククラスの3つのクラスが用意されている。リアルタイムタスククラスでは、0(1)スケジューラで実行タスクが決定する。リアルタイムでないタスククラスでは、O(Log n)スケジューラで実行タスクが決定している。
O(1)スケジューラからCFSにスケジューラを改良した | CFSでは、各タスクに公平にCPUタイムを割り当てるようにしている |
Transparent HugePageを使えば、KVMにおいても性能が向上する |
もう1つRHEL6のカーネルにおいて拡張されているのは、HugePageのサポートだ。RHEL5では1ページの大きさは4KBとなっている。しかし、HugePageでは4MBもしくは1GBという大きなサイズになっている。
HugePageのメリットは、仮想化において大きなメリットがある。仮想メモリアドレスを物理メモリアドレスに変換する場合、CPUのハードウェア支援機能を利用しても、1ページが4KBの場合は4回変換する必要がある。しかし、2MBの場合は3回、1GBの場合は2回で行うことができる。変換回数が少なくなることは仮想化の性能に直結してくる。特に、仮想メモリと物理メモリの変換に関しては、仮想環境上でOSやアプリケーションを動作させるときに、必ず関係してくるため、回数が少なくなればなるほど、仮想マシンを動かす負荷が小さくなる。
また、ホストが大容量のメモリ使用している場合、4KBの小さなページでメモリを管理していると、管理しなければならないページ数が膨大になり、メモリ要求に対するアロケーションの回数も飛躍的に大きくなる。これが、2MBのHugePageになれば、4KBに比べて1/512の回数になる。
ページサイズの拡張に関しては、RHEL5でもHugetlbfsというAPIがサポートされていた。しかし、Hugetlbfsを利用するには、アプリケーション側でHugetlbfsをサポートしていないと、大きなサイズのページが利用できなかった。このため、多くのアプリケーションがHugetlbfsをサポートしていなかったため、ページサイズが拡張されても、ほとんど利用されていなかった。
しかし、RHEL6では、Transparent HugePageになっているので、カーネルがアプリケーションのメモリ要求に対して、自動的にページサイズを拡張している。このため、アプリケーション側がHugetlbfs APIをサポートしていなくても、拡張されたページサイズが利用できる。もちろん、この機能は仮想マシンにおいても利用できる。
Multi Queueにより、NICとDriveが複数のパイプを持つことで、NICの効率がアップする |
また、RHEL6で注目したいのは、NICのドライバーに関する改良が行われていることだ。RHEL5では、NICのDriverは、NICとDriverの間はマルチセッション化されているが、CPUとDriver間がポートが1つしかなかったため、バッファーにキューがたまり、NICの性能が向上しなかった。
RHEL6では、DriverとCPU間に複数のポートを用意することで、NICがアイドルにならないようにして、NICの性能が十分に出るように改良されている。これは、今後利用されてくる10Gbpsなどの高速なNICにおいては、大きなメリットがある。
実際、DELLの4ソケット Opteronサーバー PowerEdge R815でのベンチマーク(NICには 10GbpsのBroadcom NetXtreme IIを使用)では、並列度をアップしても、リニアに性能が向上していく。RHEL5では、並列度が5つを上限にして、並列度を上げれば上げるほどNICのパフォーマンスは落ちていく。また、RHEL6では、安定して高いネットワークのパフォーマンスが出ている(RHEL5はバラツキが多い)。
NIC Driverの改良により、カーネルが使用するSystem Timeも低下している。RHEL5から比べると約1/3にまで低下している(User Timeは、RHEL6で少しパフォーマンスが向上している)。
RHEL5と6のネットワーク性能の比較。RHEL6では、並列度がアップしても、スループットがアップしていく | RHEL5では、ネットワークのスループットにバラツキがあるが、RHEL6では高い性能で安定している |
Tickless Timerにより、アイドル時のCPU使用率がRHEL6では大きく低減している |
省電力性に関してもRHEL6は大きく改良されている。IntelのXeonでは、ACPIのC6ステートというモードをサポートすることで、CPUコアがアイドルになると、CPUコアに関連する電力をカットして、電力消費を抑える。これの機能により電力消費は、80%~90%ほど低減される。
電力消費において大きなポイントになったのが、RHEL6における割り込みの改良だ。RHEL5では、プラットフォームに応じて、事前に決められた周波数で割り込みを行っていた。このため、OS自体がアイドル状態になっていても、割り込みが頻繁にかかるため、アイドル状態でもある程度の負荷がCPUにかかったり、CPUが省電力モードに移行したりするのを妨げていた。
そこで、RHEL6では、Tickless Kernelという割り込みの仕組みを採用した。これにより、必要なときにしか割り込みが起こらなくなるため、アイドル状態なら省電力モードに移行することができるようになった。また、頻繁に割り込みがかからなくなるために、複数の仮想マシンを動かしても、システム全体に負荷がかからなくなっている。
RHEL6ではグリーンITにより省電力化もされている | RHEL6では、RHTEL5.4 から同じCPUでも、40%も電力が削減されている。これは、Xeonの省電力機能をRHEL6でサポートしたためだ |
■仮想化の機能拡張
RHEL6では、SR-IOV、KSMなどにより仮想化を機能強化している |
KVMを標準のハイパーバイザーとしたRHEL6では、カーネルの改良で紹介したスケジューラの改良やHugePageのサポートなどで、性能が向上している。さらに、仮想化に向けた改良も行われている。
RHEL6では、Single Root I/O Virtualization(SR-IOV)をサポートしたチップセットとNICカードをサポートしている。SR-IOVにより、NICの仮想化をNIC側で処理してくれる。これにより、サーバー側の負荷が小さくなっている。
もう1つは、QEMMにvhost-netという機能が追加されている。vhost-netでは、カーネルのコンテキストスイッチがないため、10Gigabit Ethernetなどの高速のNICを利用する場合、高い性能向上と安定したパフォーマンスを得ることができる。
またディスクアクセスもNative AIO(NAIO)という機能により、非同期IOの性能を大幅に向上させている。特に、複数の仮想環境を動かした場合、ホストから見れば、ディスクアクセスが非同期になってしまう。これをネイティブでサポートすることで、仮想マシン上でのディスクアクセスの性能を大幅に向上している。
SR-IOVによりネットワークの性能が向上している | vHost-netにより、仮想環境でネットワークを利用する時に、性能が向上している |
今までのvirtioと新しいvHost-netの比較。vHost-netの方が高いパフォーマンスを示している | NAIOにより、仮想化におけるディスクアクセスの性能が向上している |
RHEL6では、KVMにKernel Samepage Merging(KSM)という機能が用意されている。これは、同じ内容のメモリページは、1つにまとめて、使用する物理メモリを圧縮する機能だ。
ページサイズが大きくなると、1バイトでも内容が異なとページをまとめることができない。このため、KSMのメリットがあまりでない可能性もある。ただし、KVM上で数多くのRHEL6を起動した場合は、KSMのメリットが出てくる。
同じ内容のページを1つにまとめるKSMは、同じOSを仮想環境で動かすときにメリットがある | KSMを使えば、同じOSを数多く起動すればするほど、仮想マシンが必要とするメモリが少なくなる。これにより、より多くの仮想マシンが起動できる |
もう1つRHEL6では、Control Groups(以下C Groups)と機能が追加されている。C Groupsは、プロセスが消費するハードウェアリソースを制限することができる。これにより、優先度の低いネットワークアクセスでネットワークリソースが消費されてしまうのを制限して、優先度の高いネットワークアクセスに高いリソースを割り当てることができる。
■RHEL6はHPCから仮想化まで今後の基盤となるOS
RHEL6では、サポート対象のCPUとして、x86、x64、IBM Power、IBM System zなどとなっている。以前のRHEL5では、Itaniumがサポートされていたが、RHEL6ではサポート対象から外れた。ただし、RHEL5でのItaniumサポートは2014年まで続けられることになる。
IntelやAMDのサーバー向けCPUのパフォーマンスが向上するにつれて、Itanium CPUでなくても、高いパフォーマンスを出すことができるようになってきた。また、x64CPUのサーバーが充実してくるにつれて、Itanium CPUのサーバー自体をリリースするメーカーも少なくなっている。こういったことから、RHEL6では、Itaniumサポートがされなくなったのだろう。
さまざまな機能が追加されているRHEL6だが、今後はHPC分野だけでなく、メインフレームが導入されている分野でも積極的に使われていくだろう。実際、4096CPUコアというのは、非常にメリットが大きい。ネットワークのパフォーマンスやディスクアクセスなど、さまざまな部分での大幅に改良されている。
ディスクアクセスやNICのパフォーマンスがアップしているため、仮想環境でデータベースを使用しても十分に実用になる。また、2000VM以上の仮想マシンをKVMがサポートしているため、クラウドなどのシステムの基盤OSとしても高いパフォーマンスを示している。
RHEL6の登場は、今後のプライベートクラウド/パブリッククラウド、企業のビジネスの中心となる基幹業務システムのサーバー用のOSとしてはぴったりだろう。
RHEL6では、パッケージが変更された。仮想ゲストの数によって、パッケージが異なっている | High Performance Network、Load Balancer、クラスタリングなど7つの機能は、アドオンとして提供される | RHEL6は、RHEL5に比べると、仮想ゲストOSの数が増えれば、増えるほど、お得になる |