読者です 読者をやめる 読者になる 読者になる

NVMe のおかげで IO がボトルネックの時代が終わりそうです

Storage

先日のエントリでも紹介しましたが、NVMe という凄いやつがいます。少しずつ浸透しつつはあるもののまだ一般的な知名度は低いようなのでひとつ紹介しておきましょう。

NVMe とはストレージとコンピューターをつなぐインターフェースのことです。この NVMe のおかげで、SSD が真価を発揮できるようになりました。


ストレージの性能について。まず、SSDはHDDに比べて圧倒的に高速です。IOPS、つまり秒間あたりに発行できるIOの命令数的が性能の目安になるわけですが、HDD は数百 IOPS でした。一方 SSD は 1 万 IOPS 程度、ものによっては 10 万 IOPS 近い性能を出せるものもあります。つまり IOPS 換算で言えば SSD は HDD の数十から百倍程度高速と言えます。

それでもSSDは性能を発揮できていませんでした。

原因は接続方式にあります。長らく使われている SATA こと シリアル ATA 方式では転送速度の問題で、SSD の全性能を発揮する前に転送速度の上限が来てしまっていたのです。最新の SATA を用いても転送速度の限界はおよそ 600MB/s. もちろん十分速いと言えるのですがまだ秘めたるパワーがあるのです。そこで登場したのが NVMe でした。

NVMe とは、IDESATA と同じく、ストレージとマシン間のインターフェースです。IDE(ATA) や SATA と何が違うのかというと、その帯域。IDE では最大 133MB/s でした。 当初の SATA で少し上限アップして 150MB/s, 最新の SATA III では 600MB/s. これが NVMe だと 4000MB/s まで一気に上昇します。この NVMe を用いて、例えば Intel SSD 750 では 2400MB/s, IOPS にして 44 万 IOPS という圧倒的なスペックを実現してます。
http://www.intel.co.jp/content/www/jp/ja/solid-state-drives/solid-state-drives-750-series.html

幸か不幸か、この 4000MB/s の帯域すら早速食い尽くしてしまいそうです。NVMe では PCIe を複数重ねて帯域を増やしていましたが、更に増やさなければもういっぱいいっぱいわけです。

伸びしろがまだあるとはいえ、現状の NVMe 接続の SSD でさえほぼ無敵と言えます。

我々プログラマはいつもいつも IO を減らすことに四苦八苦していました。IO は遅いからです。かの nippondanji も、MySQL が遅い原因は 99.99999% ストレージにあると言ってます。僕も下記のエントリで記したように、特にミドルウェアでは遅い原因は 99% ストレージにあるように思います。
再・Solr のパフォーマンスチューニング - にょきにょきブログ

でももうすぐ IO が遅い時代も終わりを迎えそうです。

HDD と比較すると NVMe 接続の SSD は約 1000 倍もの IOPS を捌けることになります。単純計算しすぎてはいますが、猫も杓子もディスクアレイ組んで IOPS 稼ぐこの時代、1000 台のディスクアレイはちょっと聞いたことがありません。

4000MB/s の帯域を食いつぶすほどの IO を捌けるアプリケーションがこの世の中に一体どれだけあるのでしょう?毎秒ほぼ DVD 一枚分のデータを書き込むほどの性能が必要なシステムがこの世の中に一体どれだけあるのでしょう?もちろんあるにはありますが、全体から見れば微々たるものと言わざるをえません。それだけ圧倒的な性能なのです。

しかも NVMe SSD は安価で、上記 Intel 750, 1.2TB モデルは 2015 年 10 月現在で約 15 万円。性能を考えたら激安です。僕は来年中には一気に NVMe が普及するのではと思います。


欠点はほぼ無いですが、1つ挙げるとしたら、Samsung 製の NVMe SSD はまだ安定していない感があるというところでしょうか。弊社で SamsungSSD を検証していたところ、ファームウェア更新後起動しなくなりました。しかも再現性ありです。Samsung 製 NVMe SSD はまだ安定していない、ということでやはり安心と信頼の Intel を使うべき、という評価になっているところです。

ちなみに、「Fusion-io は甘え」とまで言われた Fusion-io Drive は 最高 110 万 IOPS 出せます。値段は非公表なので不明ですが、昔聞いた話では 100 万円から 300 万円程度の価格帯だったように思います。その後安価になってるだろうとはいえ、Intel 750 が 10 万円と考えると割高ですね。


できればあと数年程度で IO に振り回される時代が終わって欲しいものです。今まで苦労してキャッシュしたり圧縮したりして IO を減らすことに注力していましたが、きっともうすぐ解放され、アプリケーションの本質的な部分に注力できるようになる時代が来るかもしれません。高速化のための複雑なコードともおさらばできる日がやって来て、コードがシンプルになり、その分バグも減るでしょう。でも今までも IOPS が増えるたびにその分を使い尽くしていたので、たとえ 10GB/s 捌けようが 100GB/s 捌けようが、人間は何かしら用途を思いついて使い尽くしてしまう性分かもしれないですね。

もし IO がボトルネックの時代が終わったら、その次にボトルネックになるのがメモリなのか CPU なのかネットワークなのかそれともそれ以外なのか今は想像すらできません。GPU が当たり前の時代になっていたりするんでしょうか。
今から楽しみです。

IT技術者なら知っておきたい ストレージの原則と技術

IT技術者なら知っておきたい ストレージの原則と技術