HDD – 「4K」スピードテストでHDDが遅いのはなぜ?

benchmarking hard-drive hardware-failure speed storage

4Kでの速度はどうしたの?なんでこんなに遅いの?それともそういうことになっているのでしょうか?

Screenshot of benchmark

その速度でいいの?なんで4Kでこんなに速度が落ちるんだろう?

  48  User6539  2017-12-11


ベストアンサー

あなたが直面していることは、機械式HDDの典型的なものであり、SSDの大きな利点の1つです。HDDはひどいランダムアクセス性能を持っています

CrystalDiskMarkでは、”Seq “はシーケンシャルアクセスを意味し、”4K “はランダムアクセスを意味します(シングルバイトではあまりにも遅く、非現実的なので、一度に4kBのチャンクで)


Definitions

ファイルにアクセスするには、大きく分けて2つの方法があります

Sequential access

シーケンシャルアクセスとは、ファイルを多かれ少なかれ1バイトずつ読み書きすることを意味します。例えば、ビデオを見ている場合、最初から最後までビデオをロードします。ファイルをダウンロードしている場合は、最初から最後までダウンロードされてディスクに書き込まれます

ディスクから見ると、”read block #1, read block #2, read block #3, read byte block #4″1のようなコマンドが表示されています

Random access

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

ドライブの視点から見ると、「ブロック#56の読み込み、ブロック#5463の読み込み、ブロック#14の読み込み、ブロック#5の読み込み」のようなコマンドが表示されます

Blocks

ブロックについては何度か触れたことがあります。コンピュータはそのような大きなサイズ(1 MB ~= 1000000 B)を扱うので、ドライブに個々のバイトを要求しなければならない場合、シーケンシャルアクセスでさえ非効率的です – あまりにも多くのチャタリングがあります。実際には、オペレーティングシステムは一度にディスクからデータのブロックを要求します

例えば、ブロック#1はバイト#1~#512、ブロック#2はバイト#513~#1024などです。これらのブロックは、ドライブに応じて512バイトまたは4096バイトの大きさになります。しかし、個々のバイトではなくブロックを扱った後でも、シーケンシャル・ブロック・アクセスはランダム・ブロック・アクセスよりも高速です


Performance
Sequential

シーケンシャルアクセスは一般的にランダムアクセスよりも高速です。これは、シーケンシャル・アクセスにより、オペレーティング・システムとドライブが次に何が必要かを予測し、事前に大きな塊をロードすることができるからです。ブロック「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 のビデオです

Diagram of HDD internals http://www.realtechs.net/data%20recovery/process2.html からの画像

これは、アームの端にあるヘッドの下にあるデータのビットだけを読み取ることができることを意味します。また、必要なデータが読み取りヘッドの下にあるように、ディスクが回転するのを待つ必要があります。これはシーク2として知られています。回転アームと移動アームの両方とも、移動に物理的な時間がかかり、損傷のリスクを冒さずにあまりスピードを上げることはできません

これは通常、実際の読み込みよりもはるかに長い非常に長い時間がかかります。要求されたバイトが存在する場所に到達するのに5msかかるのに対し、実際のバイトの読み取りは、シーケンシャルバイトの読み取りごとに平均して約0.00000625ms(または512 Bブロックごとに0.003125ms)になります

Random

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

SSDs

幸いなことに、今は解決策があります。SSDです

SSD(ソリッドステートドライブ)は、その名の通りソリッドステートです。これは、可動部分がないことを意味します。さらに、SSDがどのようにレイアウトされているかというと、バイトの位置を調べる必要がないことを意味します。これが、SSDがシーケンシャル アクセスとランダム アクセスの間のパフォーマンスの差がはるかに少ない理由です

まだギャップがありますが、それは次に何が来るかを予測できないことと、そのデータが求められる前に事前にロードされていないことに大きく起因している可能性があります


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

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

87  Bob  2017-12-11


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

ハードディスク(SSDではありません)がデータの読み書きを要求されるたびに、2つの大きな遅延が発生します

  • 読み書きヘッドがプラッター上の正しい円形トラック(または「シリンダー」)に「シーク」するためのシーク・レイテンシー(ヘッドがトラック上で安定し、プラッターに保存されたデータと同期するために必要な時間を含む)
  • 回転レイテンシー(Rotational latency):読み書きヘッドの下で回転するプラッタが、トラックの希望する部分(「セクタ」)がヘッドの下を通過するように回転するためのレイテンシー

これらはいずれも、任意のドライブに対して比較的一定の時間です。シークレイテンシは、ヘッドをどれだけ速く動かし、どれだけ遠くまで移動させる必要があるかの関数であり、回転レイテンシは、プラッターがどれだけ速く回転しているかの関数です。さらに、この数十年の間、これらはほとんど変化していません。メーカーは実際に、広告などで平均シーク時間を使用していましたが、この分野での開発がほとんどないか、または全く行われなくなってからは、そのようなことはほとんど行わなくなりました。どのメーカーも、特に競争の激しい環境下では、自社の製品が競合他社の製品よりも見劣りしないことを望んでいません

典型的なラップトップドライブが約5000 rpmで回転する可能性があるのに対し、典型的なデスクトップのハードディスクは7200 rpmで回転します。これは、毎秒、合計120回転(デスクトップドライブ)または約83回転(ラップトップドライブ)していることを意味します。平均的には、目的のセクターがヘッドの下を通過する前にディスクは半回転する必要があるので、これは、ディスクが1秒間に約2倍のI/O要求に対応できることを意味します

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

そのため、アクセス(読み書き)を要求されるデータが物理的に比較的局所化されており、回転レイテンシが制限要因となっている場合には、毎秒200 I/Oのオーダーで実行できることを期待する必要があります。一般的なケースでは、データがプラッタまたはプラッタに分散している場合、ドライブは100 I/O/秒のオーダーで動作すると予想され、かなりのシークが必要となり、シーク・レイテンシが制限要因となります。ストレージ用語では、これはハードディスクの「IOPS性能」であり、これはシーケンシャルI/O性能ではなく、一般的に実世界のストレージシステムの制限要因です。(これが、SSD がこれほどまでに高速に使用できる大きな理由です。回転レイテンシを排除し、リード/ライト ヘッドの物理的な動きが、電子的に保存されているフラッシュ マッピング レイヤー テーブルのテーブル検索になるため、シーク レイテンシが大幅に削減されます。)

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

  • I/Oあたり4KiBで100IOPSの場合、約400KB/sの性能が得られます
  • 1 I/Oあたり4 KiBで200 IOPSの場合、約800 KB/sの性能が得られます

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

純粋にシーケンシャルI/Oに関しては、150MB/sの範囲内のスループットは、最新の回転式ハードディスクでは全く不合理ではありません。しかし、現実世界のI/Oは厳密にシーケンシャルなものはほとんどないので、ほとんどの状況では、純粋にシーケンシャルなI/O性能は、現実世界の性能を示すというよりも、学術的な運動になります

3  user  2017-12-12


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

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

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

2  bwDraco  2017-12-11


タイトルとURLをコピーしました