
書き込み増幅(WA )とは、フラッシュメモリやソリッドステートドライブ(SSD)に関連する望ましくない現象で、ストレージメディアに物理的に書き込まれる実際の情報量が、論理的に書き込まれる予定の情報量の何倍にもなる現象です。
フラッシュメモリは書き換える前に消去する必要があり、消去操作の粒度は書き込み操作に比べてはるかに粗いため、[ a ]これらの操作を実行するプロセスでは、ユーザーデータとメタデータが複数回移動(または書き換え)されます。したがって、一部のデータを書き換えるには、既に使用されているフラッシュメモリの一部を読み取り、更新し、新しい場所に書き込む必要があり、さらに、新しい場所が以前に使用されていた場合は、最初にその場所を消去する必要があります。フラッシュメモリの動作方法により、新しいデータの量によって実際に必要とされるよりもはるかに大きなフラッシュメモリの領域を消去して書き換える必要があります。この乗算効果により、SSD の寿命中に必要となる書き込み回数が増加し、SSD が確実に動作できる時間が短くなります。書き込みが増加すると、フラッシュメモリへの帯域幅も消費され、SSD への書き込みパフォーマンスが低下します。 [ 1 ] [ 3 ] SSD の WA には多くの要因が影響します。ユーザーが制御できるものもあれば、SSD に書き込まれるデータと SSD の使用に直接起因するものもあります。
IntelとSiliconSystems (2009年にWestern Digitalに買収)は、2008年の論文や出版物で書き込み増幅という用語を使用しました。[ 4 ] WAは通常、フラッシュメモリにコミットされた書き込みとホストシステムからの書き込みの比率で測定されます。圧縮なしでは、WAは1を下回ることはありません。SandForceは圧縮を使用して、書き込み増幅0.5を達成したと主張しており、[ 5 ] SF-2281コントローラでは最良の場合で0.14という低い値になっています。[ 6 ]

フラッシュメモリの動作特性上、ハードディスクドライブのようにデータを直接上書きすることはできません。SSDにデータが最初に書き込まれるとき、すべてのセルは消去された状態から始まるため、ページ単位(多くの場合4~8キロバイト(KB))でデータを直接書き込むことができます。 (サイズ)。SSD上のSSD コントローラは、フラッシュ メモリを管理し、ホスト システムとインターフェースします。論理ブロック アドレス指定(LBA) と呼ばれる論理から物理へのマッピング システムを使用しており、これはフラッシュ変換レイヤー(FTL) の一部です。[ 7 ]新しいデータが既に書き込まれた古いデータを置き換える場合、SSD コントローラは新しいデータを新しい場所に書き込み、論理マッピングを更新して新しい物理場所を指すようにします。以前の場所のデータは無効になり、その場所に再度書き込む前に消去する必要があります。[ 1 ] [ 8 ]
フラッシュメモリは、限られた回数しかプログラムおよび消去できません。これは、フラッシュメモリの寿命中に維持できる最大プログラム/消去 サイクル数(P/Eサイクル)と呼ばれることがよくあります。より高い性能と長い耐久性を実現するために設計されたシングルレベルセル(SLC)フラッシュは、通常50,000~100,000サイクルで動作します。2011年現在 マルチレベルセル(MLC)フラッシュは、低コストアプリケーション向けに設計されており、サイクルカウントが通常3,000~5,000と大幅に削減されています。2013年以降、トリプルレベルセル(TLC)(例:3D NAND)フラッシュが利用可能になり、サイクルカウントは1,000プログラム消去(P/E)サイクルまで低下しました。書き込み増幅率が低い方が望ましいのは、フラッシュメモリ上のP/Eサイクルの数が減り 、SSDの寿命が延びるためです。[ 1 ]フラッシュメモリの摩耗は、I/O速度の低下など、パフォーマンスの低下を引き起こす可能性もあります。
書き込み増幅は、この用語が定義される前から常にSSDに存在していましたが、2008年にIntel [ 4 ] [ 9 ]とSiliconSystemsの両社が論文や出版物でこの用語を使い始めました。[ 10 ]すべてのSSDには書き込み増幅値があり、これは現在書き込まれているデータと以前にSSDに書き込まれたデータの両方に基づいています。特定のSSDの値を正確に測定するには、ドライブが安定した状態に達するまで、選択したテストを十分な時間実行する必要があります。[ 3 ]
SSDの書き込み増幅率を計算する簡単な式は次のとおりです。[ 1 ] [ 11 ] [ 12 ]
計算に使用される2つの量は、 SMART統計(ATA F7/F8; [ 13 ] ATA F1/F9)を介して取得できます。
SSD の書き込み増幅率には多くの要因が影響します。以下の表は、主な要因と、それらが書き込み増幅率にどのように影響するかを示しています。可変の要因については、表に正の相関関係か負の相関関係かを示します。たとえば、オーバープロビジョニングの量が増加すると、書き込み増幅率は減少します (負の相関関係)。要因がトグル (有効または無効) 機能である場合は、正または負の相関関係があります。[ 1 ] [ 7 ] [ 14 ]

データは、ページと呼ばれる単位(複数のセルで構成される)でフラッシュメモリに書き込まれます。ただし、メモリはブロックと呼ばれるより大きな単位(複数のページで構成される)でのみ消去できます。[ 2 ]ブロック内の一部のページのデータが不要になった場合(古いページとも呼ばれます)、そのブロック内の有効なデータを持つページのみが読み取られ、以前に消去された別の空のブロックに書き込まれます。[ 3 ]その後、古いデータを移動しなかったために残った空きページが新しいデータに使用できるようになります。これは、ガベージコレクション(GC)と呼ばれるプロセスです。 [ 1 ] [ 11 ]すべての SSD には何らかのレベルのガベージコレクションが含まれていますが、そのプロセスを実行するタイミングと速度は異なる場合があります。[ 11 ]ガベージコレクションは、SSD の書き込み増幅の大きな部分を占めています。[ 1 ] [ 11 ]
読み出しはフラッシュメモリの消去を必要としないため、一般的に書き込み増幅とは関連付けられていません。読み出し妨害エラーが発生する可能性は低いですが、そのブロック内のデータは読み取られて書き換えられますが、これはドライブの書き込み増幅に実質的な影響を与えません。[ 16 ]
ガベージコレクションには、バッファフラッシュ(SLCバッファまたはDRAMバッファ)やフラッシュメモリのリフレッシュなどの他の操作も含まれています。[ 17 ]
ガベージコレクションのプロセスでは、フラッシュメモリへのデータの読み書きが行われます。つまり、ホストからの新しい書き込みでは、まずブロック全体を読み取り、有効なデータが含まれているブロックの部分を書き込み、次に新しいデータを書き込む必要があります。これにより、システムのパフォーマンスが大幅に低下する可能性があります。[ 18 ]多くのSSDコントローラは、バックグラウンドガベージコレクション(BGC)を実装しています。これは、アイドルガベージコレクションまたはアイドルタイムガベージコレクション(ITGC)とも呼ばれ、コントローラはアイドルタイムを使用して、ホストが新しいデータを書き込む前にフラッシュメモリのブロックを統合します。これにより、デバイスのパフォーマンスを高く維持できます。[ 19 ]
コントローラが、絶対に必要になる前にすべての予備ブロックをバックグラウンドでガベージコレクションすれば、ホストから書き込まれた新しいデータは、事前にデータを移動することなく書き込むことができ、パフォーマンスをピーク速度で動作させることができます。トレードオフは、これらのデータブロックの一部は実際にはホストにとって不要であり、最終的には削除されるということですが、OS はコントローラにこの情報を伝えませんでした ( TRIMが導入されるまで)。その結果、間もなく削除されるデータはフラッシュメモリの別の場所に書き直され、書き込み増幅が増加します。OCZ の一部の SSD では、バックグラウンドのガベージコレクションは少数のブロックのみをクリアしてから停止し、過剰な書き込みの量を制限します。[ 11 ]もう 1 つの解決策は、ホストの書き込みと並行して必要な移動を実行できる効率的なガベージコレクション システムを用意することです。この解決策は、SSD がアイドル状態になることがほとんどない高書き込み環境でより効果的です。[ 20 ] SandForce SSD コントローラ[ 18 ]とViolin Memoryのシステムはこの機能を備えています。[ 14 ]
2010 年、一部のメーカー (特に Samsung) は、BGC の概念を拡張してSSD で使用されているファイルシステムを分析し、最近削除されたファイルと未分割領域を識別する SSD コントローラを導入しました。Samsung は、これによりTRIMをサポートしていないシステム (オペレーティングシステムと SATA コントローラ ハードウェア) でも同様のパフォーマンスが達成できると主張しました。Samsung の実装の動作は、NTFSファイルシステムを前提とし、それを必要とするようです。[ 21 ]この機能がこれらのメーカーから現在出荷されている SSD でまだ利用できるかどうかは不明です。これらのドライブがMBRと NTFSを使用して適切にフォーマットされていない場合、システム的なデータ破損が報告されています。
TRIM は、オペレーティングシステムが SSD に対して、ファイルの削除やボリュームのフォーマットの結果として、以前に保存されたデータのどのブロックが不要になったかを指示できるようにする SATA コマンドです。ファイルの上書きなど、OS によって LBA が置き換えられると、SSD は元の LBA が古くなった、または無効であるとマークできることを認識し、ガベージ コレクション中にそれらのブロックを保存しません。ユーザーまたはオペレーティングシステムがファイルを消去した場合 (単に一部を削除するのではなく)、ファイルは通常削除対象としてマークされますが、ディスク上の実際の内容は実際には消去されません。このため、SSD は以前にファイルが占有していた LBA を消去できることを知らないため、SSD はそのような LBA をガベージ コレクションに含め続けます。[ 22 ] [ 23 ] [ 24 ]
TRIM コマンドの導入により、Windows 7 [ 23 ] Mac OS (Snow Leopard、Lion、Mountain Lion の最新リリース、場合によってはパッチ適用済み) [ 25 ] FreeBSDバージョン8.1以降[ 26 ]およびLinux カーネル メインラインバージョン 2.6.33 以降のLinux [ 27 ]など、それをサポートするオペレーティングシステムではこの問題が解決されます。ファイルが完全に削除されたり、ドライブがフォーマットされたりすると、OS は有効なデータが含まれていない LBA とともに TRIM コマンドを送信します。これにより、SSD は使用中の LBA を消去して再利用できることを通知されます。これにより、ガベージ コレクション中に移動する必要のある LBA が削減されます。結果として、SSD の空き領域が増え、書き込み増幅率が低下し、パフォーマンスが向上します。[ 22 ] [ 23 ] [ 24 ]
TRIM コマンドには SSD のサポートも必要です。SSDのファームウェアがTRIM コマンドをサポートしていない場合、TRIM コマンドで受信した LBA は無効としてマークされず、ドライブはデータがまだ有効であると仮定してガベージ コレクションを続行します。OS がこれらの LBA に新しいデータを保存したときにのみ、SSD は元の LBA を無効としてマークします。[ 24 ]ドライブに TRIM サポートを組み込んでいない SSD メーカーは、ユーザーにファームウェアのアップグレードを提供するか、OS から無効データに関する情報を抽出して SSD を個別に TRIM する別のユーティリティを提供することができます。このメリットは、ユーザーがそのユーティリティを実行するたびにのみ実現されます。ユーザーは、このユーティリティを自動スケジュール タスクとしてバックグラウンドで定期的に実行するように設定できます。[ 18 ]
SSDがTRIMコマンドをサポートしているからといって、TRIMコマンド実行直後に最高速度で動作するとは限りません。TRIMコマンド実行後に解放される領域は、SSD全体にランダムに分散している可能性があります。これらの領域が統合されてパフォーマンスが向上するまでには、データの書き込みとガベージコレクションを複数回繰り返す必要があります。[ 24 ]
OSとSSDがTRIMコマンドをサポートするように構成されていても、他の条件によってはTRIMのメリットが得られない場合があります。2010年初頭の時点ではデータベースやRAIDシステムはまだTRIMに対応していないため、その情報をSSDに渡す方法がわかりません。そのような場合、OSが新しい書き込みにそれらのLBAを使用するまで、SSDはそれらのブロックを保存してガベージコレクションし続けます。[ 24 ]
TRIM コマンドの実際のメリットは、SSD の空きユーザー領域に依存します。SSD のユーザー容量が 100 GB で、ユーザーが実際に 95 GB のデータをドライブに保存した場合、TRIM 操作によって ガベージ コレクションとウェア レベリングのために追加される空き領域は 5 GB を超えることはありません。このような状況では、オーバー プロビジョニングの量を 5 GB 増やすことで、SSD は OS から TRIM コマンドが来るのを待つことなく常に 5 GB の空き領域を確保できるため、より安定したパフォーマンスを実現できます。[ 24 ]

オーバープロビジョニング(OP、over provisioning、overprovisioning と綴られることもあります)は、フラッシュメモリの物理容量と、オペレーティングシステム(OS)を通じてユーザーが利用できる論理容量との差です。SSD のガベージコレクション、ウェアレベリング、不良ブロックマッピング操作中に、オーバープロビジョニングによる追加スペースは、コントローラがフラッシュメモリに書き込む際の書き込み増幅率を低減するのに役立ちます。[ 4 ] [ 28 ] [ 29 ]オーバープロビジョニング領域は、FTLテーブルなどのファームウェアデータを格納するためにも使用されます。ミッドエンドおよびハイエンドのフラッシュ製品は通常、より大きなオーバープロビジョニング領域を備えています。オーバープロビジョニングは、ユーザーが利用できる容量に対する追加容量の割合として表されます。[ 30 ]
過剰供給は通常、次の3つの要因から生じます。
SSDコントローラは、SSD上の空きブロックをガベージコレクションとウェアレベリングに使用します。ユーザーデータが書き込まれていない(すでにTRIMされているか、そもそも書き込まれていない)ユーザー容量の部分は、オーバープロビジョニング領域と同じように見えます(ユーザーがSSDに新しいデータを保存するまで)。ユーザーがドライブの総ユーザー容量の半分だけを消費するデータを保存した場合、残りの半分のユーザー容量は、追加のオーバープロビジョニングのように見えます(システムがTRIMコマンドをサポートしている限り)。[ 24 ] [ 34 ]
フラッシュデバイス(通常はSSD )にDRAMバッファ(存在する場合)があると、FTLテーブルのキャッシュ、データ書き込みのバッファリング、およびガベージコレクションに使用できます。
ATA Secure Erase コマンドは、ドライブからすべてのユーザーデータを削除するように設計されています。暗号化機能が統合されていない SSD の場合、このコマンドはドライブを元の状態に戻します。これにより、最初はパフォーマンスが可能な限り最高のレベルに、書き込み増幅率が可能な限り最高の (最小の数値) レベルに回復しますが、ドライブが再びガベージコレクションを開始するとすぐに、パフォーマンスと書き込み増幅率は以前のレベルに戻り始めます。[ 35 ] [ 36 ]多くのツールは、ドライブをリセットし、ユーザー インターフェイスも提供するために ATA Secure Erase コマンドを使用します。業界でよく参照される無料ツールの 1 つはHDDeraseと呼ばれています。[ 36 ] [ 37 ] GPartedおよびUbuntuライブ CD は、セキュア消去を含むディスク ユーティリティの起動可能な Linux システムを提供します。[ 38 ]
書き込みをオンザフライで暗号化するドライブは、別の方法で ATA セキュア消去を実装できます。セキュア消去が行われるたびに、単純にゼロを書き込み、新しいランダムな暗号化キーを生成します。このようにして、古いデータは復号化できないため、読み取ることができなくなります。[ 39 ]暗号化機能を内蔵したドライブの中には、その後すべてのブロックを物理的にクリアするものもあれば、ドライブを元の状態に戻すために TRIM コマンドをドライブに送信する必要があるものもあります (そうしないと、パフォーマンスが最大化されない可能性があるため)。[ 40 ]
特定のブロックが他のブロックに書き込まれることなく繰り返しプログラムおよび消去されると、そのブロックは他のすべてのブロックよりも早く摩耗し、SSDの寿命を早めてしまいます。そのため、SSDコントローラはウェアレベリングと呼ばれる技術を用いて、SSD内のすべてのフラッシュブロックに書き込みをできるだけ均等に分散させます。
理想的なシナリオでは、これによりすべてのブロックが最大寿命まで書き込まれ、すべてが同時に故障することになります。残念ながら、書き込みを均等に分散するプロセスでは、以前に書き込まれて変更されていないデータ(コールドデータ)を移動し、より頻繁に変更されるデータ(ホットデータ)をそれらのブロックに書き込む必要があります。ホストシステムによって変更されずにデータが再配置されるたびに、書き込み増幅が増加し、フラッシュメモリの寿命が短くなります。重要なのは、両方を最大化する最適なアルゴリズムを見つけることです。[ 41 ]
書き込み増幅を低減するために静的(コールド)データと動的(ホット)データを分離することは、SSDコントローラにとって単純なプロセスではありません。このプロセスでは、SSDコントローラは、常に変化し書き換えが必要なデータ(動的データ)を含むLBAと、めったに変化せず書き換えが不要なデータ(静的データ)を含むLBAを分離する必要があります。今日のほとんどすべてのシステムのように、データが同じブロックに混在している場合、書き換えが発生すると、SSDコントローラは動的データ(最初に書き換えを引き起こしたデータ)と静的データ(書き換えが不要なデータ)の両方を書き換える必要があります。移動する必要がなかったデータのガベージコレクションは、書き込み増幅を増加させます。したがって、データを分離することで、静的データは静止状態を維持でき、書き換えが行われなければ、そのデータの書き込み増幅は可能な限り低くなります。このプロセスの欠点は、変化しないブロックは最大P/Eサイクルまで書き込まれる機会がないため、SSDコントローラは静的データのウェアレベリングを何らかの方法で行う必要があることです。[ 1 ]
SSDが大量のデータを順次書き込む場合、書き込み増幅率は1となり、書き込み増幅率が低くなります。その理由は、データが書き込まれるにつれて、(フラッシュ)ブロック全体が同じファイルに関連するデータで順次埋められるためです。OSがそのファイルを置き換えるか削除する必要があると判断した場合、ブロック全体を無効としてマークすることができ、ガベージコレクションのためにその一部を読み取って別のブロックに書き直す必要はありません。消去するだけで済み、ランダムに書き込まれたデータがガベージコレクションを通過する際に必要な読み取り-消去-変更-書き込みプロセスよりもはるかに簡単で高速です。[ 7 ]
SSD のランダム書き込みのピーク性能は、SSD が完全にガベージ コレクションされ、セキュア消去され、100% TRIM が実行された後、または新規インストールされた後に、十分な空きブロックがあることによって決まります。最大速度は、SSD コントローラに接続されている並列フラッシュ チャネルの数、ファームウェアの効率、およびフラッシュ メモリのページへの書き込み速度によって決まります。このフェーズでは、ランダム書き込みの書き込み増幅率は最高値となり、1 に近づきます。すべてのブロックが一度書き込まれると、ガベージ コレクションが開始され、パフォーマンスはそのプロセスの速度と効率によって制限されます。このフェーズでの書き込み増幅率は、ドライブが経験する最高レベルまで増加します。[ 7 ]
SSD の全体的なパフォーマンスは、書き込み増幅率を含む多くの要因に依存します。フラッシュメモリ デバイスへの書き込みは、そこからの読み出しよりも時間がかかります。[ 19 ] SSD は通常、パフォーマンスを向上させるために、複数のフラッシュメモリ コンポーネントを並列接続したチャネルを使用します。SSD の書き込み増幅率が高い場合、コントローラはフラッシュメモリにその回数だけ多く書き込む必要があります。これにより、ホストからデータを書き込むのにさらに時間がかかります。書き込み増幅率が低い SSD は、それほど多くのデータを書き込む必要がないため、書き込み増幅率が高いドライブよりも早く書き込みを完了できます。[ 1 ] [ 8 ]
2008 年 9 月、インテルは、WA が 1.1 と報告されている X25-M SATA SSD を発表しました。[ 5 ] [ 42 ] 2009 年 4 月、サンドフォースは、データ圧縮を使用して WA を 1.0 未満に抑えた WA 0.5 と報告されている SF-1000 SSD プロセッサ ファミリーを発表しました。[ 5 ] [ 43 ]この発表以前は、書き込み増幅率 1.0 が SSD で達成できる最低値と考えられていました。[ 19 ]
{{cite web}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク){{cite book}}: CS1 maint: 複数の名前: 著者リスト (リンク)% のオーバープロビジョニングにより、書き込みアクティビティのあるすべてのプロファイルで大幅なパフォーマンス向上を実現。