ミシガン大学の研究者チームが、Linuxカーネルに常駐するオープンソースプログラム「Infiniswap」を生み出した。Infiniswapの目標はノードが相互のメモリをスワップファイルとして使用し、各ノードで動作するアプリケーションで使用可能な実行メモリ容量を増やし、クラスタ全体でメモリリソースを効率的に利用することだ。
英国のIT専門媒体、「The Register」とも提携し、エンタープライズITのグローバルトレンドを先取りしている「The Next Platform」から、@IT編集部が独自の視点で“読むべき記事”をピックアップ。プラットフォーム3へのシフトが急速に進む今、IT担当者は何を見据え、何を考えるべきか、バリエーション豊かな記事を通じて、目指すべきゴールを考えるための指標を提供していきます。
データベースやデータストア、その上で動くアプリケーションがインメモリ処理に対応するケースが増えている。だが、1台の大規模NUMAサーバでメモリ容量が足りなくなる場合や、クラスタの小規模ノード間でのレイテンシが大きいために、パフォーマンスが及第点に届かない場合もある。
例えば、Hewlett Packard Enterprise(HPE)のNUMAアーキテクチャ対応サーバである「HPE Integrity Superdome X」と「SGI UV 300」は、それぞれ最大メモリ容量が48TB、64TBとなっている。HPEの「The Machine」研究プロジェクトの最新プロトタイプは、ノード間で共有されるメモリの搭載量が160TBに達しており、新しい「Gen-Z」プロトコルの初期バージョンを使用している。
Intelの「Rack Scale」アーキテクチャでも、The Machineと同様に、最終的にコンピュート、メモリ、ストレージ、I/Oリソースがサーバから取り出され、別々のボックスにプールされて、新しいプロトコルに基づく高速インターコネクトで接続される。
だが、もっとシンプルな方法があるかもしれない。
ミシガン大学の研究者チームは、「ハードウェアやソフトウェアに大きな変更を加えることなく、アプリケーション用の大きなメモリプールを作成する」という課題を解決できると考えている。同チームは、Linuxカーネルに常駐するオープンソースプログラム「Infiniswap」を生み出した。
InfiniswapはRemote Direct Memory Access(RDMA)プロトコルを使って、さまざまなサーバノードにわたってメモリをプールする。RDMAは、もともとInfiniBandネットワーク上のHPC(ハイパフォーマンスコンピューティング)アプリケーションを高速化するために開発された。だが、その後イーサネットに移植され、最近では、さまざまなデータベースおよびストレージクラスタリングアプリケーションで使われている。
Infiniswapの目標はノードが相互のメモリをスワップファイルとして使用し、各ノードで動作するアプリケーションで使用可能な実行メモリ容量を増やすことで、クラスタ全体でメモリリソースの効率的な利用を実現することだ。
Infiniswapは、RDMAネットワーク上のリモートメモリをマップアウトし、それを利用してデータベースのようなアプリケーションに通常関連するインメモリデータセットの処理を高速化するメモリページングシステムだ。
一般的なサーバでは、メモリを使い果たすとメモリ内のデータをディスクに書き込んでメモリ領域を解放する。これに対し、Infiniswapはリモートシステムの空きメモリにアクセスし、大規模なインメモリデータセットを処理する。これは、リモートCPUを介さずネットワークインタフェースカードのRDMA機能を使って、必要なときに利用可能な分散型メモリネットワークを構築することで行われる。
ミシガン大学の研究チームが行った実験では、サーバ32台のクラスタ上でLinuxカーネル3.13とともにInfiniswapが実行された。ノードの接続には、56GbpsのMellanox製InfiniBandアダプター「ConnectX-3」および対応するスイッチが使われた。
Infiniswapは、全32台のサーバ上でデーモンおよび仮想メモリブロックデバイスとして実装された。デーモンはメモリの割り当てと管理を行い、ブロックデバイスはカーネルとのインタフェースとして機能し、RDMAによってデータブロックをリモートメモリに分散した。RDMAは、リモートメモリと直接通信するための高速で低レイテンシの通信プロトコルだ。
Infiniswapは、ソフトウェアやハードウェアに変更を加えることなくクラスタの分散メモリをエクスポーズ(アプリケーションに提供)できる。Linux OSとRDMAネットワークが使われている環境では、Infiniswapもきちんと動作する。これに比べ、ハードウェアの大幅な変更により、ネットワーキング、メモリ、ストレージリソースを分解し、それぞれのプールを作成するとなると(これはIntelのRack Scale設計の鍵となるアプローチ)、実装に数百万ドルかかるかもしれない。
Infiniswapは、HPCに広く利用されているInfiniBandだけでなく、RDMA over Converged Ethernet(RoCE)上でも動く。RoCEは、GoogleやFacebookなど多くのクラウドプロバイダーで使われていると、ミシガン大学助教授のモシャラフ・チョードリ氏は説明する。
従来のサーバはメモリが不足すると、メモリ内のデータをスワップアウトしてディスクに書き出す。それがレイテンシを増やしてしまう。Infiniswapは、他のサーバ上のリモートメモリにアクセスしてレイテンシを抑えられる。そのアクセスにかかる時間の方が、ローカルディスクドライブへの書き出しにかかる時間より短いからだ。
「レイテンシが極めて低いのであれば、リモートメモリにアクセスしても問題ないというのがわれわれの発想だ。これからも、レイテンシを抑えるという観点からさまざまな技術をサポートしていくつもりだ」(チョードリ氏)
Infiniswapを効率的に利用する鍵は、全てのメモリリソースが適切なバランスで活用されるようにすることだ。システムの観点から言えば、Infiniswapを実装するのに特別なハードウェアはいらない。研究チームは「Power of Two Choices」という新しい原理に基づいて1990年代に開発された負荷分散技術を使用した。この技術では、2台のマシンの使用可能なメモリが比較される。
具体的には、この負荷分散技術ではリモートメモリ割り当てのために2台のサーバがランダムに選択され、カーネルがそれらの仮想メモリブロックデバイスに「メモリ負荷が低い方のサーバ上のメモリにデータを書き込みたい」と伝え、書き込みが行われる。両サーバ上のリモートメモリに空きがなければ、別の2台のサーバセットがあらためて選択される。全てのリモートサーバのメモリブロックが満杯の場合は、Infiniswapは何も行わない。
一般的なシナリオでは、クラスタ全体にわたって多くの空きメモリが分散しており、こうした技術によって多数のサーバ間でメモリの使用負荷を分散できる。Infiniswapは、中央コントローラーが必要となるような従来の負荷分散技術は使用しない。中央コントローラーは、クラスタ内システムの全てを把握し負荷分散をつかさどるが、アプリケーションのパフォーマンスのスケーリングに伴い中央コントローラーに大きな負荷がかかり、ネットワークのボトルネックになる恐れがあるからだ。
Copyright © ITmedia, Inc. All Rights Reserved.