IRP_MJ_WRITE のレイテンシは最大 15 秒

IRP_MJ_WRITE のレイテンシは最大 15 秒

私たちは、同じローカル ボリューム (RAID1) 上の複数のファイルに一度に小さな (22kB) 書き込みを実行するアプリケーションを作成しました (1 つのスレッドが他のスレッドに代わって複数の場所に非同期キュー書き込みを実行します)。
書き込みの 99.9% は低遅延ですが、ときどき (おそらく 1 分か 2 分に 1 回)、特に説明のない非常に遅延の大きい書き込み (10 秒以上) が 1 回か 2 回発生します。

プラットフォーム: NTFS 搭載の Win2003 Server。
監視: Sysinternals Process Monitor (以下のリンクを参照) および当社独自のアプリケーション ログ。

私たちは、いくつかの Web サイトから収集した情報を基に、この問題を解決するためにさまざまなことを試しました。たとえば、

  • ファイル名の最初の部分を一意にして、8.3 の名前生成を支援する

  • 複数のディレクトリにファイルを書き込む

  • Intel ディスク書き込みキャッシュの変更

  • Windows ファイル/プリンタ共有

    • メモリ使用量を最小限に抑える

    • バランス

    • ファイル共有のデータスループットを最大化

    • ネットワークアプリケーションのデータスループットを最大化

  • システム->詳細->パフォーマンス->詳細

  • NtfsDisableLastAccessUpdate - fsutil behavior setdisablelastaccess 1 を使用する

  • 8.3 の名前生成を無効にする - 「fsutil behavior set enable8dot3 1」を使用して再起動します

  • 大容量のファイルシステムキャッシュを有効にする

  • カーネルコードのページングを無効にする

  • IO ページロック制限

  • インデックスサービスをオフ(またはオン)にする

しかし、何も大きな違いはないようです。まだ試していないことがたくさんありますが、同じ問題、原因、解決策(プログラムによるものかどうかは関係ありません)に遭遇した人はいるでしょうか?

IOMeter と簡単なセットアップを使用して問題を再現できます。

  1. IOMeter を起動し、切断ボタンを使用して「トポロジ」の最初のワーカー スレッドを除くすべてのスレッドを削除します。

  2. ワーカー スレッドを選択し、[ディスク ターゲット] タブで使用したいディスクの横にあるボックスにチェックを入れ、[最大ディスク サイズ] に「2000000」と入力します (注: 少なくとも 1 GB の空き領域が必要です。セクター サイズは 512 バイトです)

  3. 次に、新しいアクセス仕様を作成し、それをワーカー スレッドに追加します。

    • 転送要求サイズ = 22kB

    • 100% シーケンシャル

    • アクセス仕様の割合 = 100%

    • 読み取り/書き込み率 = 100% 書き込み

  4. 結果表示の更新頻度を 5 秒に、テスト セットアップの実行時間を 20 秒に変更し、両方の「自動的に生成するワーカーの数」設定を 0 に変更します。

  5. トポロジ パネルでワーカー スレッドを選択し、ワーカーの複製ボタンを 59 回押して、同一設定のスレッドを 60 個作成します。

「実行」ボタン (緑の旗) を押して、「結果」タブを監視します。「最大 I/O 応答時間 (ミリ秒)」は、私たちのマシンでは常に少なくとも 3500 に達します。私たちのマシンはそれほど遅いわけではありません (4GB とオンボード RAID を備えた Xeon 8 コア ラック サーバー)。

他の人がどうなっているか興味があります。これは NTFS ファイルシステムに関係しているのではないかと思います (現在、私たちのファイルシステムは 75% が断片化されたファイルで占められています)。この原理に基づいていくつか試してみるつもりです。しかし、これは RAM ディスクでは見られず、RAID10 アレイではそれほど深刻ではないため、ディスク パフォーマンスにも関係しています。

ご協力いただければ幸いです。
リチャード

右クリックして「リンクを新しいタブで開く」を選択します。
ProcMon 結果

答え1

この問題に関して、より多くの情報が手に入りました。

さまざまなハードウェアを使用して 12 台の異なるマシンで説明した IOMeter テストをテストした結果、特定の RAID チップセットに絞り込むことができました (同じチップセットを搭載した 3 台の異なるマシンが RAID1 と RAID10 を使用してこの動作を示しています)。他のすべてのマシンでは、少なくとも 1 桁良い結果が得られました。

チップセット: Intel 631xESB/632xESB SATA RAID (別名 ESB2)

詳しい情報と、できれば Intel からの回答については、Intel サイトのこの投稿を参照してください。
Intel 631xESB/632xESB SATA RAID (別名ESB2) の書き込みが遅い

リチャード

関連情報