裏LANを使ったファイルコピーが遅い という話。
うちのパソコン達のネットワークは、ざっくりこんな感じ(今は少し違います)
※デフォルトゲートウェイは片方にしか設定していません。
これで、メインPC から 仮想用PCに、ふつ~に、エクスプローラとかrobocopyとかでファイルコピーをするときの話です。
172.16.1.11と192.168.1.11 のIPを持つマシンから、172.16.1.21と192.168.1.21のIPを持つマシンに対して通信をするケースです。インタネット接続のLANを172.16.0.0/16として、192.168.0.0/16を裏LANとしてバックアップ用に使うようなことはよくあるでしょう。
エクスプローラで
\\192.168.1.21\share
と共有フォルダを開いてドラッグアンドドロップとか、
robocopy .\ \\192.168.1.21\e$ /MIR /DCOPY:DAT /COPY:DAT /W:1 /R:1 /NP /XD "$RECYCLE.BIN" "System Volume Information" /LOG:.\e.txt
みたいな感じにコピーをするときの話。
うちの環境では「ファイルコピー異様に遅かった」です。
ping の応答や、 mstsc でリモートデスクトップ接続してもなんら問題がなく、ファイルコピーではいきなり何時間もかかるレベルで遅くなります。
原因は SMBマルチチャネル というやつ。
これ、Windows では既定値で「オン」になっているようです。
しかし、うちの環境のshuttle SH170R6 / SH170R8 / SZ170R8 搭載の Intel I210-LM を 172.16.0.0/16側として、裏用途で安価なRealTek(蟹チップ)搭載のTP-LinkのPCI-Express用NICを増設して192.168.0.0/16のLANを作りました。
※裏用途=いかがわしい話ではない
いろいろ調べていて、SMBマルチチャネルが原因ではないかと考えて、Powershellで以下のコマンドを実施。
Set-SmbServerConfiguration -EnableMultiChannel $false Set-SmbClientConfiguration -EnableMultiChannel $false
これのServerはサーバーOS(Windows Server 2016とか)の意味ではなくて、ファイルコピーの元(source)と先(distination)なので、この際、両方のパソコンで上記のコマンドを打ってSMBマルチチャネルを無効にしました。
なんということでしょう~
あれだけ遅かったファイルコピーが一瞬。
おばあちゃんの思い出のjpegファイルの転送もこの通り。PCに笑顔が戻ってきました。
さすが匠の技です。
対応してないNICだと勝手にオフになるみたいな記述もみたのですが、現実、そうはなっていませんでした。
また、仕事の場面で高価なサーバーで似たようなこと(裏LANを使ってバックアップ)をやりました。
片方をNAS風に利用するバックアップのデータをためるマシンにして、メインのマシンからバックアップ(この時はWindows Serverバックアップで丸っとバックアップとか、大量のファイルをrobocopyで転送)していたのですが…
2台のサーバー間が2つの経路でつながる場合、このSMB Multi Channelが動作します。
しかし、ネットでみたような「倍の帯域が使える」のではないようでした。
片系のみ接続していると750Mbps程度の速度で転送かかるのに、両方つなげてSMBマルチチャネルが有効になると、仲良く350Mbps程度の帯域でコピーをしていました。
これは
robocpoy .\share \\nassv.shonanfujisawa.net\share /MIR
のようにマシン名(NetBISの場合もFQDNの場合も)で行ったときになるのではなく、
robocpy .\share \\192.168.1.21\share /MIR
のようにIPアドレスを指定しても同様でした。
明示的にIPアドレスを指定したコピーの際でも勝手に働く、ビッグなお世話の機能です。バックアップLANを作ったから、こっちでバックアップすれば業務LANの帯域を食わないね…なんて思って設定をすると、びっくりたまげた門左衛門です。