QLC NANDのtRを調べる

昨年、QLC NANDを採用したSSDがIntelとMicronから相次いで発売されました。(*1*2

QLC方式は記録密度は高いものの、アクセス速度や寿命はTLCより劣るとされています。(*3

今回はCrucial P1の1TBを入手したので、QLC NANDのRead性能、特にレイテンシに大きく影響するtRを調べてみます。

tRとは

SSDからデータをReadするときのシーケンスはおおよそ以下のようになります。

  1. Host機器がReadコマンドをSSDへ送信する
  2. SSDコントローラがRead先アドレスを物理アドレスに変換する
  3. NANDにRead要求を送信する
  4. NANDがデータをメモリセルからバッファに読み出す
  5. NAND内のバッファからSSDコントローラ内にデータを転送する
  6. データのエラーを訂正
  7. データをHost機器へ転送

tRというのは、4番のNANDがメモリセルからデータを読み出すときのレイテンシで、Readアクセス時間の多くを占めており、特にRandom Read性能に大きな影響を与えます。(*4

調べ方

QD=1のRandom Readを流すと、おおよそ上記の1-7のとおりにRead処理が実行されると思うので、その応答時間からtRを推測してみます。

(Sequential Readにしてしまうと、SSDがReadコマンド受信前に先のアドレスのデータを予めReadするようなプリフェッチが働く可能性があり、正確な応答時間を調べられません)

Crucial P1も最近のSSDのようにSLCキャッシュ機能があるため、WriteしたデータをすぐにReadしてしまうとSLC領域からReadされ、QLCの性能を見ることができません。よって、1GiBずつ追記していき、都度先頭1GiBのLBA範囲をRandomにReadする方法を試しました。先頭1GiB分のデータがSLCキャッシュにある間はReadコマンドのレイテンシが短く、追記していくといずれQLC領域にデータが移動され、同じ先頭1GiBのデータでもReadレイテンシが長くなるはずです。

計測

Ubuntu 18.04のマシンにCrucial P1を接続、fio-3.1でレイテンシを測定しました。

横軸は合計Write量、縦軸はそのとき先頭1GiB範囲をQD=1 4KiB Random Readしたときの平均レイテンシです。

Readは毎回同じ先頭1GiB分のLBA範囲をReadしているのですが、Write量が30GiBを超えたあたりで急に遅くなっているのがわかります。

先頭1GiBのデータがSLCキャッシュに載っている間は60usecくらいのレイテンシですが、30GiBほど WriteするとSLCキャッシュからQLC領域にデータが追い出され、Readレイテンシが120usecくらいに伸びているようです。

tRを推測

QLC領域から4KiBのデータをReadした120usecの内訳を考えます。

  1. Host機器がReadコマンドをSSDへ送信する
  2. SSDコントローラがRead先アドレスを物理アドレスに変換する
  3. NANDにRead要求を送信する
  4. NANDがデータをメモリセルからバッファに読み出す
  5. NAND内のバッファからSSDコントローラ内にデータを転送する
  6. データのエラーを訂正
  7. データをHost機器へ転送

上記Readシーケンスの1番や3番のような、コマンド送信レイテンシはtRやデータ転送に比べて時間が短く、ここでは無視します。

2番のRead先アドレスを物理アドレスに変換する処理時間ですが、Crucial P1はDRAMを1GB積んでおり、アドレス変換テーブルを大量にDRAMに展開できているはずで、アドレス変換処理の時間も今回は無視してしまいましょう。

よって4-7番の処理の合計が120usecだと仮定します。

7番のSSDからHostへの転送速度は、Crucial P1に載っているコントローラ「SM2263EN」の最大Read性能 2400MB/s が出せると仮定すると4KiBあたり約1.7usecとなります。(Gen3 x4ならもっと速いかもしれませんが)

5, 6番のNANDからSSD内バッファにデータを転送し、訂正する処理時間ですが、Crucial P1はSeq.Read性能が2000MB/sで、「SM22263EN」コントローラは4CH構成なので、1CHあたり500MB/sと仮定すると4KiBあたり約8.2usecです。

以上から5, 6, 7の処理にざっくり10usecくらいかかっているとすると、計測したレイテンシから10usec引いた時間がtRに相当し、SLC tRは 50 usec, QLC tRは 110 usecくらいだと思われます。Samsung PM963のVNANDはtRが45usecらしいので(*4)、P1のQLC NANDはReadのレイテンシだけ見ると大分遅いようですね。

まとめ

QLC NANDのReadレイテンシだけを見ると、今までのNANDよりかなり遅いようですが、QLCのデメリットをSSDコントローラ側でカバーするため、SLCキャッシュをはじめ、さまざまな対策がSSD内部に施されていると思われます。昨年のFlash Memory Summitでも、Micronの方がQLC向けのFTLに関して発表されています。(*5

NANDの記録密度が上がるにつれ、それを活かすSSDコントローラの重要性がますます上がってきました。フィックスターズでも以前からフラッシュメモリ関連のプロジェクトを手がけています。低レイヤ技術の粋を尽くして、CPUやNANDの性能を限界まで引き出した製品開発に興味がある方、ぜひ一緒に働きましょう!

*1 QLC NAND採用のNVMeモデルはゲーマーの選択肢になり得るのか

*2 Micronが投入したQLC NAND採用NVMe SSD「Crucial P1」の性能をチェック

*3 QLC技術を駆使する超大容量NANDフラッシュの性能向上技術

*4 Samsungの高速SSD技術「Z-SSD」と専用フラッシュ技術「Z-NAND」の正体(SSDにおける読み出し遅延時間(Total Read Latency)の比較)

*5 QLC and Mixed Mode SSDs Require Deep FTL-Tuning

Tags:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください