このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。
昨年、QLC NANDを採用したSSDがIntelとMicronから相次いで発売されました。(*1,*2)
QLC方式は記録密度は高いものの、アクセス速度や寿命はTLCより劣るとされています。(*3)
今回はCrucial P1の1TBを入手したので、QLC NANDのRead性能、特にレイテンシに大きく影響するtRを調べてみます。
SSDからデータをReadするときのシーケンスはおおよそ以下のようになります。
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くらいに伸びているようです。
QLC領域から4KiBのデータをReadした120usecの内訳を考えます。
上記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)の比較)
コンピュータビジョンセミナーvol.2 開催のお知らせ - ニュース一覧 - 株式会社フィックスターズ in Realizing Self-Driving Cars with General-Purpose Processors 日本語版
[…] バージョンアップに伴い、オンラインセミナーを開催します。 本セミナーでは、...
【Docker】NVIDIA SDK Managerでエラー無く環境構築する【Jetson】 | マサキノート in NVIDIA SDK Manager on Dockerで快適なJetsonライフ
[…] 参考:https://proc-cpuinfo.fixstars.com/2019/06/nvidia-sdk-manager-on-docker/ […]...
Windowsカーネルドライバを自作してWinDbgで解析してみる① - かえるのほんだな in Windowsデバイスドライバの基本動作を確認する (1)
[…] 参考:Windowsデバイスドライバの基本動作を確認する (1) - Fixstars Tech Blog /proc/cpuinfo ...
2021年版G検定チートシート | エビワークス in ニューラルネットの共通フォーマット対決! NNEF vs ONNX
[…] ONNX(オニキス):Open Neural Network Exchange formatフレームワーク間のモデル変換ツー...
YOSHIFUJI Naoki in CUDAデバイスメモリもスマートポインタで管理したい
ありがとうございます。別に型にこだわる必要がないので、ユニバーサル参照を受けるよ...