NGINX-プログラマー向けの「Optimization for Windows」の加速または探偵

Windows上でのnginx に関する最後の記事からかなりの時間が経ちました。nginxの週は終わりました 。 この省略を修正する価値があります。



突然自由な時間があることがありますが、何か価値があることは十分ではありませんが、Habr読むためにスキルをアップグレードする気はありません。

何か便利なことをするために、1つのプロジェクトのいくつかのサーバーからのログを分析することにしました。



前の分析の結果と比較して少し分析して評価したところ、奇妙なことに気付きました。nginxの絶対収益率は平均で5から15%に下がりました。



襲撃の原因を説明することはできませんでした。大きな変更はなく、データ量もそれほど増加しませんでした。 そして、ダイナミクスの影響に大きな変化はほとんどありません。



このようにログをねじると、少しの統計情報の戻りに夢中になりました-1つの規則性が見つかりました:パス(url)が長くなると-「遅い」nginxが(ファイルサイズに関係なく)なりました。



したがって、いくつかの実験の後、次の事実があります。

そして、インスピレーションが生まれました-このプロジェクトでファイル構造が変更されたことを思い出し、ファイルによって与えられた静的および動的へのネスティング(リダイレクトによる)が2つまたは3つ、いくつかの場所で最大5つのディレクトリに増加しました。



プロファイラアナライザーのデバッグバージョンのコンパイルは面倒でした。「演ductive的」な方法でそれを探します。



包囲を使用して、平均戻り速度「test.gif」を測定します-約5500 rps(nginx 4ワーカー、一致15)。



ルート "D:\ ... \ ms \ ms \ ms \ ms \ ms \ ms \ ms \ ms"でテスト場所を作成します。ここで、msパスのセグメントが60回繰り返され、URL "test-loc / test.gif"を要求します。

繰り返しますが、平均戻り速度を測定します。すでに900 rpsです。



おそらく、これはパスの合法性をチェックするレベルのどこかにあります。 URL "test-loc / test-file-not-exists.gif"を使用して存在しないファイルの404を測定しようとしています-速度は13167 rpsに上がり、ネストの奇妙な方法は問題ではなくなりました。



nginxロギングでデバッグを有効にし、小さなネストパスと大きなネストパスを比較してログを詳細に分析します。 平均して、「http要求行」から「httpファイル名」までの時間は同じですが、長いパスのレコード「http static fd」はすでにかなり遅れています。



非常に奇妙なので、監視プロセスを使用して何が起こっているのかを確認しようとしています。

ネタバレの下には次の写真があります
15:23:43,2205361 nginx.exe 9780 CreateFile D:\ SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened 15:23:43,2206208 nginx.exe 9780 QueryDirectory D:\Projects SUCCESS Filter: Projects, 1: Projects 15:23:43,2206430 nginx.exe 9780 CloseFile D:\ SUCCESS 15:23:43,2207337 nginx.exe 9780 CreateFile D:\Projects SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened 15:23:43,2207844 nginx.exe 9780 QueryDirectory D:\Projects\app_srv SUCCESS Filter: app_srv, 1: app_srv 15:23:43,2208009 nginx.exe 9780 CloseFile D:\Projects SUCCESS 15:23:43,2208728 nginx.exe 9780 CreateFile D:\Projects\app_srv SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened 15:23:43,2209238 nginx.exe 9780 QueryDirectory D:\Projects\app_srv\tmp SUCCESS Filter: tmp, 1: tmp 15:23:43,2209383 nginx.exe 9780 CloseFile D:\Projects\app_srv SUCCESS 15:23:43,2210075 nginx.exe 9780 CreateFile D:\Projects\app_srv\tmp SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened 15:23:43,2210615 nginx.exe 9780 QueryDirectory D:\Projects\app_srv\tmp\ms SUCCESS Filter: ms, 1: ms 15:23:43,2210764 nginx.exe 9780 CloseFile D:\Projects\app_srv\tmp SUCCESS 15:23:43,2211466 nginx.exe 9780 CreateFile D:\Projects\app_srv\tmp\ms SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened 15:23:43,2211995 nginx.exe 9780 QueryDirectory D:\Projects\app_srv\tmp\ms\ms SUCCESS Filter: ms, 1: ms 15:23:43,2212141 nginx.exe 9780 CloseFile D:\Projects\app_srv\tmp\ms SUCCESS 15:23:43,2212813 nginx.exe 9780 CreateFile D:\Projects\app_srv\tmp\ms\ms SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened 15:23:43,2213326 nginx.exe 9780 QueryDirectory D:\Projects\app_srv\tmp\ms\ms\ms SUCCESS Filter: ms, 1: ms 15:23:43,2213462 nginx.exe 9780 CloseFile D:\Projects\app_srv\tmp\ms\ms SUCCESS 15:23:43,2214193 nginx.exe 9780 CreateFile D:\Projects\app_srv\tmp\ms\ms\ms SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened 15:23:43,2214677 nginx.exe 9780 QueryDirectory D:\Projects\app_srv\tmp\ms\ms\ms\ms SUCCESS Filter: ms, 1: ms 15:23:43,2214806 nginx.exe 9780 CloseFile D:\Projects\app_srv\tmp\ms\ms\ms SUCCESS # ... 106 lines ... # 15:23:43,2265328 nginx.exe 9780 CreateFile D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened 15:23:43,2265851 nginx.exe 9780 QueryDirectory D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS Filter: ms, 1: ms 15:23:43,2265980 nginx.exe 9780 CloseFile D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS 15:23:43,2266665 nginx.exe 9780 CreateFile D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened 15:23:43,2267165 nginx.exe 9780 QueryDirectory D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS Filter: ms, 1: ms 15:23:43,2267291 nginx.exe 9780 CloseFile D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS 15:23:43,2267976 nginx.exe 9780 CreateFile D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened 15:23:43,2268489 nginx.exe 9780 QueryDirectory D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS Filter: ms, 1: ms 15:23:43,2268622 nginx.exe 9780 CloseFile D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS 15:23:43,2269314 nginx.exe 9780 CreateFile D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened 15:23:43,2269814 nginx.exe 9780 QueryDirectory D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS Filter: ms, 1: ms 15:23:43,2269946 nginx.exe 9780 CloseFile D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS 15:23:43,2270615 nginx.exe 9780 CreateFile D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened 15:23:43,2271135 nginx.exe 9780 QueryDirectory D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS Filter: ms, 1: ms 15:23:43,2271264 nginx.exe 9780 CloseFile D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS 15:23:43,2271989 nginx.exe 9780 CreateFile D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened 15:23:43,2272525 nginx.exe 9780 QueryDirectory D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS Filter: ms, 1: ms 15:23:43,2272654 nginx.exe 9780 CloseFile D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS 15:23:43,2273343 nginx.exe 9780 CreateFile D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened 15:23:43,2273876 nginx.exe 9780 QueryDirectory D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS Filter: ms, 1: ms 15:23:43,2274005 nginx.exe 9780 CloseFile D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS 15:23:43,2274743 nginx.exe 9780 CreateFile D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened 15:23:43,2275246 nginx.exe 9780 QueryDirectory D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS Filter: ms, 1: ms 15:23:43,2275375 nginx.exe 9780 CloseFile D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS 15:23:43,2276034 nginx.exe 9780 CreateFile D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened 15:23:43,2276531 nginx.exe 9780 QueryDirectory D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS Filter: ms, 1: ms 15:23:43,2276657 nginx.exe 9780 CloseFile D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS 15:23:43,2277332 nginx.exe 9780 CreateFile D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened 15:23:43,2277819 nginx.exe 9780 QueryDirectory D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS Filter: ms, 1: ms 15:23:43,2277944 nginx.exe 9780 CloseFile D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms SUCCESS 15:23:43,2278987 nginx.exe 9780 CreateFile D:\Projects\app_srv\tmp\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\ms\test.gif SUCCESS Desired Access: Generic Read, Disposition: Open, Options: Synchronous IO Non-Alert, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
      
      







さらに、これは各リクエストに対して2回、おそらく開くときに1回、ファイル属性を読み取るときに2回観察されます。



nginxのソースを[src]\os\win32\ngx_files.c



[src]\os\win32\ngx_files.c



関数が[src]\os\win32\ngx_files.c



ます。この関数は、ファイルが正常に開かれた場合にのみ(高速404を覚えています)、別の関数ngx_win32_check_filename



呼び出します(ファイル名の正当性を確認します)。

同じ関数ngx_win32_check_filename



が別の関数ngx_file_info



によって呼び出されます。 さて、虫眼鏡の下で「ハンドブレーキ」の役割の候補を考えてみましょう。



最初のステップは、セグメントの正しいパスを確認し、NTFSストリーム( ":")、末尾のドットとスペースなどを除外することです。 ただし、このループの本体では、システムコールは行われません。



先に進み、ブロックでGetLongPathNameW呼び出しが長いファイル名をチェックするのを確認してください。



テストのために、このチェックをコメントアウトし、nginxをコンパイルします-結果として、9100 rpがあります。以前はnginxが900 rpでした。

どうやらマキシムは、Windowsが再帰的に長いファイル名を返すこと、つまり 各サブディレクトリについて(そしてご覧のとおり、この情報はOSにキャッシュされません)。



残念ながら、この方法(つまり、完全に)8.3形式の短い名前(「testpa〜1 / testfi〜2.gif」)によるファイルへのアクセスを除外するためにこのチェックを削除する価値はありませんが、最良の機能は同じです、私は残念ながらわかりません。

ただし、上記の特別なフラグの設定を追加して、「〜」文字の存在を確認GetLongPathNameW



ます。存在する場合のみ、 GetLongPathNameW



を呼び出して長いパスを確認します。



その結果、最小限の変更で、速度が2倍から10倍に増加し(エンクロージャーとファイルサイズに依存)、ディスクサブシステムの負荷が大幅に小さくなります。



さて、いつものように、前(最初と3番目の列は** NFとマークされています)と後のパフォーマンスの比較です。

最初の2つは、短い(12セグメント)パス用です。

次の2つは、長い(55セグメント)パス用です。

パスセグメント ショート、12 ** NF ショート、12 ロング、55 ** NF ロング、55
取引 16732ヒット 28380ヒット 2962ヒット 26820ヒット
在庫状況 100.00% 100.00% 100.00% 100.00%
経過時間 2.96秒 2.96秒 2.97秒 2.97秒
転送されたデータ 7.21 MB 12.23 MB 1.28 MB 11.56 MB
応答時間 0.00秒 0.00秒 0.00秒 0.00秒
取引レート 5645.07トランス/秒 9591.08トランス/秒 996.04トランス/秒 9030.30トランス/秒
スループット 2.43 MB /秒 4.13 MB /秒 0.44 MB /秒 3.89 MB /秒
並行性 14.92 14.72 14.80 12/14
成功したトランザクション 16732 28380 2962 26820
失敗したトランザクション 0 0 0 0
最長トランザクション 0.11 0.11 0.12 0.12
最短取引 0.00 0.00 0.00 0.00
測定包囲(同時性:15)、win7-i5-2400 cpu @ 3.10GHz(4コア)、gif-static:452バイト(+ヘッダー)、4 nginxワーカー。



私はすでにこのPRをブランチnginx-modに統合しています。

時間があります。元のhgリポジトリの変更セットを作成し、CRをnginx-devに送信します。



All Articles