Windowsのファイル共有を使っていたところ、ファイル数が多いディレクトリでファイル名の列挙に時間がかかることに気づいた。状況を整理すると、
・ファイルサーバ側(WinXP SP1)、クライアント側(WinXP SP1)
・クライアント側からNBTでサーバ側のディレクトリにアクセスしたときに発生
・サーバ側のファイル数は600程度で日本語を含む
・ファイルの列挙(要はdir/ls)にかかる時間は4秒程度
・ファイルの列挙に時間がかかるだけで、転送速度そのものが遅くなっているわけではない
・パケットをキャプチャしてみたが余計なパケットは飛んでいないように見える
・dirで確認すると一定の転送量ごとに何かがつっかえている感じ
・サーバー側・クライアント側入れ替えても発生
・クライアント側からLinux+sambaの自宅サーバにアクセスするとこの現象は発生しない
フォーカスが移るたびに読み直すファイラー(春M)でアクセスするから困るのであって、実はエクスプローラだとそんなに問題はない。また、1ディレクトリに100も200もファイルを置いている方がおかしいと言われればそれまで。レジストリの調整で解決できそうな予感はあるのだが、情報としては発見できなかった。
一応実験としてcoLinuxをサーバ側にインストールし、sambaで共有して速度が向上するか確認することにする。coLinuxのネットワークはホストマシンのNICとブリッジ接続にする。coLinuxからcofsでホストマシンのディレクトリをマウントし、sambaで共有させた。
結論から言うと、ファイル名の列挙に関しては速度が向上したが、根本的なアクセス速度が落ちた。netperfによる簡易計測であるが、クライアント側からスループットを比較したところホスト側(WinXP)では90~92Mbps、ゲスト側(coLinux)では47~48Mbpsとなった。なんと2倍近い差がある。アクセス速度に関しては、1000Mbpsで繋げば簡単に向上するかもしれないが、実験していない。これはそのうち追試。またこの方法の問題として、日本語ファイル名を下位に含むディレクトリではcofsで総ファイルサイズが取得できない(dfからしてinput/output Errorとなる)。結局魔法のステッキにはなってくれないようである。
win32版sambaとかあればなあ……(バカ)
暫定的な解決手段としては、ディレクトリ整理と春Mをあきらめてエクスプローラを使う。ただもう春Mからは離れられそうにないのでさっさと整理が一番正しい。