「4K」速度テストでHDDが非常に遅いのはなぜですか?


46

4Kでの速度の何が問題になっていますか?なぜそんなに遅いのですか?それとも、そのようになるはずですか?

ベンチマークのスクリーンショット

その速度は大丈夫ですか?4Kでこんなに遅いのはなぜですか?


13
それは正常で予想されることです。このコンテキストでの「4K」は、機械的なHDDがひどく実行するランダムな読み取り/書き込み(4キロバイトのブロックで、したがって「4K」)を意味します。そこでSSDが必要になります。より詳細な説明については、こちらをご覧ください。
ボブ

4Kbが使用されるのは、それが実際のセクター(ディスク自体の低レベル構造)のディスククラスターの典型的なサイズであり、多くの最新のHDDであるためです。つまり、要求されたデータが小さくても、読み取りまたは書き込みで一度に転送される可能性のある最小量のデータ。興味深いことに、このページの答えがクラスターやセクターに言及していません。
thomasrutter

2
@thomasrutterそれは答えに関係ないからです。重要な部分は、このテストがランダムシークを含むことです。(ある程度)転送されるデータの量と、それがディスクのセクターサイズの倍数であるかどうかは関係ありません。重要な部分は、シークパフォーマンスを測定するために、テストが最小量のデータを転送することです。
マイケルジョンソン

このテストはパーティションで実行されますか、それともディスク全体で実行されますか?パーティションレベルのテストは、物理セクターが4Kで論理セクターが1Kのディスクを使用し、セクターをまたぐようにパーティションの境界を調整していない場合、4Kアクセスではパフォーマンスが大幅に低下します。
トビーSpeight

最新のパーティション分割ツールは、パーティションがセクタ境界で開始および終了することを保証する傾向があります。1MBの粒度でさえ一般的になりました。4Kbネイティブセクターに問題を引き起こす古い「63 512バイトセクター」の時代は終わりました。
thomasrutter

回答:


85

実行しているのは、機械式HDDの典型であり、SSDの主な利点の1つです。HDDはひどいランダムアクセスパフォーマンスを備えています。

CrystalDiskMarkでは、「Seq」はシーケンシャルアクセスを意味、「4K」はランダムアクセスを意味します(一度に4kBのチャンクで、1バイトは非常に遅く、非現実的です1)。


定義

大まかに言って、ファイルにアクセスする方法は2つあります。

シーケンシャルアクセス

順次アクセスとは、ファイルを1バイトずつ読み取りまたは書き込みすることを意味します。たとえば、ビデオを視聴している場合、ビデオを最初から最後までロードします。ファイルをダウンロードする場合、ファイルは最初から最後までダウンロードされてディスクに書き込まれます。

ディスクの観点からは、「ブロック#1の読み取り、ブロック#2の読み取り、ブロック#3の読み取り、バイトブロック#4の読み取り」1などのコマンドが表示されます。

ランダムアクセス

ランダムアクセスとは、読み取りまたは書き込みに明らかなパターンがないことを意味します。これは、真にランダムを意味する必要はありません。それは本当に「シーケンシャルではない」という意味です。たとえば、多くのプログラムを一度に起動する場合、ドライブに散らばっている多くのファイルを読み取る必要があります。

ドライブの観点からは、「ブロック#56の読み取り、ブロック#5463の読み取り、ブロック#14の読み取り、ブロック#5の読み取り」などのコマンドが表示されます。

ブロック

何度かブロックについて言及しました。コンピューターはそのような大きなサイズ(1 MB〜= 1000000 B)を処理するため、個々のバイトごとにドライブに問い合わせる必要がある場合、シーケンシャルアクセスでさえ非効率的です-チャタリングが多すぎます。実際には、オペレーティングシステムは一度にディスクからデータブロックを要求します

ブロックは、バイトのちょうど範囲です。たとえば、ブロック#1はバイト#1〜#512、ブロック#2はバイト#513〜#1024などです。これらのブロックは、ドライブに応じて512バイトまたは4096バイトのいずれかです。ただし、個々のバイトではなくブロックを処理した後でも、シーケンシャルブロックアクセスはランダムブロックアクセスよりも高速です。


性能

シーケンシャル

通常、シーケンシャルアクセスはランダムアクセスよりも高速です。これは、シーケンシャルアクセスにより、オペレーティングシステムドライブが次に必要なものを予測し、大きなチャンクを事前にロードできるためです。ブロック「1、2、3、4」を要求した場合、OSは次に「5、6、7、8」が必要だと推測できるため、ドライブに「1、2、3、4」を読み取るように指示します。 、5、6、7、8」を一度に。同様に、ドライブは「1をシークし、1,2,3,4をシークし、5をシークし、5,6,7,8をシーク」するのではなく、物理ストレージを一度に読み取ることができます。

ああ、私は何かを探していると言いました。メカニカルHDDは、物理的な配置方法が原因でシーク時間が非常に遅くなります。これらは、ディスクを読み取るために物理アームが前後に移動する多数の重金属化ディスクで構成されています。これは、開いているHDDのビデオで、回転するディスクと動くアームを見ることができます。

HDD内部の図
http://www.realtechs.net/data%20recovery/process2.htmlからの画像

これは、常に、アームの端のヘッドの下にあるデータのビットのみを読み取ることができることを意味します。ドライブは2つのことを待つ必要があります。アームがディスクの正しいリング(「トラック」)に移動するのを待つ必要があります。また、必要なデータが読み取り中になるようにディスクが回転するのを待つ必要があります頭。これは、シーク2として知られています。回転しているアームと動くアームの両方が動くのに物理的な時間を要し、それらは損傷を危険にさらすことなく速度を上げることはできません。

通常、これには非常に長い時間がかかり、実際の読み取りよりもはるかに長くかかります。リクエストされたバイトが存在する場所に到達するためだけに5ミリ秒以上話しているのに対し、バイトの実際の読み取りは、平均バイト読み取りあたり約0.00000625ミリ秒(または512 Bブロックあたり0.003125ミリ秒)になります。

ランダム

一方、ランダムアクセスには、予測可能性というメリットはありません。したがって、「8,34,76,996,112,644,888,341」のブロックからランダムな8バイトを読み取りたい場合、ドライブは「8、8を読み取り、8を読み取り、34を読み取り、34を読み取り、34を読み取り、76を読み取り、...」を実行する必要があります。各ブロックごとに再度シークする必要があることに注意してください。連続した512 Bブロックあたり平均0.003125msの代わりに、平均は(ブロックごとに5msシーク+ 0.003125ms読み取り)= 5.003125msになります。それは何も、何倍も遅いです。実際、何千倍も遅くなります。

SSD

幸いなことに、現在、SSDというソリューションがあります。

SSD、ソリッドステートドライブは、その名前が示すように、ソリッドステートです。それは可動部分ないことを意味します。さらに、SSDのレイアウト方法は、バイトの場所を検索する必要がない(実質的に3)ことを意味します。すでに知っいる。これが、SSDのシーケンシャルアクセスとランダムアクセスのパフォーマンスギャップがはるかに少ない理由です。

まだギャップはありますが、それは主に、次に来るものを予測できず、要求される前にそのデータをプリロードすることに起因します。


1より正確には、LBAドライブでは、効率上の理由から512バイト(512n / 512e)または4kB(4Kn)のブロックでアドレス指定されます。また、実際のプログラムでは、一度に1バイトしか必要としません。

2技術的には、シークはアームの移動のみを指します。データが頭の下で回転するのを待つのは、シーク時間に加えて回転待ち時間です。

3技術的には、ルックアップテーブルがあり、他の理由、たとえばウェアレベリングのために再マップしますが、これらはHDDと比較して完全に無視できます...


@KamilMaciorowski私は実際にその単純化を再考しています、なぜならそれは私のシーク+読み取り時間の計算を捨てるからです。しかたがない。概念にとってはそれほど重要ではありません。
ボブ

あなたは、ランダムな部分を修正する必要がありますNotice how it needs to look for every single byte?:置き換えるbyteblock(それに応じてexempleを変更します)。ドライブは4k部分をシークします(512バイトのチャンクにさらに分散できますが、これより低くなりません。すべてのバイト間をシークしません!次のブロックがすぐ後ろにない場合、すべてのブロック間をシークします)ディスクの断片化し、求めている()プラッタの周りにヘッドを移動し、その下に渡すためのブロックを待っている、非常に長い時間がかかるものです(数ミリ秒)。
オリヴィエ・デュラック

2
4 kiB / 512Bの小さなダイノート。4kiBはページサイズでもあるので、ほとんどすべてなので、LBAドライバーが512 Bのチャンクを読み込んだとしても、OS $は完全な4 kiBブロックを先読みする可能性があります。また、問題は、HDDがSDD以外のバイトを「見つける」必要があるということではなく、物理的に正しい位置に回転する必要があるということです。ブロックに再度アクセスする場合は、HDDが継続的に回転しているため、再度ブロックする必要があります。ブロックの再マッピングは、二次的な影響になる可能性があります(通常、再マッピングされたブロックは、シークを最小限に抑えるためにとにかく損傷したブロックの直後です)。
マチェイピエチョトカ

(おそらく完全なサイドノート-NAND / NORについてはわかりませんが、名前が示すように少なくともDDRアドレッシングも完全にランダムではありませんが、アドレスの「バースト」で動作します。ほとんどの場合、これは64 BですほとんどのCPUの$行のサイズですが、他のアプリケーションでははるかに大きくなる可能性があります。)
Maciej Piechotka

1
@OlivierDulac私はまだブロックを導入することは潜在的に混乱を招くと思うが、私はそれを説明しようとした。回答が更新されました。
ボブ

3

他の回答ですでに指摘したように、「4K」はほぼ確実にサイズ4 KiBのブロックでのランダムアクセスを指します。

SSDではなくハードディスクがデータの読み取りまたは書き込みを要求されるたびに、次の2つの大きな遅延が発生します。

  • 読み取り/書き込みヘッドがプラッター上の正しい円形トラック(または「シリンダー」)を「シーク」するためのレイテンシーを求めます。
  • 回転レイテンシー、読み取り/書き込みヘッドの下の回転プラッターが回転して、トラックの目的の部分(「セクター」)がヘッドの下を通過する

これらの両方は、特定のドライブに対して比較的一定の時間です。シークレイテンシは、ヘッドの移動速度とヘッドの移動距離の関数であり、回転レイテンシはプラッタの回転速度の関数です。さらに、過去数十年にわたって大きな変化はありませんでした。製造業者は、実際には広告などで平均シーク時間を使用していました。その地域で開発がほとんどまたはまったくなかったとき、彼らはそれをやめました。特に競争の激しい環境では、どのメーカーも自社製品が競合他社のものより良く見えないことを望んでいません。

一般的なデスクトップハードディスクは7200 rpmで回転しますが、一般的なラップトップドライブは約5000 rpmで回転します。これは、毎秒合計120回転(デスクトップドライブ)または約83回転(ラップトップドライブ)することを意味します。以来、平均して所望のセクタがヘッドの下を通過する前に、ディスクは、私たちは約2倍の毎秒多くのI / O要求が、と仮定していること、ディスクがサービスにできることを期待できるのはこの意味、半回転を回転する必要があります。

  • どちらか(これはおそらく、I / Oが求めていることを伴う今日のハードディスクの安全な賭けである)は、ディスクが回転している間に行われるシークレイテンシー求めていない特定のI / Oのための回転待ち時間よりも、もはやです
  • またはヘッドは、既に正しいシリンダ上であることを起こる原因(待ち時間ゼロのシークと、上記の特別な場合である)追求する必要がないようにドライブ

そのため、アクセス(読み取りまたは書き込み)を要求されているデータが物理的に比較的ローカライズされている場合、1秒あたり200 I / Oのオーダーで実行できることを期待する必要があります。一般的なケースでは、データが1つまたは複数のプラッターに分散している場合、ドライブは1秒あたり100 I / O程度で実行でき、かなりのシークが必要で、シークレイテンシーが制限要因になることが予想されます。 。ストレージ用語では、これは「IOPSハードディスクのパフォーマンス」。これは、シーケンシャルI / Oパフォーマンスではなく、通常、実際のストレージシステムの制限要因です。これは、SSDの使用が非常に高速である大きな理由です。読み取り/書き込みヘッドの物理的な動きが、電子的に保存されているフラッシュマッピングレイヤーテーブル内のテーブルルックアップになるため、シークレイテンシを大幅に削減します。

通常、キャッシュフラッシュが関係する場合、書き込みは遅くなります。通常、オペレーティングシステムとハードディスクは、パフォーマンスを改善するために、可能な場合はランダムI / OをシーケンシャルI / Oに変更するためにランダム書き込みを並べ替えようとします。明示的なキャッシュフラッシュまたは書き込みバリアがある場合、永続ストレージ内のデータの状態がソフトウェアが期待するものと一致するようにするために、この最適化は排除されます。ディスクキャッシュが含まれていない場合、基本的に同じ推論が適用されます。ディスクキャッシュが存在しない場合(デスクトップスタイルのシステムでは今日では一般的ではない)、またはソフトウェアが意図的にバイパスするためです(I / Oパフォーマンスを測定するときによく行われます)。どちらも、潜在的な最大IOPSパフォーマンスをより悲観的な場合のパフォーマンス、または7200 rpmドライブの場合は120 IOPSに低下させます。

  • I / Oあたり4 KiBで100 IOPSの場合、約400 KB / sのパフォーマンスが得られます。
  • I / Oあたり4 KiBで200 IOPSの場合、約800 KB / sのパフォーマンスが得られます。

それはあなたの番号とほぼ正確に一致するようになります。ブロックサイズが小さいランダムI / Oは、回転ハードディスクの絶対的なパフォーマンスのキラーです。これが、関連するメトリックである理由でもあります。

純粋にシーケンシャルI / Oに関しては、150 MB / sの範囲のスループットは、最新の回転式ハードディスクではまったく不合理ではありません。ただし、厳密にシーケンシャルである実世界のI / Oはほとんどないため、ほとんどの場合、純粋にシーケンシャルI / Oのパフォーマンスは、実世界のパフォーマンスを示すというよりもアカデミックな演習になります。


これは素晴らしい答えであり、私のものよりもはるかに優れています:)ほんの小さなメモですが、少なくともシーゲイトはデータシートで平均シーク遅延を指定しています。WDはそうではないようです。
ボブ

@ボブありがとうございます。私は実際に広告などを意味していました。それを明確にするために答えを編集しました。私は...そうすることが、おそらく多くのためのありのままの経験だろうにもかかわらず、非常に少数の人々は、データシートを読むことを言っても安全だと思う
からCVn

2

4KはランダムI / Oを指します。これは、テストファイル内のランダムなポイントでディスクが小さなブロック(サイズが4 KB)にアクセスするように要求されていることを意味します。これはハードドライブの弱点です。ディスクの異なる領域にまたがってデータにアクセスする能力は、ディスクが回転する速度と、読み書きヘッドがどれだけ速く移動できるかによって制限されます。ディスクが回転しているときにドライブがブロックを簡単に読み書きできるため、連続したブロックにアクセスする連続I / Oははるかに簡単です。

ソリッドステートドライブ(SSD)にはランダムI / Oに関する問題はありません。必要なのは、基になるメモリ(通常はNANDフラッシュ、3D XPoint、またはDRAMでも可)のデータの保存場所を検索することだけです。または、適切な場所にデータを書き込みます。SSDは完全に電子的であり、回転ディスクまたは移動する読み書きヘッドを待機してデータにアクセスする必要がないため、この点でハードドライブよりもはるかに高速になります。このため、SSDにアップグレードするとシステムパフォーマンスが劇的に向上します。

補足:SSDでのシーケンシャルI / Oパフォーマンスは、多くの場合、ハードドライブよりもはるかに高くなります。一般的なSSDには、フラッシュメモリコントローラーに並列に接続された複数のNANDチップがあり、それらに同時にアクセスできます。これらのチップにデータを分散させることにより、RAID 0に類似したドライブレイアウトが実現され、パフォーマンスが大幅に向上します。(新しいドライブ、特に安価なドライブの多くは、TLC NANDと呼ばれるタイプのNANDを使用します。これは、データの書き込み時に遅くなる傾向があります。そのバッファーがいっぱいになると劇的に遅くなります。)


IIRC、一部のNVMe SSDはDRAMキャッシュを使用します。
timuzhti

1
ほとんどの場合。ドラムレスSSDは、ローエンドではちょっとしたものです。
ジャーニーマンオタク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.