知られざる新機能 SMB圧縮でファイルコピーを2倍以上高速化!

Windows全般
スポンサーリンク

Windows 10 バージョン2004あたりから、SMB(Windows ファイル共有のプロトコル)に圧縮転送機能が追加されています。これによってファイルコピーが高速化するのですが、これを有効化するためには設定が必要です。あと、OSの組み合わせなどの条件もあります。ここで解説する内容を実践すれば、環境次第ではファイル転送の時間を大幅に短縮できる可能性があります。

SMB圧縮でどのくらい高速化する?

SMB圧縮の有無でどのくらいファイル転送が高速化するか、実験環境でエクスプローラーのファイルコピー速度を比較しました。下のように、2倍以上(59%減)という結果になりました。

SMB圧縮なしSMB圧縮あり
1分20秒33秒 (59%減)

コピー速度は変動しますが、今回のケースでは2倍以上をキープしています(上がSMB圧縮無し、下がSMB圧縮あり)。

対象ファイルは、約927MBのメモリダンプファイルです(タスクマネージャーで適当なプロセスで「ダンプファイルの作成」したもの)。このファイルを普通にZIP圧縮した場合のサイズは269MBですが、素のファイルでコピーしています。コピー元・先ともにWindows 10 21H1で、100Mbpsのネットワークで接続されている想定です(仮想化環境で疑似的に構成)。

SMB圧縮が効く条件

SMB圧縮はデフォルトでは有効にならず(2021年8月時点)、後述のレジストリ設定が必要です。それだけでなく、以下の条件を全て満たす場合、エクスプローラー等でのファイル転送(コピーや移動)時にSMB圧縮が自動的に有効になるようです。

  1. ファイル転送元・先どちらも以下のOSである
    • Windows 10 バージョン 2004以降
    • Windows 11
    • Windows Server 2022
    • または上記より新しいバージョン(推測)
  2. 受信方向のファイル転送(相手から自分へ)である
  3. レジストリ値「EnableCompressedTraffic = 1」を設定している(後述)

図にするとこんな感じです。

レジストリ設定方法

前述のレジストリ設定の方法は以下の通りです。自コンピューター(受信方向のファイル転送を実行する側)でこの設定をしておくと、条件が揃ったときに自動的にSMB圧縮が有効になります。

まずレジストリエディターを起動します。[Win] + [R]キーを押して「ファイル名を指定して実行」を開き、「regedit」を入力して「OK」を押します。

レジストリエディターの左のツリーから、[HKEY_LOCAL_MACHINE] > [System] > [CurrentControlSet] > [Services] > [LanManWorkstation] > [Parameters] とたどります。その後下のように、右クリックして「新規」→「DWORD(32ビット)値」を選択します。

値の名前を「EnableCompressedTraffic」と設定します。値をダブルクリックし、下のようにデータを「1」に設定に設定します。

下のようになっていれば、レジストリエディターを閉じて準備OKです。OSの再起動は不要で、以降からSMB圧縮が(条件が揃えば)有効になるはずです。

補足

robocopyコマンドなら「/compress」がレジストリの代わりに

ファイル転送をエクスプローラーでなく、robocopyコマンドで行う場合の話です。前述のレジストリ設定の代わりに「/compress」オプションを指定することでも、SMB圧縮が有効になります。詳しくは以下の記事にまとめていますので、そちらを参考にして下さい。

すでに「SMB圧縮無効化」されている環境では?

SMB圧縮機能は、過去に脆弱性が発見され、修正パッチが提供されたことがあります。この時、別の回避策として「SMB圧縮を無効化する」方法がMicrosoftなどからアナウンスされました(こちらのページなど)。この回避策を行った場合、下のように「DisableCompression = 1」という値が設定されているはずです。

世の中には、この「SMB圧縮無効化」設定がされたPCが一定数あるのではないかと思います。ではこの環境で、前述の「SMB圧縮有効化」設定を行うとどうなるのでしょうか?

Windows 10 バージョン21H1で試したところでは、SMB圧縮が有効になりました。 「DisableCompression = 1」 と「EnableCompressedTraffic = 1」が両方設定されている場合は、後者(有効化)が勝つということですね。とはいえ、両方設定するのはトラブルのもとになりかねませんので、片方は消しておくべきでしょう。

参考リンク

MicrosoftのWebページです。今回の内容について詳しく解説されています。

フィードバック

フィードバック

コメント

タイトルとURLをコピーしました