4Kでの速度の何が問題になっていますか?なぜそんなに遅いのですか?それとも、そのようになるはずですか?
その速度は大丈夫ですか?4Kでこんなに遅いのはなぜですか?
4Kでの速度の何が問題になっていますか?なぜそんなに遅いのですか?それとも、そのようになるはずですか?
その速度は大丈夫ですか?4Kでこんなに遅いのはなぜですか?
回答:
実行しているのは、機械式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のビデオで、回転するディスクと動くアームを見ることができます。
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のレイアウト方法は、バイトの場所を検索する必要がない(実質的に3)ことを意味します。すでに知っている。これが、SSDのシーケンシャルアクセスとランダムアクセスのパフォーマンスギャップがはるかに少ない理由です。
まだギャップはありますが、それは主に、次に来るものを予測できず、要求される前にそのデータをプリロードすることに起因します。
1より正確には、LBAドライブでは、効率上の理由から512バイト(512n / 512e)または4kB(4Kn)のブロックでアドレス指定されます。また、実際のプログラムでは、一度に1バイトしか必要としません。
2技術的には、シークはアームの移動のみを指します。データが頭の下で回転するのを待つのは、シーク時間に加えて回転待ち時間です。
3技術的には、ルックアップテーブルがあり、他の理由、たとえばウェアレベリングのために再マップしますが、これらはHDDと比較して完全に無視できます...
Notice how it needs to look for every single byte?
:置き換えるbyte
とblock
(それに応じてexempleを変更します)。ドライブは4k部分をシークします(512バイトのチャンクにさらに分散できますが、これより低くなりません。すべてのバイト間をシークしません!次のブロックがすぐ後ろにない場合、すべてのブロック間をシークします)ディスクの断片化し、求めている()プラッタの周りにヘッドを移動し、その下に渡すためのブロックを待っている、非常に長い時間がかかるものです(数ミリ秒)。
他の回答ですでに指摘したように、「4K」はほぼ確実にサイズ4 KiBのブロックでのランダムアクセスを指します。
SSDではなくハードディスクがデータの読み取りまたは書き込みを要求されるたびに、次の2つの大きな遅延が発生します。
これらの両方は、特定のドライブに対して比較的一定の時間です。シークレイテンシは、ヘッドの移動速度とヘッドの移動距離の関数であり、回転レイテンシはプラッタの回転速度の関数です。さらに、過去数十年にわたって大きな変化はありませんでした。製造業者は、実際には広告などで平均シーク時間を使用していました。その地域で開発がほとんどまたはまったくなかったとき、彼らはそれをやめました。特に競争の激しい環境では、どのメーカーも自社製品が競合他社のものより良く見えないことを望んでいません。
一般的なデスクトップハードディスクは7200 rpmで回転しますが、一般的なラップトップドライブは約5000 rpmで回転します。これは、毎秒合計120回転(デスクトップドライブ)または約83回転(ラップトップドライブ)することを意味します。以来、平均して所望のセクタがヘッドの下を通過する前に、ディスクは、私たちは約2倍の毎秒多くの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は、回転ハードディスクの絶対的なパフォーマンスのキラーです。これが、関連するメトリックである理由でもあります。
純粋にシーケンシャルI / Oに関しては、150 MB / sの範囲のスループットは、最新の回転式ハードディスクではまったく不合理ではありません。ただし、厳密にシーケンシャルである実世界のI / Oはほとんどないため、ほとんどの場合、純粋にシーケンシャルI / Oのパフォーマンスは、実世界のパフォーマンスを示すというよりもアカデミックな演習になります。
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を使用します。これは、データの書き込み時に遅くなる傾向があります。そのバッファーがいっぱいになると劇的に遅くなります。)