web-dev-qa-db-ja.com

hdd / ssdベンチマークでの4k読み取りが書き込みより遅いのはなぜですか?

PCドライブの速度をテストするために使用できるいくつかのベンチマークツールがあります。

以下は、SATA SSDのベンチマークの例です。

  • 順次読み取り:718.498 MB/s
  • 順次書き込み:777.414 MB/s
  • ランダム読み取り512KB:160.541 MB/s
  • ランダム書き込み512KB:838.930 MB/s
  • ランダム読み取り 4KB(QD = 1):26.985 MB/s [6588.1 IOPS]
  • ランダム書き込み 4KB(QD = 1):135.603 MB/s [33106.2 IOPS]
  • ランダム読み取り4KB(QD = 32):177.003 MB/s [43213.6 IOPS]
  • ランダム書き込み4KB(QD = 32):178.397 MB/s [43554.0 IOPS]

m.2 SSD:

  • 順次読み取り(Q = 32、T = 1):829.119 MB/s
  • 順次書き込み(Q = 32、T = 1):677.645 MB/s
  • ランダム読み取り4KiB(Q = 32、T = 1):744.328 MB/s [181720.7 IOPS]
  • ランダム書き込み4KiB(Q = 32、T = 1):144.876 MB/s [35370.1 IOPS]
  • 順次読み取り(T = 1):785.600 MB/s
  • 順次書き込み(T = 1):789.973 MB/s
  • ランダム読み取り4KiB(Q = 1、T = 1):56.585 MB/s [13814.7 IOPS]
  • ランダム書き込み4KiB(Q = 1、T = 1):170.449 MB/s [41613.5 IOPS]

HDD:

  • 順次読み取り:114.988 MB/s
  • 順次書き込み:111.043 MB/s
  • ランダム読み取り512KB:39.260 MB/s
  • ランダム書き込み512KB:57.409 MB/s
  • ランダム読み取り4KB(QD = 1):.546 MB/s [133.4 IOPS]
  • ランダム書き込み4KB(QD = 1):.757 MB/s [184.9 IOPS]
  • ランダム読み取り4KB(QD = 32):1.582 MB/s [386.3 IOPS]
  • ランダム書き込み4KB(QD = 32):0.700 MB/s [171.0 IOPS]

どの場合でも、「ランダム読み取り4KB Q1」は書き込みよりも遅く、ほとんどの場合、「QD32」ではその逆です。

一部のフォーラムでは、SSDチップ構造に関する制限と言われていますが、通常のハードドライブと同じ動作が見られるため、別の理由のようです。

12
mgutt

TL; DR: SSDがあなたに嘘をついており、書き込みが実際に行われる前に行われていると言っているためです。読み取りについては、同じことを回避できません。

回答の長いバージョンは書き込みキャッシュです。

QD1ケースから始めましょう。 SSDは、データを受信して​​ドライブのローカルキャッシュに保存した後、実際にNANDに書き込む前に、書き込みが完了したことをOSに報告します。 NANDへのデータの書き込みは非常に遅いため、これは大きな違いをもたらします。読み取りの場合は、実際にデータを返送する前にNANDからデータを読み取る必要があります(以前に読み取ってキャッシュに残っている場合を除きますが、ランダム読み取りの場合はほとんどありません)。

これの欠点は、突然の電力損失に直面して、SSDに書き込まれたデータが失われる可能性があることですが、まだNANDに到達していません。一部のエンタープライズSSDには、突然の電力損失が発生した場合にキャッシュ内のデータのNANDへの書き込みを完了するのに十分な電力を格納するスーパーコンデンサーが含まれています。

ハードドライブも書き込みキャッシュを行っているため、同じことがわかります。彼らはそれについてあまり積極的ではありません。 SSDはなぜそれほど強力なのですか?これに答えるには、QD32のケースを検討するように移動する必要があります。

QD32では、ランダム読み取りの方がランダム書き込みよりも一般的に高速であると言うのは正しくありません。それはあなたがどの特定のSSDを見るかに大きく依存します。

多くのSATA SSDの4k QD1ランダム読み取りを見ると、それらはすべて20〜30 MB/sの範囲で実行されているようです。何故ですか?これは、4k QD1のランダム読み取りのほとんどがレイテンシであり、スループットではないためです。レイテンシは3つの部分から生じます。

  1. ドライブに何をすべきかを伝え、データを送信することを含む、SATA/AHCIのインターフェース遅延。
  2. コントローラ自体は、受け取ったデータと命令をどう処理するかを理解する必要があります。
  3. NANDダイへのデータの実際の読み取りまたは書き込みにかかる時間。

1.と3.のどちらも、長い間変化していなかったため、1k QD1ランダム読み取りもほとんど変化しませんでした。

最近のSSDのSATA/AHCIからPCIe/NVMeへの移行により、レイテンシが1に大幅に短縮されました。そのため、最近、特定のm.2およびPCIe SSDで大きな改善が見られます。

SSDコントローラーがレイテンシを大幅に向上させるためにできることの1つは、複数のNANDダイへの読み取りまたは書き込みを並行して行うことです。これにより、レイテンシ3のほとんどがマスクされます。NCQでQD32 4kランダム読み取りを実行している場合、SSDは読み取りを処理できます要求が順不同であり、それが可能な限り多くのNANDダイから並列に読み取られていることを確認します。

QD32 4kランダム書き込みの場合、SSDは書き込み結合と呼ばれる処理を行います。 SSDコントローラーで大量の小さな書き込み要求が発生すると、ローカルでそれらをキャッシュし、書き込みバッファーが十分に大きくなると、コントローラーはそれを適切なサイズのチャンクに分割し、チャンクを複数のNANDダイに並列に書き込みます。 NANDレイテンシ。書き込み結合のもう1つの利点は、最近のほとんどのSSDのページサイズ(読み取りまたは書き込み可能な最小量)が4kを超えていることです。ページサイズに達するまで書き込みを結合すると、大量の書き込みの増幅を回避できます。 SSDが書き込みキャッシュで非常に積極的であるのは、これらのことを行うためです。

9
Mr Alpha