裏LAN使ったファイルコピーがとても遅いとき

投稿者: | 2018年12月5日

裏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の帯域を食わないね…なんて思って設定をすると、びっくりたまげた門左衛門です。