このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。
メモリ事業部の Tomo です。
私は普段、NAND FLASH を使用した SSD の開発に携わっているのですが、昨年、 SSD の中の人にとっては驚異的な製品、3D Xpoint を使用した「 Intel Optane SSD 900P 」が発売されました。メモリ事業部としては発売と同時に購入し、驚異的な数字を目の当たりにしていたのですが、今回はそのポイントについて記事を書かせていただきます。
Crystal Disk Mark や PC Mark 系で測定が手っ取り早いですが、今回は 3D Xpoint の驚異的な点の Latency について語りたいと思うので自分で作った測定ソフトをベースにしたいと思います。
【測定環境】
・OS:Windows10
・Drive:2nd Drive(Boot Drive ではない)
・ファイルシステム:NTFS(ファイルベースでのWrite/Read性能測定)
※ ファイルシステム経由で測定する理由は、ファイルシステムの情報更新が入り、適度にランダムアクセスが発生するので私が好きなだけ
【測定方法】
0. クイックフォーマット(大事)
1. 下地:32GB のファイルを作成
2. 下地に対し、Write 性能測定(8MB 単位のシーケンシャル)
3. 下地に対し、Read 性能測定(8MB 単位のシーケンシャル)
※ CreateFile 時には FILE_FLAG_NO_BUFFERING を指定し、ホスト側のキャッシュは使用しない
※ 時間の測定は QueryPerformanceCounter を使用
測定結果は下図の通りです。
SSD マニアがパッと見ると、これはヤバいと感じることができます。(横軸はWrite/Read回数)
ヤバさは読者の方には伝わらないと思うので、NAND FLASH を使用している S社の SSD と比較してみたいと思います。結果は下図の通りです。
特徴としては、定期的に Latency が伸びていることが分かります。(特に Write)
ここが、大きく NAND FLASH を使用した製品と、3D Xpoint を使用した製品の違う点です。
NAND FLASH の特徴としては、
・「ブロック」という単位で 「Erase 」を行う
・「ページ」という単位で 「Program 」(書き込み)を行う
が基本動作です。
一度書いた場所には上書きはできず、消去しない限り Program をしてはいけません。(したらデータが壊れます) このフローについては、プロセスがどれだけ進化しようが、3次元化しようが、何年経とうが変わらない NAND FLASH を扱う上での大原則です。「ブロック」で Erase し、ブロックがいっぱいになるまで「ページ」という単位で Program を行い、ブロックがいっぱいになったら、別のブロックをまた Erase してページ単位で Program を行う、という繰り返しが NAND FLASH を使用している SSD では行われています。
また、SLC/MLC/TLC と呼ばれるNAND FLASH の種別によって様々ですが、「ブロック」という単位は、数百KB~数MB単位、「ページ」という単位は数KB ~ 数十KB で、「Erase/Program」にかかる時間は数百us~数msオーダーです。ホストからの要求に対して乗ってくる Latency は、こういった NAND FLASH の特徴に関する Latency も乗ってきます。
これを前提として、Latancy のグラフを見てみます。
S 社の SSD については、Latency が定期的に数ms 伸びている様子が伺えます。Write については、「ブロック」がいっぱいになったタイミングで、次の書き込みを行うためのブロックの Erase が発生している時間が乗ってきていると推測ができます。(Read の Latency は、おそらく ECC 訂正が入ったなどの影響と思いますが今回は扱いません)
一方、3D Xpoint 側は、Latency にほぼ変化がありません。これは、NAND FLASH のような制約はなく、ソフトウェア屋さんから見ると、RAM と同じ感覚で扱えるためです。この点が、NAND FLASH の SSD の中の人からすると非常に驚異的なポイントとなっています。
(しかし、低価格と大容量化は NAND FLASH の方が圧倒的に有利なのでコンスーマ市場では置き換えまでは当面は至らないと考えています)
我々は SSD の高速化も最大のミッションです。今回の記事では、NAND FLASH の Latency が見えている点に着目をしてみました。しかし、それ以外にも、
〇 SSD の内部処理において、NAND FLASH の持っている Latency をいかに隠すか
〇 NAND FLASH の様々な特徴に対応するためのソフトウェアをいかに高速化するか
・論物変換(FTL:Flash Translation Layer)
・ガーベージコレクション
・ウェアレベリング
〇 ファイルシステムにも影響受ける性能解析
などを日々行っています。
次回以降は、こういったところの一般的なお話や SSD の中の人の気持ちなども書いていければと思います。
NAND FLASHは世代がどんどん変わっていきますが、扱いもどんどん難しくなっており、ソフトウェアの力でいかに高速な製品に仕上げるかは非常に大きなポイントです。ハードウェア・リソースの制約も多数あり、ハード・CPU・NAND FLASH の性能を極限まで引き出すコードを書くのは非常に面白いです。私は SSD に携わって10年以上になりますが、何年やってもここの戦いは面白いです。ここの面白さとヤバさを語り始めるといくらでも語れるので、小分けで読み物を出していこうと思います。
それでは。
keisuke.kimura in Livox Mid-360をROS1/ROS2で動かしてみた
Sorry for the delay in replying. I have done SLAM (FAST_LIO) with Livox MID360, but for various reasons I have not be...
Miya in ウエハースケールエンジン向けSimulated Annealingを複数タイルによる並列化で実装しました
作成されたプロファイラがとても良さそうです :) ぜひ詳細を書いていただきたいです!...
Deivaprakash in Livox Mid-360をROS1/ROS2で動かしてみた
Hey guys myself deiva from India currently i am working in this Livox MID360 and eager to knwo whether you have done the...
岩崎システム設計 岩崎 満 in Alveo U50で10G Ethernetを試してみる
仕事の都合で、検索を行い、御社サイトにたどりつきました。 内容は大変参考になりま...
Prabuddhi Wariyapperuma in Livox Mid-360をROS1/ROS2で動かしてみた
This issue was sorted....