web-dev-qa-db-ja.com

SSDのNVMe接続で非シーケンシャルアクセスが高速化されないのはなぜですか?

1GBのファイルを(SATA SSDの)5倍の速度で転送するのか、1,000個の1MBのファイルを5倍の速度で転送するのかが重要なのはなぜですか? SSDの速度は常に5倍になるはずです。

しかし、実際には、非シーケンシャルアクセスはSATASSDに比べてほとんどメリットがないことがわかります。

[〜#〜]編集[〜#〜]

答えは大きなファイルと小さなファイルの違いに集中しているので、私の質問を明確にしましょう:

  • はい、小さなファイルにはオーバーヘッドがあります。
  • そして、はい、彼らは無視されるデータを読み取ることによって時間を無駄にします。
  • しかし、これは私の質問とは無関係です。なぜなら、すべての読み取りと書き込み(厄介な小さなMFT書き込みなどを含む)は(というかshould)x5の速度ゲインを参照してください。

無駄なドライブアクセスがあると言っても、それは変わりません。なぜ1GBが10001MBほど速くないのか私は尋ねていません。私は理由を尋ねています:

(1GB_NVMe/1GB_SSD)!=(1000x1MB_NVMe/1000x1MB_SSD)

1
ispiro

ここでの問題は、NVMeとSSDは一般に、フラッシュメモリを使用するために回転するよりも高速ですRust)が、1秒あたり数ギガバイトのデータを転送するNVMeの機能は、フラッシュの方法によるものです。コントローラの周囲にメモリが配置されています。

高速フラッシュデバイスは、(それ自体が)単に高速フラッシュメモリチップであるもの全体で、RAID0と同様のスキームを効果的に使用します。各チップはそれ自体で特定の速度を処理できますが、その兄弟と結合すると、複数のデバイスに同時にデータを書き込んだり、複数のデバイスからデータを読み取ったりすることで、はるかに高速な集約速度を実現できます。

事実上、大規模な転送では、転送の並列処理を利用して、複数のチップから複数のブロックを要求できるため、大規模な転送とともに、8シーク時間を(複数のチップにわたる)単一のシークに短縮できます。コントローラには、必要な方向にデータを順次ストリーミングできるように、バッファリングとキューイングがあります。

個々のフラッシュチップ自体も、将来の要求のために数ブロック先読みし、(書き込みのために)それを小さな内部バッファにキャッシュして、将来の要求の遅延をさらに減らすように構成することもできます。

多数の小さなファイルを処理する際の問題は、単一の大規模な転送を実現するために使用されるすべてのスマートを無効にしてしまうことです。コントローラは、データのブロックを要求し、応答を待ち、キュー内の次のアイテムを調べ、そのデータを要求するなど、フラッシュデバイス間を行き来するキューで動作する必要があります。

読み取りまたは書き込み中のデータが別のチップ上にある場合、複数のチャネルを使用できる可能性がありますが、lots of小さな書き込みの場合、最終的に表示されるのは、チップの配列の完全なパフォーマンスではなく、単一のフラッシュチップのパフォーマンスです。

したがって、何千もの小さな読み取りまたは書き込みは、デバイスがいわゆる「完璧な」条件下で完全に機能するものではなく、NVMeデバイスのごく一部のパフォーマンスのみを実際に示す可能性があります。

4
Mokubai

多くのファイルをコピーするには、NTFSファイルシステムの不可欠なコンポーネントである マスターファイルテーブル(MFT) にエントリを作成するオーバーヘッドが伴います(NTFS以外のファイルシステムと同等のものがあります)。

つまり、ファイルを作成するには、重複を避けるために、最初にMFTで名前を検索し、次にスペースを割り当て、ファイルをコピーし、最後にMFTのエントリを完成させる必要があります。

多くのファイルのコピーを劇的に遅くするのは、この簿記のオーバーヘッドです。オーバーヘッドには、オペレーティングシステムでの作業の照合、RAMテーブル、コンピューター割り込み、システムコールなど)の更新が含まれます。ファイルを閉じると、オペレーティングシステムがそのファイルをディスクにフラッシュするため、時間がかかります。また、データのスムーズなコピーを妨げ、NVMeがその潜在能力に近いパフォーマンスを達成できないようにします。

注:多くのファイルのコピーが遅いというこの問題は、NVMeに固有のものではありません。機械式またはSSD、SATAまたはNVMeのいずれの種類の高速ディスクでも、まったく同じ問題が発生します。私の考えでは、これは、おそらく非効率的なキャッシュメモリアルゴリズムやディスクドライバが原因で、このケースの非効率的なOS処理に問題があることを証明しています。

2
harrymc