LIQID社が提供しているNVMeストレージ(SSD)とは一体何モノか?
弊社が代理店を務める米国コロラドに本社を置くLIQID社(リキッド)が世の中に最初にリリースした製品はNVMe(Non-Volatile Memory Express)インタフェースをサポートしたSSDであります。
NVMeはストレージ接続インタフェースの新規格で、歴史的にはSCSI、SAS、SATAなどのダイレクトアクセスインタフェース(DAS)の流れを汲むものです。規格策定にあたっては、フラッシュデバイスのサプライヤであるSamsung、SanDiskやハードディスクドライブベンダーであるSeagateに加え、IntelやDellなど業界の中心ベンダが標準化に尽力しました。今後コンピュータの筐体内部のストレージデバイスのプロトコルとして、またコンピュータとストレージを接続するためのネットワーク上を流れるそれとして普及が期待されています。
NVMeは従来のスピンドルベースのハードディスクに代わって採用が進むSSDの登場によって考案された背景があります。SSDはランダムアクセスに優れたフラッシュメモリベースのデバイスであり、NVMeの採用によりその高速化の恩恵を余すところなくシステム全体が享受できるようになります。
とりわけ、レイテンシ(遅延)性能に優れ、多数のI/O要求が発生するサーバーやストレージサブシステムでは大きな性能向上が期待されます。
ローテーションディスクメディアからフラッシュメディアに記憶素子が代わり、より高い効率でI/OできるようになったドライブすなわちSSDは、接続するバスの性能限界が大きな課題になります。すなわち、このバス技術の進歩なくしてSSDが持つポテンシャルは十分に活かされず、すでに多数市場に存在するSSD製品ではありますが、このバスの性能限界によって各SSDのデータレート値は同じようなレベルで頭打ちになり、あまり差が見られません。
そこで着目されたのが、すでにホスト(サーバー、ワークステーションやPC)筐体内にすでに存在するPCI Expressバスです。PCIeスロットに挿入するアダプターカードを利用した方であれば馴染みが深いと思いますが、現行普及しているのはGen3と呼ばれる1レーンあたり約985MB/secの転送速度のものです。一世代前のGen2だと同500MB/secほどになります。先述のPCIeアダプターカードはこのレーンを複数活用する仕様のものが多く、例えば8レーン(x8)のものだとGen3仕様のカードで8GB/secの転送速度が期待できます。この高速伝送が可能なPCIeインタフェースをストレージデバイスのインタフェースに活用するか、というのが現在の潮流であり、まさにNVMeのインフラになるわけです。
NVMeは、ホスト筐体内においては、このPCIeバスの上に実装されるべく新しく考案されたストレージインタフェースプロトコルです。フラッシュベースのドライブであるSSDの性能を存分に発揮できるよう標準化の段階で様々な工夫が凝らされています。ではこのNVMeを活用したストレージデバイスにはどのようなものがあるのでしょうか。
一番わかりやすい区分としては、どのように接続するのか?であろうと思いますので、その視点で見ています。
先述のPCIeスロットに挿入するアダプターカード型(AIC)のものがあります。これとは別にU.2と呼ぶ従来のハードディスクと同じ2.5インチ・ドライブ形状のもの、またM.2という小型のスティック形状のものも登場しています。LIQID社は弊社ホームページでも紹介しているAIC型とU.2型の二種を提供しています。是非ご覧ください(LIQID社紹介ページリンク)。
PCIeスロットに挿入するものを動作させるためには、通常ソフトウェアドライバが必要になりますが、一般的なOSであるWindowsやLinuxの最新版ではNVMeドライバを標準で実装してあるため、NVMe SSDを購入してすぐに使用することができます。多くのNVMe SSDベンダが自社のドライバによってより高い性能や機能を提供していますので、そちらを選択することもできます。
お手持ちのホストやこれからホストの導入を検討されていて、高速ストレージインタフェースが必要な方はNVMe対応のハードウェアを選択肢に加えるのがよいかもしれません。
すでにお気づきの方がおられると思いますが、折角このように高速の内蔵インタフェースで接続されるストレージデバイスが筐体の壁を越えて外部にデータ伝送するときに、再び性能のデグレードを経なければならないというのはどうにかならないのか?その不満に応えるのがNVMe over Fabricというネットワーク接続アーキテクチャーです。一言で言うならば、物理層をEthernetやInfinibandを使いながら論理層にNVMeプロトコルを流すというもので、サーバー内部のPCIeバスがそのまま筐体間接続インタフェースに延伸されるような「イメージ」で使えるものです。こちらについては別の機会にまたご紹介させていただきます。