web-dev-qa-db-ja.com

スプリットIOとは何ですか?

Windowsパフォーマンスモニターで物理ディスクの分割io/secカウンターの意味を理解しようとしていますが、単一のIO操作が複数に分割される可能性がある理由がわかりません。 Microsoftのドキュメントへ:

ディスクへのI/O要求が複数の要求に分割された割合を示します。分割I/Oは、サイズが大きすぎて単一のI/Oに収まらないデータを要求した場合や、ディスクが単一ディスクシステムで断片化されている場合に発生することがあります。

運用システムは、要求されたデータが大きすぎて要求を分割する必要があることをどのようにして知るのでしょうか。固定しきい値はありますか、それとも計算されていますか?断片化はファイルシステムの概念です。そして、私の理解から、スプリットioカウンターは、ファイルシステムのレイヤーよりも低いディスクドライバーの内部から収集されているため、要求されたブロック(またはシーケンシャルブロックのグループ)が断片化されたファイルに属しているかどうかわかりません。私が間違っている?

1
tokitux

各ブロックデバイスは、(少なくとも)2つの異なるIOサイズを指定できます:

  • 最小ブロックサイズ:デバイスが受け入れる最小ブロックサイズ(多くの場合512Bまたは4 KB)
  • 最大ブロックサイズ:デバイスが1回の転送で管理できる最大ブロックサイズ(Windowsでは通常64 KB IDEおよびAHCIドライバー)。

上記から、デバイスがたとえば64 KBの最大ブロックサイズを指定しているが、アプリケーションが一度に128 KBを書き込む場合、各書き込みはtwo異なるIOリクエスト。

From here (これは古いドキュメントであることに注意してください):

64 KBのリクエストを使用すると、プロセッサー時間がほとんどなくなり、スループットが向上します。最大スループットは通常64 KBで発生しますが、一部のデバイスでは最大スループットサイズが高くなる場合があります。 64 KBを超えるデータブロックを転送する場合、I/Oサブシステムは転送を64 KBブロックに分割します。 64 KBを超えると、転送速度が急激に低下し、スループットが横ばいになります。プロセッサの使用と割り込みも64 KBで横ばいのようです。

2
shodanshok