QLC SSDをSLC SSDに変換
(theoverclockingpage.com)- Crucial BX500のQLC NANDをMPToolsでpSLCモードに再構成し、容量を500GBから約120GBに減らす代わりに、耐久性と一部の性能を大幅に高めた実験
- 変換はSilicon Motion SM2259XT2コントローラとMicron N48R NANDの組み合わせに合わせたファームウェア・設定作業であり、失敗するとSSDの破損、保証無効、データ消去が発生する可能性がある
- 標準のQLC状態での計算上のTBWは120TBだったが、pSLCモードでは60,000 P/Eサイクル・120GB容量・WAF 1.8基準で4,000TB TBWまで増えると計算される
- 短いシーケンシャルベンチマークでは差は小さかったが、ランダム性能・レイテンシ・PCMark 10の生産性テスト・長時間書き込みではpSLCモードの差が明確だった
- 標準状態では約45GBのSLCキャッシュ後に平均50MB/s前後まで低下したが、pSLC変換後は120GB全体と繰り返し書き込みでも約498〜500MB/sを維持した
実験対象とリスク要因
- 実験対象は複数回テストしたCrucial BX500 SSD
- 手順自体はオーバークロックより安全だとしても、ファームウェアの書き込みを含むため注意が必要
- ファームウェアを書き込むとすべてのデータが削除されるため、バックアップが必要
- 変換を実行するとSSDの保証は無効になる
- 必要なツールはJmicron JMS578 Bridge ChipベースのSATA-USB 3.0アダプタと、SSD PCBのROM/Safe Mode端子をショートさせるためのクランプ
BX500のハードウェア構成
- コントローラはSilicon Motion SM2259XT2で、SM2259XTの派生モデル
- シングルコアコントローラ
- 32ビットARCアーキテクチャ
- 最大550MHzで動作可能
- このSSDでは437.5MHzで動作している
- SM2259XT2は最大2チャネルと、チャネルごとに最大8個のChip Enableをサポートし、interleavingにより最大16個のdieと通信できる
- 比較対象のSM2259XTは4チャネル・4個のC.E.構成で最大16個のdieをサポートする
- このSATA SSDはDRAM-Less構成で、Host Memory Bufferにも対応していない
NANDと標準動作特性
- 500GBモデルには「NY240」と表記されたNANDフラッシュが2基搭載されている
- デコードの結果、Micron MT29F2T08GELCEJ4-QU:C、N48R Media Grade NANDであることが確認された
- dieあたり1Tb、すなわち128GiB
- 176のデータレイヤーと合計195ゲート
- アレイ効率90.2%
- NANDフラッシュ1基あたり2個のdieが入っており、NANDあたり256GB、全体で約500GB構成となる
- NANDはコントローラと262.5MHz、すなわち525MT/sで通信する
- N48R dieは800MHz、すなわち1600MT/sまで動作可能だが、このSSDでははるかに低く設定されている
- 低い速度設定は、電力・発熱の削減、高速動作品質基準未達、低い耐久性の可能性、低価格NANDの供給などと関係している可能性がある
MPToolsベースの変換手順
- Silicon Motionコントローラ用の量産ツールMPToolsを使用する
- 使用したツールは「SMI SM2259XT2 MPTool FIMN48 V0304A FWV0303B0」で、コントローラとNANDフラッシュの両方に適合している必要がある
- まずSSDから既存パラメータを読み出して保存する必要がある
- Flash IO Drivingとその下位項目
- Flash Control Driving
- Flash DQS/Data Driving
- Control ODT
- Flash ODT
- Schmitt Window Trigger
- MPToolsのScanでSSDを検出し、「Ready (FW: M6CR061, MN48R)」項目で工場設定とコントローラ・NAND速度を確認する
- 公平な比較のため、コントローラとNANDの周波数は既存値のまま維持する
pSLCモード有効化設定
- 「Edit Config」でプロジェクト名とファームウェアバージョンタグを設定する
- 例のモデル名は「SSD SLC Test」
- 例のファームウェアバージョンは「SSD-SLC」
- Flash Control DrivingとFlash DQS/Data Drivingは既存値の66(hex) のまま維持する
- CPUとNAND周波数も既存の比較条件に合わせ、Output drivingは03Hにしておく
- MPToolsの
Setting.setファイルを編集してpSLC関連オプションを表示させる[Function]のENFWTAG=1をENFWTAG=0に変更[Option]にEnSLCMode=1を追加
- その後、MPToolsにForce SLC Modeオプションが表示される
- 実際に変換を行うには、ファームウェアフォルダ内のboot・初期化ファイルを特定ディレクトリへコピーする必要がある
- このファイル手順はSM2259XT2 + N48R NANDの組み合わせに合わせたもので、他のNANDではフォルダ名やファイル構成が異なる
- 一部のNANDモデルは100%互換ではない可能性があり、テストされたNANDはIntelとMicron NANDである
耐久性計算
- 耐久性計算にはWrite Amplification Factor、NAND Program/Erase Cycle、SSD容量が必要
- より精密な計算にはJEDEC JESD218A基準やWear-Leveling Efficiencyなどの追加パラメータが入る
- 標準のQLC状態のSSDはTBW 120TB、N48R Media Grade NANDのP/Eサイクル約900として計算される
- 標準状態のWAFは計算上3.75で、実テストでは約3.8に近かった
- pSLC状態ではNAND dieがデータシート基準で最大60,000 P/E cyclesに耐えられる
- pSLC変換後の容量は約0.12TB、すなわち120GBに減少する
- WAF 1.8基準で計算した結果、TBWは4,000TBとなる
- TBWは500GB QLC状態の120TBから120GB pSLC状態の4,000TBへ増加し、増加率は3333%以上となる
性能テスト環境
- OSはWindows 11 Pro 64-bit 23H2
- CPUはIntel Core i7-13700Kで、全コア5.7GHzに設定
- RAMは2×16GB DDR4-3200MHz CL16 Netac構成
- マザーボードはMSI Z790-P PRO WIFI D4、BIOSバージョンは7E06v18
- GPUはRTX 4060 Galax 1-Click OC
- OSドライブはSolidigm P44 Pro 2TB、テスト対象SSDはBX500「SLC-Test」として使用
- Windowsインデックス、アップデート、バックグラウンドアプリ、アンチウイルスはテスト変動を減らすため無効化された
- テストSSDは補助ドライブとして使用され、使用率0%状態と50%状態のテストが含まれた
- 電力テストはQuarch PPM QTL1999でidle、1時間書き込みテスト、平均消費電力を測定した
CrystalDiskMark結果
- シーケンシャルテストは2×1GiB、1MiBブロック、8 queues、1 thread構成
- ランダムテストは2×1GiB、4KiBブロック、1 queue、1/2/4/8/16 threads構成
- シーケンシャルテストでは差はほとんどなかった
- 標準のpSLCキャッシュだけでもSATA SSDの最大帯域幅とメーカー公称シーケンシャル速度に達していたため
- より長く重いベンチマークでは差が現れた
- レイテンシは大幅に減少した
- 標準状態ではidle後にNANDがQLC native modeで読み書きを開始し、SLCへ再プログラムされるまで遅延がある
- pSLCモードでは常にpSLC状態のため、レイテンシがより低い
- ランダム速度はシーケンシャル速度より差が大きかった
- QD1では読み取り速度が16%以上、書き込み速度が30%以上向上した
ATTO、3DMark、PCMark 10の結果
- ATTO Disk Benchmarkは512Bから8MiBまでのブロックサイズ、256MBファイルサイズ、Queue Depth 1・4でテストされた
- ATTOではpSLCモードSSDがすべてのブロックサイズで標準状態SSDを上回った
- QD1でも同じパターンが繰り返されたが、一部のブロックサイズではQD4より差が小さかった
- 3DMark Storage Benchmarkはゲーム読み込み、OBS 1080p 60FPS録画・配信、ゲームインストール、ゲームフォルダのファイル転送などを含む
- 3DMarkのような軽めの実環境でも性能差とレイテンシ差はあったが、日常使用で完全に体感できる水準とは限らない
- PCMark 10 Full System Drive Benchmarkは生産性中心で、書き込み比重が3DMarkより大きい
- PCMark 10では実使用差が明確で、性能差はほぼ2倍に近かった
Premiere Pro、起動、ゲーム読み込み
- Adobe Premiere Pro 2021テストは約16.5GB、4K解像度、120Mbpsビットレート、エフェクトの多いプロジェクトを編集可能状態まで開く時間を測定した
- Premiere Proのプロジェクト読み込みは主にシーケンシャル読み取りシナリオのため差はほとんどなく、実行間のばらつき程度に近かった
- Final Fantasy XIVベンチマークでゲーム読み込み時間を比較した
- ゲーム読み込みはDirectStorageとは異なるAPI制約のため、大きな差は感じにくい
- Windowsの起動も新しいシステム基準ではあるが、SSDに適用した機能を活用できず大きな差は出なかった
SLCキャッシュと長時間書き込み
- 現在、多くのSSDは保存領域の一部をSLC Cachingとして使用している
- MLC、TLC、QLC NANDの一部を、セルあたり1ビットを保存する領域として書き込み・読み取りバッファのように使う
- バッファが枯渇すると、コントローラがnative NAND領域へ書き込む
- IOmeterテストの結果、このSSDの標準pSLCキャッシュは動的で約45GBと見られる
- 標準状態ではキャッシュが尽きるまで平均約493MB/sを維持する
- 45GB書き込み後はfoldingプロセスに入り、QLC SSDの弱点が露呈する
- キャッシュ後の持続書き込み速度は平均約50MB/sまで低下する
- pSLC変換後は120GBの全容量を平均498MB/sで書き込んだ
- 500GBまで書いて容量を4回以上繰り返し上書きしても、ほぼ500MB/sを維持した
- pSLCキャッシュ、folding、native領域を合算した平均書き込み速度差はほぼ10倍水準だった
ファイルコピー、温度、電力
- ファイルコピーテストはRAM DiskからSSDへWindows 10 21H1 ISO 6.25GBとCSGOインストールフォルダ25.2GBをコピーした
- どちらのテストファイルも標準SSDのSLCキャッシュ45GBより小さく、現実的なコピーテストでは差はなかった
- より大きなファイルをテストしなかった理由は、RAM Diskに使えるメモリが32GBに制限されていたため
- 温度テストではSSDはそれほど熱くならず、センサーはNAND Flashセンサーと推定された
- 電力テストではpSLC変換後に効率が大きく向上した
- 標準のQLC状態は45GBキャッシュを大きく超えるテストで55MB/s未満の動作が長く続き、効率が低かった
- pSLCモードは自分の容量の2倍を書き込んでいる間も帯域幅が低下せず、消費電力もより低かった
- pSLCモードで消費電力が減った理由は、SLC NANDが2つの論理レベルだけを使うため、必要なthreshold voltageが低いから
- QLC NANDは16個の論理レベルを使うため、より高いthreshold voltageが必要
- idle状態でもpSLCモードの消費電力の方が低かった
結論
- 手順が正しく実行されなければSSDが破損する可能性があるため慎重さが必要
- pSLC変換の性能差はシナリオによって異なる
- 短いシーケンシャルベンチマーク、小さいファイルコピー、ゲーム読み込み、Windows起動では差が小さい
- ランダム性能、レイテンシ、生産性テスト、長時間書き込みでは差が大きい
- 最大の変化は耐久性で、計算上TBWが120TBから4,000TBへ増加する
- その代わり使用可能容量は500GBから約120GBに減少する
1件のコメント
Hacker Newsのコメント
低価格のDRAMレスSSDをpSLCモードで使うために、そこまで苦労する必要はありません
単に全容量の25〜33%だけを使うようにオーバープロビジョニングすればよいです
低価格のDRAMレスコントローラの多くは全ディスクキャッシュモードで動作し、まずすべての書き込みをpSLCとして行い、セルがいっぱいになってから一部のセルをTLC/QLCとして再編成して空き領域を確保します
TLCならディスクの1/3、QLCなら1/4のサイズのパーティションだけを作り、残りの空き領域をTRIM済みのまま絶対に使われないようにすれば、常にpSLCとして書き込まれます
気になるSSDがこの方式かどうかを確認するには、そのモデルの「HD Tune」全ディスク書き込みベンチマークを探せばよいです。最初の1/3〜1/4の区間は高速で、残りの区間で悲惨なほど遅くなるなら、全ディスクキャッシュモードと見てよいでしょう
ディスクの一部だけをパーティションにする方式は、160GB SCSI時代の「外周側セクタだけを使おう」という感じがします
ただし言われている通り、メーカーがファームウェアを別の形に調整している可能性はあり、この改造は全領域がSLCとして使われることを事実上保証してくれます
このアプローチは実際のSLCキャッシュが120GBあっても45GBまでしかうまく動作しないはずで、SLCが完全に使い切られる前にページングのための処理が始まるためです
ドライブのSLC容量の66%が不要なら、小さなパーティション方式のほうが簡単で安全ではあります
このハックは480GB SSDを120GB SSDに変えるようなものです
その代わり書き込み耐久性、つまり故障が予想されるまでに書き込めるデータ量が120TBから4000TBに増えるので、ログ保存用ディスクなどには非常に有用な妥協になり得ます
メーカーがこうしたオプションを提供しているのを見たことがありませんが、なぜやらないのか気になります
たとえばSwissbitのように、TLCやQLCフラッシュを使いながら、そのモードでは使わない製品を産業用として販売しています
その程度なら2倍くらいが予想されます
見たところ、初期値にはOEM保証値である120TBWを使い、最終値にはNANDのP/Eサイクル仕様を使っているようで怪しいです
見落としている点があるとすれば、pSLCモードがセルのプログラミング電圧を大きく下げてP/Eサイクルを劇的に増やす場合でしょうが、それは書き込み増幅係数に含まれるべきな気がします
このハックはデータ損失を引き起こす可能性があり、サポートもされませんが、TLCドライブはサポートされます
この方式は120GBで4000TBの書き込み耐久性を与えますが、200ドルあれば4TB TLCドライブで3000TBの書き込み耐久性を買えます
ほとんどのコンシューマ向けドライブは保持性を低くしている可能性が高いです
記事であまり強調されていない点は、耐久性とデータ保持性が非常に密接だということです
フラッシュセルはサイクルを重ねるほどリークが増える形で劣化し、そのためサイクルが多いほど電荷をより早く失います
SLCはQLCのように16個の状態を区別する代わりに2個の状態だけを区別すればよいので、同じサイクル数ならSLCモードのほうがデータをはるかに長く保持できます
つまりこの改造では極端な耐久性だけでなく保持性も得られるということです
メーカーは通常これを「Mサイクル後にN年」のように表記し、初期のSLCは100Kサイクル後10年と評価されていました。このQLCはQLCモードでは900サイクル後1年、SLCモードでは60Kサイクル後1年かもしれません
ブロックを実際にそこまで多く循環させないなら、保持性はずっと高くなるはずです
ファームウェアがSLCモードのブロックにもQLCに必要なより強力な誤り訂正コードをそのまま使うのかは分かりませんが、そうであれば信頼性もさらに上がります
約10年前、ベンチマーク用に最終生産分に近いFusionIO SLCカードを何枚か入手したことがあります
ソフトウェアは顧客が容量を増やして使いたがっていたインメモリデータベースで、文字通りFusionカードをスワップとしてだけ使っていました
データを数分ロードするとカーネルが安定し、本当にうまく動きました
500ドルのコンピュータで数十億レコードに対して秒間数百万トランザクションが出て、カードは私の車より高価でした
今なら絶対にそんなことはしませんが、非常に印象的な機材でした
アプリのかなりの部分を単一のPostgresデータベースが支えていて、水平スケーリングプロジェクトを始めようとしていましたが、大した成果はありませんでした。複雑で古いコードベースでパーティショニングは難しいと分かりました
たまたまFusionIOカードが入り、最も安い2TBカードでpgbenchの読み取りQPSが5,000程度から300kに跳ね上がりました
それ以来、垂直スケーリングは思ったよりずっと現実的だと見るようになりました。ハードウェアは私たちが思うよりはるかに多くの仕事をこなせます
小さなランダムI/Oが多く、負荷に耐えられるか常にぎりぎりでした
実験としてノートPCドライブのフォームファクタの600GB Intel SSDを送り、セカンダリノードを落としてからSSDを取り付け、再び起動しました
DRBDでアレイを同期した後、プライマリノードをSSDノードへフェイルオーバーし、SSDを論理ボリュームに追加してから
pvmoveで8台ディスクアレイのブロックをSSDへ移しました数時間にわたって負荷が着実に下がり、最終的にはほぼ消えました
手のひらに楽に収まるもの1つで、3.5インチの10Kディスク8台を置き換えるのは面白かったです
組み込み機器で eMMC を使っているなら、これもおすすめ
Linux システムでは
mmc-utilsのmmcコマンドでデバイスを pSLC モードに設定できるU-Boot でも可能だが、コマンドは少し難解。一度しかプログラムできないため、設定すると元に戻せない
量産数量であれば、プログラミング業者がこの設定や他の eMMC 設定を事前に構成してくれることもある
こういう バス転送レートにまで踏み込む分析 がもっと一般的になってほしい
すべての SSD について、重要な IC のモデル名、動作クロック周波数、IC 間のバス幅と動作速度を書いたブロック図があるとよい
一部の Kingston SSD は、メーカー提供のソフトウェアツールで オーバープロビジョニング を管理できる
つまり容量と耐久性のトレードオフを自分で選べる
たとえばオーバープロビジョニングを 80% に設定すると、QLC 容量の 80% を予備領域として確保し、残りの 20% も依然として QLC モードで使うはず
SLC の 20% をオーバープロビジョニングした SLC のように使える、と認識するわけではないと思う
メーカーがドライバ設定のような形で SSD を SLC に落として使う方法 を提供してくれるとよい
自分で SSD を作るか、SoC の余ったピンにフラッシュを直接接続するなら、そのようにプログラムできる
需要が十分にあれば、NVMe にこれを提供するよう拡張することも可能に見える
そういう機能ができたとしても、Windows 用のドライバ設定アプリがオープンソースで公開されることはないだろう
これはハードウェアレベルの違いだと思っていたので驚いた
それでも TLC や QLC をサポートしていても、どれでも SLC を実装することは可能だと思う
今自分のコンピュータに入っている Silicon Power の NVMe SSD も、書き込みには SLC を使い、後でアイドル時間にそのデータを TLC に移しているように見える
NAND を SLC モードで動かすのはこうしたドライブの機能で、「SLC キャッシュ」と呼ばれる
しかしそれだけでは、読み書きが TLC よりずっと速い理由は説明できない
たとえば DRAM のようにコンデンサの電荷でデータを保存するなら、R-2R ラダー DAC で値を書き込み、フラッシュ ADC で値を読む、という想像ができる。その場合、ノイズなどを無視すれば、セルあたりの有効レベル数による速度差はないはず
pSLC モードが速い理由は、フラッシュがプログラムされ読み出される方式、そして フラッシュメモリのアナログ的特性 にあるように見える
DRAM のように値の保存に電荷を使うが、単純なコンデンサではなく二重 MOSFET ゲートに保存される
電荷量はトランジスタの有効しきい値電圧を変え、読み出し時にはトランジスタがいつ導通し始めるかを見るために複数の電圧をかける必要がある
セルをプログラムするときは、目的のビットパターンに対応するしきい値電圧になるよう、一定量の電荷を注入しなければならない。電荷は注入しかできないため、入れすぎないよう短いパルスを何度も与え、必要な水準に達したかを読み出しサイクルで確認する工程を繰り返す
そのためセルあたりのレベルが多いほど、より短いパルスとより多くの読み出しサイクルが必要になる
多値セルを単一レベルモードでプログラムすれば、より大きな電荷注入を一度行うだけでも十分で、読み出し時も単一の基準で導通するかどうかを見ればよい
要するに pSLC は多値セル自体を変える必要はないが、そのセルをプログラムし読み出す方法は変える必要がある。したがって関連回路がある程度異なる必要がある可能性が高く、純粋なファームウェアだけで実装できるものではないだろう
https://en.wikipedia.org/wiki/Flash_memory#Floating-gate_MOS...
https://dr.ntu.edu.sg/bitstream/10356/80559/1/Read%20and%20w...
https://people.engr.tamu.edu/ajiang/CellProgram.pdf
http://nyx.skku.ac.kr/publications/papers/ComboFTL.pdf
すでに消耗した SSD の寿命を延ばすのにも使えるのか気になる
中国のどこかで、そういう SSD を持ってきて再フラッシュし、「新品」として売るビジネスがあるかもしれない
250°C に長時間さらすか、より高温の 800°C で短時間処理する方式
https://m.hexus.net/tech/news/storage/48893-making-flash-mem...
https://m.youtube.com/watch%3Fv%3DH4waJBeENVQ&sa=U&ved=2ahUK...