SNP(Scalable Networking Pack)の罠

ここ最近、ずっとという訳ではないが頭を悩ませていた問題がようやく原因っぽいものが判明して少し安堵している。

現象としては

  • 当該サーバー上でアプリケーションを操作する分には問題なし
  • 別端末からサーバーに対してアクセスした時に、通信が途絶える(応答がなくなる)
  • サーバー側では端末からの処理要求は来ているが、応答することが出来ずにタイムアウトとなる
  • データ量によって出来たりできなかったりするような動きが見える
  • 単純に大きなデータを受け渡しするようなプログラムを作って検証したら問題なかった

という感じ。
アプリケーション側の問題というよりはネットワーク関連の問題ではないかとは思っていたのだが、帯域に制限がかかっている訳でもないしファイアウォールのルールのような制限を受けているという訳でもなさそう。

結局のところ、原因としてはWindows Server 2003 Service Pack 2から導入されたSNP(Scalable Networking Pack)が悪さをしていたようだ。

Scalable Networking Pack

これは、ネットワークに対してこれまでOS側が実装してきた処理の一部をドライバ側に譲渡させることによって更なる効率化を可能にしようとした技術らしい。
餅は餅屋よろしくネットワークのことはネットワーク担当に任せて、CPUの負荷を下げることが出来る・・・とのこと。

ただ、これが最初に有効状態で出荷されたWindows Server 2003 Service Pack 2ではメーカによるのか組み合わせによるのか。うまく動かないことが多発してMicrosoftが設定を無効化するパッチを出すところまでいってしまったもの。
内容と設定の無効化方法に関してはこちらの記事を参照されたい

ネットワーク設定を標準で使ってはいけない (IT Pro)
http://itpro.nikkeibp.co.jp/article/COLUMN/20100824/351391/


実はこれが問題を引き起こすということは2003SP2が出た時に経験していたのだが、今回問題となったサーバーは2008のR2だしいい加減その辺りは問題にならないだろうとタカをくくっていた。
2008サーバーでこれまで問題にはなっていなかったということもある。

結局原因調査のためにネットワークモニタをインストールしてトレースまでとって、トレースの出方が変だったことから再度疑ってみたらビンゴするという結末だった。
この問題の厄介なところは、"いまいちよくわからないけどうまく行かないパターンがある"って見えて原因の予測がたてられなかったところ。
いや、予測という意味では早期にネットワークを疑った訳だが、具体的にネットワークの何が問題なのかが傍目から見えないんですよね。

そもそもSNPはよほどのトラフィックが発生する状況でなければあまり気にしなくてもいいレベルとも見受けられるので、今後は無条件に無効にしてしまうのがいいかもしれないな。

いやはやいやはや、やれやれだ
「やってはいけない」なんて記事が書かれているようなことをデフォルトで有効にしておいてほしくないし、ドライバ側のメーカーもそんな状態を放置しないでほしいというのが正直なところだが、大人の事情があるのだろう。