web-dev-qa-db-ja.com

さまざまなキューの深さでストレージのパフォーマンスが変化するのはなぜですか?

私はサーバーのストレージアップグレードを求めています。さまざまなPCIeSSDデバイスのベンチマークを調べていますが、比較すると、IOPSはさまざまなキューの深さで変化することがわかります。それはどのようになり、なぜそれが起こっているのですか?私が物事を理解する方法は次のとおりです。私は最大(理論上)100kIOPSのデバイスを持っています。ワークロードが一貫して100,001IOPSを生成する場合、キューの深さは1になりますが、正しいですか?ただし、ベンチマークで確認したところ、一部のデバイスは、キューの深さが浅くなると実行速度が遅くなり、深さ4〜64で速度が上がり、さらに深い深さで再び遅くなります。キューの深さはOS(またはおそらくストレージコントローラー)のプロパティではないのに、なぜそれがIOPSに影響するのでしょうか?

5
Mxx

簡単に言うと、未処理のIOリクエストが複数ある場合、ハードドライブはデータの取得を最適化します。これにより、通常、レイテンシが犠牲になり、スループットが向上します。

NCQはこれを行い、スループットを最適化するためにIOリクエストを並べ替えます。

SSDは、データを保存するための並列フラッシュチップを備えているため、メカニカルドライブとは動作が異なります。つまり、一度に1つのIOリクエストを発行すると、レイテンシ(検索+読み取り時間)によってIOPSが決定されます。ただし、一度に4つのリクエストを発行すると、ssdディスクはそれらを並行して取得できる可能性があります。別の最適化された方法で、4倍のスループットが得られる可能性があります。

キューの深さが深いほど、ディスクを最適化する可能性が高くなります。 IOPSはスループットの関数であるため、キューの深さが深くなるとIOPSが増加します。

編集:

真のキューは、すべての要求を発行しているOSに存在します。そうは言っても、コントローラードライバーは、最適化されたキューの深さで動作できるように、一定量のキューをコントローラーとディスクに渡すと推測します。最適化するには、ディスクに独自のキューが必要です。

5
Molotch

古い質問ですが、それが見られる回数のために、より多くの情報に値します。この回答はSSDに基づいています。これは、元の質問がそれであるためです。

キューの深さと、キューの深さに基づくIOPSの変動。キューの深さが1であると考えてください。この場合、指定された仕様は、システムが生成している要求の数に遅れをとっているドライブに基づいていませんが、代わりに、システムがSSDに対して1つの要求を生成することを意味します。リクエストにはトランザクション時間があります。したがって、一度に1つのリクエストしか送信されない場合、SSDは1つのリクエストしか処理できません。これは理にかなっているはずです。トランザクション時間のため、一度に1つのリクエストを送信する方が、一度に32のリクエストを送信するよりも遅くなります。これは、QD32のような仕様の意味です。

また、別のコメントが指摘しているように、SATAではなくPCIeで、SSDと並行して読み取り/書き込みを実行できる場合があります。

たとえば、Samsung 970 Proの場合、QD1 = 55,000、QD32 = 500,000IOPSです。これは基本的に、一度に32リクエストするのに対し、1つのリクエストを送信するためです。トランザクション時間が短縮されるため、主にデータ送信を処理します。したがって、多くのトランザクション処理を差し引くと、データ転送の実際の機能が向上します。

したがって、ディスクに指定されている仕様は、キューの深さの定義とまったく同じではありません。システムに関するキューの深さは、基本的に、処理されていないリクエストの数です。この仕様は、システムが一度にドライブを送信するトランザクションに基づいています。ただし、SANを処理している場合、キューの深さは基本的に実行中の要求の数です。そのため、その用語の正確な定義についてはよくわかりません。私には、それはあなたが参照しているシステムの特定の部分によって異なるようです。

OSとデバイス間のトランザクションに関しては、デバイスは一定量のトランザクションをバッファリングし、その後、OSはそれ以上のトランザクションを送信しません。整然とした処理を可能にするハンドシェイクの形式が必要です。つまり、OSは、物理的に保持できる以上の要求をドライブに送信できません。そうしないと、混乱が生じ、システムの設計が不十分になります。

つまり、「着信要求を受け取ったがキューの深さがいっぱいになったときに何が起こるか」のような質問は、ディスクに関しては決して起こらないはずであり、ディスクには要求を保持するための「キューの深さ」がありません。 「キュー」があります。ドライブが保持するリクエストの物理的な数は、ドライブのタイプによって異なります。小さすぎたり、ディスクが読み取り/書き込みを適切に最適化できなかったり、大きすぎたりすることはできません。コストが1つであり、特定の数のリクエストがキューに入った後に最適化できないなど、さまざまな理由があります。おそらく別のでしょう。

2
JLS