SLCキャッシュを上手く使う方法(1/4)

SLCキャッシュを上手く使う方法(1/4)

おことわり

 この記事は、2024年2月にQiitaに投稿した記事を加筆修正したものです。

 また、この記事のオリジナルは日本語で書かれています。記事が日本語以外の言語で表示されている場合、それは機械翻訳の結果です。当社は機械翻訳の精度に責任を負いません。

はじめに

 NANDフラッシュメモリを不揮発性記憶媒体として使用するSolid State Drive(以降SSDと記載)は、SSDコントローラが様々な技術を用いてNANDフラッシュメモリの特性を上手く隠蔽しながら、また時に上手く利用しながら、「データを読み書きする」というストレージ(記憶装置)の機能を実現しています。

 SSDが普及するにしたがい、従来ストレージで実現してきた機能をSSDではどのように実現したら良いのか、またSSDに特有の機能をどう使いこなせば良いのか、というノウハウが求められるようになりました。

 そこで今回からの記事では、近年のSSDの性能を語る時に欠かせない「SLCキャッシュ」について、寿命や信頼性の観点も含めてまとめます。

まとめ

  • SLCキャッシュの容量は固定もしくは動的に確保する方式が主流
  • SLCキャッシュの容量が大きければその効果も大きく、性能だけでなく寿命や信頼性にも効果を得られる場合がある
  • SLCキャッシュの容量は、ドライブの空き容量を確保する、容量クリッピングを行う、メーカー製ソフトウェアを使う、などで増やすことが可能

SLCキャッシュとその利用メリット

 今やクライアント向けおよびコンシューマ向けSSDでは当たり前のように搭載されているSLCキャッシュは、TLCやQLCなどの多値記録可能なNANDフラッシュメモリを2値記録(SLC)として使用し、多値記録時と2値記録時の読み書きレイテンシ差を利用してキャッシュを実現する機能です。技術的な詳細は別記事にまとめましたのでそちらをご参照ください。

 ホストからの書き込みをSLCキャッシュで吸収できる、ホストから書き込まれるデータのサイズと比較してSLCキャッシュから追い出されるデータのサイズが小さい、などワークロードに依存しますが、SLCキャッシュを利用することで以下のメリットを得られます。

  1. 高い読み書き性能の実現
  2. SSDの寿命消費速度緩和
  3. 多値記録時よりも高いデータ信頼性

 クライアント向けおよびコンシューマ向けSSDでは上記1と2が製品仕様上とても重要であるため、SLCキャッシュが搭載されています。

SLCキャッシュの制御方式

 本題に入る前に「SLCキャッシュの制御方式」についてまとめます。なぜなら、SLCキャッシュは制御方式によりその挙動が大きく変わるため、効果を最大限に引き出すには「制御方式に合わせた使いかた」が必要だからです。

 SLCキャッシュの挙動を特徴づける項目には大きく4つあります。それは、容量、データ、追い出し処理の契機、そして追い出しアルゴリズム、です。

 なお、この記事では代表的な項目を示しています。ここに示した項目や方式以外にも、各メーカーおよび製品に特有の項目の存在や方式の実装が考えられます。その場合、SLCキャッシュの特性も変化します。

項目代表的な制御方式概要
容量静的静的に容量を確保して使用
動的データ量に応じて容量を増減
記録データなんでも区別なし
小サイズのみ一定サイズ未満
特定データのみなんらかの法則で決定
追い出し契機容量(残)容量のみで判断
アイドル時アイドル時に積極的に実施
追い出しアルゴリズムLeast Recently Used (LRU)アクセス頻度が少ない順
First-In-First-Out (FIFO)記録された時刻が古い順
表1:SLCキャッシュの挙動を特徴づける項目と代表的な制御方式

 今回の記事では、上記の表1に記載した項目のうち「容量」について、方式の内容とSLCキャッシュを上手く使う方法をまとめます。

SLCキャッシュの容量制御方式

 SLCキャッシュの容量の制御方式には主に静的方式と動的方式があります。

 静的方式は、例えばOver Provisioning (OP)から一定のサイズを常に(=静的に)SLCキャッシュに割り当てる方式です(図1)。OPはあくまで余剰領域ですので(別記事参照)、容量をあまり大きくできません。

図1:静的容量方式のSLCキャッシュ(動作イメージ)

 SLCキャッシュにデータを記録していき容量分たまると(図1 (1)から(3)まで)、データの追い出しを実行してSLCキャッシュの空きを作ります(図1 (4))。追い出されたデータは多値記録で記録されます。

 この図1のSSDが搭載するNANDフラッシュメモリをTLC NANDだと仮定し、SLCキャッシュにOPから21 GB分を割り当てたとすると、SLCキャッシュに記録できる実データサイズは最大でもその1/3の7 GBです。SLCキャッシュのサイズが大きくならないことは、逆に管理しやすくなるなどのメリットにもなり得ます。

 これに対して動的方式は、ユーザ領域の空きを「動的に」SLCキャッシュに割り当てる方式です。ドライブの空き容量が大きいと、その分だけSLCキャッシュを大きくできます。逆に、ドライブの空き容量が小さいとSLCキャッシュに割ける容量が小さくなります。「最大容量」は製品容量の1/3(TLC NANDの場合)や1/4(QLC NANDの場合)です。

図2:動的容量方式のSLCキャッシュ(動作イメージ)

 静的方式とは容量確保方法が異なるのみで動作はほぼ同じです。SLCキャッシュにデータを記録していき最大容量分たまると(図2 (1)から(3)まで)、データの追い出しを実行してSLCキャッシュの空きを作ります(図2 (4))。追い出されたデータは多値記録で記録されます。ドライブの空き容量に応じてSLCキャッシュの最大容量を段階的に決定するなど、製品により挙動には違いがあります。

 一般的に、ドライブの空き容量が多い時は動的方式のほうがSLCキャッシュの(最大)容量をより大きくできるためSLCキャッシュの高い性能を長い期間得ることができます。一方、ドライブの空き容量が小さい時は静的と動的のどちらでも同じような性能になることが予想されます。

容量の視点でSLCキャッシュを上手く使うには

 「容量」の視点でSLCキャッシュを上手く使うには、とにかく「SSDの空き容量を十分に確保する」ことが重要です。特に動的容量方式の場合は空き容量が大きければ大きいほどSLCキャッシュを「伸ばす」ことができます。

 これが、私が「SSDはできるだけ容量の大きい製品がオススメ」と言う理由です。 ドライブの空き容量は、例えばWindowsであればドライブのプロパティで確認可能です。

 一概に「これだけ容量を確保しておけばよい」という値や割合はありませんが、空き容量はこまめにチェックしたほうが良いです。

 また静的容量方式の場合、OPを大きくするとSLCキャッシュのサイズを大きくできる可能性があります。

 具体的には、ユーザが使える容量を小さくすることでOPのサイズを大きくしてSLCキャッシュに割り当て可能な容量を増やす、というものです。例えば「容量1 TBのSSDを容量800 GBに減らすことで200 GBをOPに回す」というものです。ただし、OPを増やしてもSLCキャッシュに使われる容量が増えるとは限りません(製品依存)。

図3:容量クリッピングによるSLCキャッシュサイズ増加イメージ

 この方法はハードディスクドライブ(HDD)の時代から使われてきたものであり、「容量クリッピング(capacity clipping)」などと呼ばれます。HDDではこの方法を、アクセスに時間がかかるディスク内周部がデータの記録に使われないようにする目的などで使用しています。

 このOPサイズを増やす方法はドライブの空き容量を増やすことにも繋がりますので、静的容量方式だけでなく動的容量方式でも効果があります。

 一部のSSDはメーカーが配布するソフトウェアによりOPサイズの設定が可能です。

 そしてSLCキャッシュの容量が(だいたいでも)わかる場合、一度に書き込むデータのサイズをSLCキャッシュの容量程度に抑える、頻繁に書き換えるデータのサイズをSLCキャッシュの容量程度に抑える、などの工夫をすると、冒頭で説明した「書き込みをSLCキャッシュで吸収」や「SLCキャッシュから追い出されるデータの容量削減」を実現しやすくなり、SLCキャッシュの効果を得やすくなります。

 これは一般的なキャッシュと同様に「なるべくデータがキャッシュに載るようにする」という工夫をSLCキャッシュで実現するためのものです。

SLCキャッシュサイズを増やすと寿命にも利点あり

 以上の通り、ドライブ容量を増やすなどしてSLCキャッシュとして使える容量を増やすことで、SLCキャッシュをより上手く活用できます。

 SLCキャッシュのメリットとしてわかりやすいのは高い性能ですが、SLCキャッシュとして使える容量を増やすことで製品寿命や信頼性の視点でもメリットがあります。

 SLCキャッシュをライトバックキャッシュとして構成しSLCキャッシュ内で書き込みの多くを吸収できるようにすると、結果的にTLCやQLCなど書き換え回数制約がより厳しい多値記録の回数を減らすことができます。

NANDフラッシュメモリ(ブロック)の寿命や信頼性について各記録方法(2値記録と多値記録)が独立に寄与するとは限りませんが、一般的に2値記憶のほうが寿命消費速度緩和やより高い信頼性を実現可能です。

 もちろんSSDは工業製品として製品仕様に記載された寿命や信頼性を満たすものが出荷されます。ただ、特定の使いかた専用というものではありません。一方で、製品の信頼性と直接結びつけて説明されることがあまりないSLCキャッシュという機能でも、その使いかたを使用状況に合わせて工夫することでドライブをより信頼性の高い状態で運用できます。これはユーザによる工夫の余地があるという点でも重要です。

 ただし、ベンチマーク結果で良く見られるように、SLCキャッシュの容量を使い果たすと性能は大きく低下します。実は、SLCキャッシュの容量を使い果たしてしまうと上記寿命や信頼性のメリットを得られないどころか逆に悪化する可能性すらあります。

 このため、SLCキャッシュが有効なSSDを使用する場合、SLCキャッシュの容量に合わせた使いかた、つまり以下の3つの工夫が重要です。

  1. 容量の大きいSSDを使うなどしてSLCキャッシュの容量を大きくする
  2. 一度に書き込むサイズをSLCキャッシュの容量以下に抑える
  3. 頻繁に書き換えるデータのサイズをSLCキャッシュの容量に抑える

おわりに

 この記事では、SSDをより良く使用するためのノウハウのひとつとして、SLCキャッシュの活用方法特に「容量」の視点で見た活用方法をまとめました。

 NANDフラッシュメモリを使用したSSDにおいて、高性能とTLCやQLC NANDフラッシュメモリの活用を両立するためには、SLCキャッシュは欠かせない存在です。このSLCキャッシュを上手く活用することで、その高性能と寿命を十分に引き出していただきたいと思います。

 次回は「記録データ」に焦点をあてて、SLCキャッシュの制御方式説明とSLCキャッシュを上手く活用する方法を説明する予定です。

他社商標について

 記事中には登録商標マークを明記しておりませんが、記事に掲載されている会社名および製品名等は一般に各社の商標または登録商標です。

記事内容について

 この記事の内容は、発表当時の情報です。予告なく変更されることがありますので、あらかじめご了承ください。