web-dev-qa-db-ja.com

私のHDDはなぜ "4K"スピードテストでとても遅いのですか?

4Kでのスピードのどこが悪いの?それはなぜそんなに遅いのですか?それともそのようなはずですか?

Screenshot of benchmark

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

46
User6539

あなたが遭遇しているのは、典型的なメカニカルHDDであり、SSDの大きな利点の1つです:HDDはひどいランダムアクセス性能を持っています。

CrystalDiskMarkでは、「Seq」はsequentialaccessを意味し、「4K」はrandomaccessを意味します(at at 4kB)。シングルバイトは非常に遅く、非現実的なので1).


定義

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

順次アクセス

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

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

ランダムアクセス

Randomaccessは、読み書きに明白なパターンがないことを意味します。これは本当の意味でランダムである必要はありません。それは本当に「順次ではない」という意味です。たとえば、一度にたくさんのプログラムを起動している場合は、ドライブに散在しているたくさんのファイルを読み込む必要があります。

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

ブロック

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

blockは単なるバイトの範囲です。たとえば、ブロック#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のビデオです

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

これは、アームの最後にあるヘッドの下にあるデータのビットだけがいつでも読み取れることを意味します。ドライブは2つのことを待つ必要があります。アームがディスクの正しいリング(「トラック」)に移動するのを待つ必要があり、ディスクが回転するのを待つ必要があるため、必要なデータが読み取り中です。頭。これはシークとして知られています。2。回転する腕と動く腕の両方が動くのに物理的な時間がかかります、そしてそれらはダメージを受ける危険性なしで大いにスピードを上げることができません。

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

ランダム

一方、ランダムアクセスには予測可能性という利点はありません。したがって、8バイトのランダムなバイトを読みたい場合は、 "8,34,76,996,112,644,888,341"のブロックからドライブを "8にシーク、8をリード、34にシーク、34をリード、76にシーク、76をリード..."する必要があります。ブロックごとにどのようにして再度シークする必要があるかに注意してください。シーケンシャル512 Bブロックあたり平均0.003125msではなく、今では平均(5msシーク+ 0.003125ms読み取り)= 5.003125ms /ブロックです。それはmany、多くの倍遅くなります。実際、数千倍も遅くなります。

SSD

幸い、私たちは今解決策を持っています:SSD。

SSD、ソリッドステートドライブは、その名のとおり、solid stateです。つまり、可動部分がないということです。さらに、SSDのレイアウト方法は、3)バイトの位置を調べる必要がない。すでにを知っています。これが、SSDがシーケンシャルアクセスとランダムアクセスの間のパフォーマンスギャップをはるかに少なくする理由です。

まだギャップがありますが、それは、次に来るものを予測できないこと、およびpreloading要求される前にそのデータを予測できないことに大きく起因します。


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

2 厳密には、seekは腕の動きだけを表します。データがヘッドの下を回転するのを待つのは、シーク時間の上にあるrotation latencyです。

3 技術的には、それらにはルックアップテーブルがあり、他の理由で再マッピングされます。レベリングを損なうことはありませんが、これらはHDDと比較してごくわずかです。

84
Bob

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

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

  • 読み取り/書き込みヘッドがPlatter上の正しい円形トラック(または「シリンダ」)に「シーク」するための待ち時間をシークします。ヘッドがトラック上で安定し、Platterに格納されたデータと同期するのに必要な時間も含まれます。
  • トラックの目的の部分(「セクタ」)がヘッドの下を通過するように、読み取り/書き込みヘッドの下にある回転するPlatterの回転待ち時間

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

一般的なデスクトップハードディスクは7200 rpmで回転しますが、一般的なラップトップドライブは5000 rpmで回転します。これは、毎秒、合計120回転(デスクトップドライブ)または約83回転(ラップトップドライブ)で行われることを意味します。 平均して 目的のセクターが頭上を通過する前にディスクが半回転する必要があるので、これは、ディスクが1秒間にその2倍のI/O要求を処理できることを期待できることを意味します。それ

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

そのため、(読み取りまたは書き込みのために)アクセスするよう要求されているデータが物理的に比較的ローカライズされている場合は、毎秒200 I/O程度のパフォーマンスが期待できます。一般的なケースでは、データがPlatterに分散されている場合、ドライブは1秒あたり100 I/Oのオーダーで実行できるため、かなりのシークが必要となり、シークの待ち時間が制限要因となります。 。ストレージの観点では、これはハードディスクの " IOPS パフォーマンス"です。これは、シーケンシャルI/Oパフォーマンスではなく、通常、実際のストレージシステムにおける制限要因です。 (これがSSDが非常に高速で使用される大きな理由です。読み書きヘッドの物理的な移動がフラッシュマッピングレイヤテーブルのテーブルルックアップになるため、回転レイテンシが排除され、シークレイテンシが大幅に短縮されます。電子的に保存されています。)

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

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

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

純粋にシーケンシャルなI/Oに関しては、150 MB /秒の範囲のスループットは、現代の回転式ハードディスクにはまったく無理があるわけではありません。しかし、実際のI/Oが厳密にシーケンシャルであることはほとんどないため、ほとんどの場合、純粋にシーケンシャルなI/Oパフォーマンスは、実際のパフォーマンスの指標というよりは学術的な課題になります。

2
a CVn

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を使用していることに注意してください。そのバッファがいっぱいになると劇的に遅くなります。

2
bwDraco