このページの本文へ

ロードマップでわかる!当世プロセッサー事情 第459回

いまさら聞けないIT用語集 SSD用の高速インターフェースNVMe

2018年05月21日 12時00分更新

文● 大原雄介(http://www.yusuke-ohara.com/) 編集●北村/ASCII.jp

  • この記事をはてなブックマークに追加
  • 本文印刷

NVHMCIでもコントローラーがボトルネックに

 ところがNVHMCIは、コンシューマー向けのSSDはともかく、エンタープライズ向けには不十分という声がNVHMCIの規格策定に携わったメンバー企業の中から多く出てきた。

 SATAにしてもSASにしても、1つのコントローラーの下に多数のHDDをぶら下げる構造になっている。HDDの場合、よほどのことがない限り連続して長時間にわたってデータの読み出しや書き込みを行なうことはなく、だいたいは数セクター分を読み書きした後でシーク(ヘッドの移動)、また数セクターの読み書き、シークという具合に続く。

HDDは、数セクター分を読み書きした後でシークという作業が続く

 そのため、複数のHDDを1つのコントローラーにぶら下げても、うまく負荷分散を図れる。

複数のHDDを1つのコントローラーにぶら下げても負荷を分散できる

 ところがSSDの場合、読み書きが極めて長時間可能で、シークに相当する部分(SSD内部のガベージコレクションなど)の時間はずっと短いので、1つのコントローラーの下に複数のSSDをぶら下げた場合、どうかするとコントローラーが先にボトルネックになってしまう。

SSDは長時間の読み書きが可能なため、複数のSSDをぶら下げた場合はコントローラーがボトルネックになる

 PC向けなら、ブートドライブをSSDにして、データドライブはHDDという構成になっているためそれほど大きな問題ではないが、エンタープライズ向けでは複数台(それも2桁)のSSDがぶら下がることになるので、明らかにコントローラー側がボトルネックになる。

 そこで複数のSSDを1つのコントローラーで管理するのではなく、1つのコントローラーで1つのSSDを管理する方式が浮かぶことになった。これは当初、Enterprise NVMHCIという名前で2009年中旬から開発が始まるが、途中でNVM Expressに名前が変わった。

 ではSATAとNVM Expressではなにが違うのだろうか。下図がSATAとNVMe Expressの接続方法である。

 SATAの場合、ホスト(PCだったりサーバーだったりいろいろ)とPCIやPCI ExpressでまずSATAコントローラーがつながり、そこからSATA経由でHDDやSSDがつながる形になる。

SATAの接続方法

PCI Expressの接続方法

 SATAコントローラーに関してはPC側のチップセットに統合されている場合もあるが、この場合チップセットの内部でPCI/PCI Express経由でSATAコントローラーにつながる構造になっているだけで、基本的にはこの3つのブロックに分かれていることに違いはない。これに対しNVM Expressでは、NVMeのコントローラーがSSD内部に入っている、という大きな違いがある。

 ちなみにNVMeのコントローラーとフラッシュメモリーの間のI/Fに関しては、サムスン/東芝という2大フラッシュメモリーベンダーはToggle NAND、その他のメーカーはONFI(Open NAND Flash Interface)という規格に準拠することで、足並みがそろっていなかった。

 実を言うと現在もあまりそろっていないのだが、これは微細化や高速化にともない、例えばエラー訂正についても世代毎に異なる要件が必要になってきており、もはや同じメーカーの中ですらI/Fを変えないといけなくなってきている。

 これもあって、もうフラッシュメモリー単体でのI/Fの標準化はすでに放棄されている。ではどうやってつなぐかというと、それこそNVM ExpressやeMMC(Embedded Multi Media Card)、UFS(Universal Flash Storage)などの、「コントローラーが搭載されていることを前提としたI/F」を利用するようになっている。

 PCI Expressの接続方法の図で言えば、ホストとNVMeコントローラーはPCI Expressでつながることだけが決まっており、NVMeコントローラーとフラッシュメモリーをどうつなぐかはもはや各NVMeコントローラーベンダー任せとなっている。

 NVMeコントローラーベンダーは、利用するフラッシュメモリーのメーカー/世代ことにあわせて異なるチップを用意しているというのが正確なところだ。

 話がやや逸れたが、ではAHCIとNVM Expressではアプリケーション(ドライバー)からみるとどんな違いがあるのだろうか。いくつか目立ったところを比較すると以下の違いがある。

AHCIとNVM Expressの違い
速度 AHCIは最大でもチャネルあたり600MB/秒。一方NVM ExpressはPCI Expressの限界(Gen3 x4なら最大4GB/秒)
キューの深さ コントローラーがハンドリングできる送受信コマンドを貯めるコマンドキューは、AHCIの場合1つのみで、そのキューに32個のコマンドを貯められる。NVM Expressは65535個のコマンドキューを持つことができ、それぞれのキューに最大65536個のコマンドを貯められる(最大値)
割り込み 予めキューイングされたコマンドに割り込みをかけて優先的に処理する割り込み処理について、AHCIでは1つのみ許され、多重割り込みはサポートしない。NVM ExpressではMSI-X(eXtended Message Signal Interrupt)と呼ばれる、メッセージベースの割り込みを最大2048までサポートする。
並列処理 AHCIでは並列処理をサポートしないので、複数のプログラムからのリクエストが同時にコントローラー側に到達しないように、デバイスドライバーでリクエストを一本化する必要がある。NVM Expressでは最初から並列処理をサポートしており、複数のプログラムからの同時リクエストをさばける。

 またAHCIの場合は、その先につながるのが必ずしもHDDやSSDとは限らない(光学ドライブやMOドライブなども考えられる)のに対し、NVM ExpressではフラッシュメモリーベースのSSD以外は考慮されていないので、こうしたHDD/SSD以外のデバイスへの配慮なども外されている。

 ただこうした違いを別にするとNVM ExpressはSATAとよく似た構造になっており、ドライバーを置き換えるだけでアプリケーションからは同じように使えるように配慮されている。

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン