小技プログラミング

Windows7でExcelファイルのネットワーク保存が遅い

Windows7でネットワーク上にある共有フォルダに対してExcelファイルの「開く」or「保存」or「閉じる」が急激に遅くなった事がありませんか?

私の環境ではWindows7でOffice2010を利用してネットワーク上のファイルサーバに保存する際に発生しました。
極端に処理が遅くなり、本来5秒あれば終わるような保存が10分近く掛かりました。

Officeのバージョンが問題かと思い、Office2010をアンインストールして、Office2003を入れてみましたが結果は同じでした。
どうやらOfficeだけの問題では無さそうです。

調べてみたところ、Windows7のSNP(Scalable Networking Pack)というネットワーク処理を最適化させる為の機能に原因があるようです。(2012/8現在)

このSNPには、次の3つの機能があります。
1.Receive Side Scaling(RSS)
2.TCP Chimney Offload
3.Network Direct Memory Access(NetDMA)

上記3機能が一体何をしているのかというと、

『Receive Side Scaling(RSS)』
  ⇒TCPの受信に関する処理を複数のプロセッサで処理して、負荷の分散化を行う機能。

『TCP Chimney Offload』
  ⇒TCPネットワーク制御の負荷を別のモジュールで処理してプロセッサの負荷を減らす機能。

『Network Direct Memory Access(NetDMA)』
  ⇒NIC(Network Interface Card)からのメモリのアクセス効率を向上させる機能。

らしいのですが、どうもこの機能がうまく働いていないようです。

早速、管理者権限でコマンドプロンプトを起動し、以下のコマンドを実行してSNPの起動状態を調べてみました。
netsh int tcp show global

『Receive-Side Scaling 状態』と『Chimney オフロード状態』と『NetDMA 状態』の3つの状態を確認します。
 enabled や automatic になっている場合は、SNPが有効になっている状態です。

それでは、本来あるべき機能が果たせていないSNPを全て停止させてしまいます。
1.まず、RSSを以下のコマンドで無効化します。
netsh int tcp set global rss=disabled

2.次にTCP Chimney Offloadを無効化します。
netsh int tcp set global chimney=disabled

3.最後にNetDMAを無効化します。
netsh int tcp set global netdma=disabled

成功すると、OKが表示されます。

最後にもう一度状態を確認します、3つともステータスが『disabled』になっている事を確認して完了です。
netsh int tcp show global

後はPCを再起動して、動作確認します。
私の環境はこれで見違えるほど処理が速くなりました。

SNP機能が改善されるまでの、暫定的な対応になりそうです。