皆様、新年あけましておめでとうございます。2012年は、皆様にとってどのような1年になりましたか?
今年も、Flashストレージの観点から幾らか最新事情を紹介させていただければと思います。今回は、Fusion-ioの独自テクノロジである、Flashメモリの利点を引き出すためのioMemory SDKを通して、Flashメモリが今後のどのように活用できるかを考えていきたいと思います。
ioMemory SDK ─FlashメモリへのネイティブアクセスAPI
これまでNAND Flashメモリは、ハードディスクの代替として、USBメモリやCFやSDカード、SSDといったブロックデバイスとして使われてきました。しかし、Flashメモリには、Flashメモリならではの利点があります。
Fusion-ioではFlashメモリに対して、これまでのブロックデバイスとしてではなく、新たなアクセス手段として提供するためのioMemory SDKを発表しました。このSDKは、Fusion-ioのFlashメモリ制御ソフトウェアであるVirtual Storage Layer(VSL)がもつ「基本操作」 、すなわちプリミティブを使ったソフトウェア開発を可能とする、ソフトウェア開発キットです(図1 ) 。
ioMemory SDKには複数のAPIやインターフェースが含まれます。ここではioMemory SDKに含まれるいくつかの機能を紹介しましょう。
developer.fusionio.com
URL:http://developer.fusionio.com/
図1 ioMemory SDKによるネイティブAPIアクセス
Key-Valueストア(KVS)API
ioMemory SDKのKey-ValueストアAPIは、ioMemory SDKが提供するプリミティブを用いて構成されたKey-Valueストアです。本APIを用いると、簡単なコードだけで、FlashメモリをKVSの記憶域として利用できるようになります。
directFS(direct Filesystem)
directFSは、Ext4, Btrfsなど他のPOSIXファイルシステムと同様にマウントして利用できるファイルシステムです。Flashメモリ ネイティブなdirectFSを使えば、ファイルシステムを介した場合でも、ファイルシステム無しの場合と遜色ないI/O性能が得られます。
directFSでは、VSLによる仮想アドレス空間とスパースの機能を使うため、従来型のファイルシステムと比べてブロック割り当てやマッピングが大幅に単純化されています。また、昨年の記事 で紹介したアトミックライトを利用して、ジャーナリングなしで整合性を担保する点も特徴的です。
Extended Memory
Fusion-ioのExtended Memoryは、Linuxのスワップサブシステムの動作を改善し、Flashメモリを用いたスワップ処理が効率的に行えるようにしたものです。
Linuxカーネルに搭載されているスワップ機能は、1995年ごろ、従来の磁気記憶ディスクに合わせたチューニングがなされてから大きな変更は行われていませんでした。磁気記憶ディスクはレイテンシーが非常に大きいため、磁気ディスクをいかに効率的に利用するかをいう観点で最適化されていますが、しかしFlashメモリでは磁気ディスクのような制限はないため、Flashメモリに適したスワップ処理を行えば、DRAMの延長としてFlashメモリが活用できるようになります。
FlashメモリはDRAMと比べ容量単価が安価であり、低消費電力です。このため、全てをDRAMで構成するとコスト感が合わないようなワークロードでは、Flashメモリを併用することで、より安価に広いメモリ空間を確保できます。大容量メモリが必要な計算やオンメモリDBなどで、DRAMとFlashメモリの組み合わせ活用が期待されます。
Auto Commit Memory
Auto Commit Memory(ACM)とは、メモリアクセスによるFlashメモリへのアクセスを実現するためのAPIです。ソフトウェアがロード/ストア命令を使ってメモリ上のデータを読み書きできるようになりなります。
Fusion-ioは、2012年1月にはACMを用いることにより、秒間10億I/Oを実現するデモンストレーションを発表しました。ACMは、たとえばデータベースのログ書き込みを高速化するために使われるようになるでしょう。
ioMemory SDKが何をもたらすか
ioMemory SDKによるFlashメモリへのネイティブアクセスによって、ソフトウェア開発者をはじめとするエンジニアにとって、さまざまなメリットが得られると考えています。
ソフトウェア開発工期の短縮
現在、高度かつ高速な処理を行うソフトウェアを設計、開発するためには多大な労力を要します。なぜなら、コンピュータやデバイスの物理特性を考慮した最適化を行わなければならず、性能の高いプログラムはなかなか一筋縄にはいきません。
しかし、不揮発層を効率よく、簡単に扱えるioMemory SDKにより、開発者は本来の目的であるロジックに集中できるようになります。たとえば、グラフィック処理ソフトウェアでリアルタイムに3Dのテクスチャ画像をメモリ上へロードしたいような場合など、Key-ValueストアAPIの利用により、簡単に高効率なソフトウェアを実装できます。
新しいインターフェースの定義と標準化
Fusion-ioでは現在、不揮発メモリへのアクセス手段となるAPIの定義を進めています。また、SCSIプロトコルの標準化を行うT10においてAtomic Writeの標準化も進めており、将来的にはFusion-ioのデバイスに限らず、同様のプリミティブを持つデバイスでこれらのインターフェイスを利用できるようになるのではないかと思われます。
ミドルウェアのioMemory SDK対応
MySQL InnoDBエンジンのデータ更新ロジックにAtomic Writeを適用することで、トランザクション処理時間の短縮、秒間処理トランザクション数の増加、またFlashメモリ寿命の延命が可能となります(図2 ) 。また、MySQLの機能拡張版を提供するPerconaは、同社のPercona ServerにAtomic Writeをサポートするパッチを追加しました。詳細については同社エンジニアのブログにて紹介されています。
今後、このようにioMemory SDKに対応したミドルウェアが増えてくれば、対応ミドルウェアを導入することで、Flashメモリへのネイティブアクセスによるパフォーマンス向上が可能になるでしょう。
図2 Atomic Write対応版MySQLのベンチマーク例
おわりに
ioMemory SDK、もしくはそれに準ずる不揮発メモリアクセスAPIの登場により、ソフトウェアやシステムのデザインに大きな変化が訪れるのではないかと私は考えています。APIの登場により、ソフトウェアは不揮発性を持つメモリを、ハードディスクとは別の存在として扱うようになるでしょう。過去50年にわたって続いたコンピュータアーキテクチャに変化が訪れ、システムが新たな形へと変化しようとしています。
2013年もエキサイティングな年になりそうですね!
今年もよろしくお願いします。