n-Archives.net

SMB圧縮を利用してNW経由コピーを高速化する

Table of Contents


SMB圧縮を利用してNW経由コピーを高速化する

SMB(Server Message Block)は、Windowsのネットワークでファイル共有を行うためのプロトコルなのですが、昨年2020年頃にSMB圧縮という機能が追加され、ファイル転送時に自動的に圧縮・解凍を行うことができるようになっています。共有フォルダのファイルの読み書きを行う時に、

  • 転送元で自動的にファイルを圧縮
  • NW経由で転送
  • 転送先で自動的にファイルを解凍

という処理が自動的に行われます。ユーザが圧縮/解凍を意識することなく、日常のファイル操作が高速化できます。

ネットワーク経由のファイルコピーの場合、通常、転送速度のボトルネックはネットワーク部分になりますので、転送するデータサイズが圧縮されるほど、転送時間は短縮されることになります。もちろん、jpg, zipなどのすでに圧縮済みのファイルは、それ以上の圧縮効果は期待できないため、SMB圧縮による高速化はあまり見込めないですが、それ以外の圧縮可能なファイル、特に大きなファイルの転送では大きな高速化が見込めます。

 

なお、この機能については、現在、Windows Insider Previewにて開発が進行している状態で、近いうちに動作や設定方法が変更になる可能性がありますので、ご注意ください。本記事は 2021/12/5時点のWindows10の環境をベースに記載しています。

 

SMB圧縮の利用方法

現在、このSMB圧縮を利用したファイルコピーを利用する主な方法としては、以下の2つの方法があります。それぞれ、SMBサーバ、SMBクライアント側で、SMB圧縮を利用するための利用条件や設定がありますので、詳細については後の章で説明します。

 

①エクスプローラから利用する方法

 

 

エクスプローラなどのファイル操作ツールで共有フォルダからのコピーを実行すると、自動的に圧縮が行われるようになります。ただ、この利用方法には、現時点では以下の条件があるようです。

  • 現在のWindowsの設定では、SMBクライアント側で、設定を行わないとSMB圧縮による転送が有効になりません。
  • SMBサーバ → SMBクライアント 方向の転送時にのみ圧縮が有効になるようです。

このあたりは、おそらく今後修正されていくのではないかと思います。

詳細な設定方法については、後述の章をご覧ください。

 

②コピーツールから利用する方法

 

 

robocopyなどのコピーツールを使ってSMB圧縮を利用することも可能です。現在、SMB圧縮に対応しているコピーツールは robocopy と xcopy となっており、/compress オプションを付けて実行するとSMB圧縮によるコピーをSMBサーバ側に要求します。

上図の構成例において、共有フォルダ配下のファイルをローカルフォルダにrobocopyでコピーする場合のコマンド例は以下のようになります。

robocopy \\server\share d:\folder /COMPRESS

詳細な利用条件については、後述の章をご覧ください。

 

SMBサーバ側の設定

Windowsの条件

ネットワークファイル共有を行うSMBサーバ側は、SMB圧縮に対応したWindowsである必要があります。いろいろ調べてみると、現時点で以下のWindowsがSMB圧縮に対応しているようです。これらのWindowsでフォルダをネットワークに共有すると、SMB圧縮が自動的に働くようになっているようです。

 

※SMB圧縮に対応しているWindowsバージョン

  • Windows Server, version 2004 以降  (Windows10 世代のWindows Server 2019 のSemi-annual channel)
  • Windows Server 2022 (オンプレミス、または、Azure)
  • Windows10 20H2 以降
  • Windows11

 

SMB圧縮を無効にする設定

SMB圧縮により転送を行うかどうかについては、コピー開始時にSMBクライアント、SMBサーバ間でネゴシエーションが行われます。上記のSMB圧縮に対応したWindwosでは、デフォルトで、SMB圧縮を使用する設定となっていると思われますが、状況によっては、SMB圧縮を無効にしたいケースもあるかもしれません。

SMBサーバにて常にSMB圧縮を使用しない(無効化する)設定方法は以下の通りです。

  • SMBサーバでregeditを起動
  • HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanServer\Parameters を開く(LanmanWorkstationではなくLanmanServerであることにご注意ください)
  • DisableCompression という DWORD(32bit)値を作成し、そのデータを 1 にする。
  • 再起動は不要です。

 

レジストリキーのパスについてですが、SMBサーバ側の設定のキーは"LanmanServer"、SMBクライアント側の設定のキーは"LanmanWorkstation"であることに注意してください。

 

SMBクライアント側の設定(①エクスプローラ利用の場合)

Windowsの条件

SMBクライアント側についても、上記、「※SMB圧縮に対応しているWindowsバージョン」である必要があると思われます。

 

エクスプローラからSMB圧縮を利用するための設定

現在のWindowsでは、エクスプローラからはデフォルトでSMB圧縮は無効となっています。そのため、エクスプローラからSMB圧縮を利用する場合は以下の設定を行う必要があります。

  • SMBクライアントでregeditを起動
  • HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters  を開く(LanmanServerではなくLanmanWorkstationであることにご注意ください)
  • EnableCompressedTraffic という DWORD(32bit)値を作成し、そのデータを 1 にする。
  • 再起動は不要です。

 

SMB圧縮を使用しない設定

現在のWindowsでは、デフォルトでエクスプローラからのSMB圧縮の利用は無効となっているため、この設定は通常不要と思いますが、SMBクライアントとして使用しているPCで、SMB圧縮を常に利用しない(無効化する)場合の設定は以下の通りです。

  • SMBクライアントでregeditを起動
  • HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters  を開く(LanmanServerではなくLanmanWorkstationであることにご注意ください)
  • DisableCompression という DWORD(32bit)値を作成し、そのデータを 1 にする。
  • 再起動は不要です。

 

なお、"EnableCompressedTraffic"、と、"DisableCompression" の両方が設定された場合、SMB圧縮は有効になります。

 

SMBクライアント側の設定(②コピーツール利用の場合)

Windowsの条件

SMBクライアント側についても、上記、「※SMB圧縮に対応しているWindowsバージョン」である必要があると思われます。

 

コピーツールの条件

robocopy または xcopy が /compress オプションに対応していることが条件となります。おそらく、上記のSMB圧縮に対応しているWindowsバージョンであれば、利用できるものと思われます。

コピーツールからコピーする場合は、SMBクライアント側でレジストリの設定変更を行わなくても圧縮転送が可能になっています。送信、受信とも、圧縮が行われます。

 

圧縮転送の効果について考えてみる

SMB圧縮による転送時間の短縮効果について、実験をしてみたので、ご紹介したいと思います。

以下のようなテスト環境で、ファイルの内容がオール 0 の10GBのファイルを転送してみました。

 

 

SMB圧縮を有効にしていない環境でコピーを行うと、理論上

10GB ÷ 125MB/s  =  80 秒

となり、実測結果もおおむねこの転送時間となりました。

 

一方、SMB圧縮を有効にすると、ファイル内容がオール0ですので圧縮により非常に小さいデータサイズになります。計測結果からすると、だいたい1GB→2MBに圧縮されていた様です。つまり容量比で 5,000分の1です。

しかし、転送時間も5,000分の1になるかというとそうはなりません。なぜなら、今度はディスクIOがボトルネックになるからです。

ネットワークで転送されるデータ量は2MBに圧縮されますが、ディスクに読み書きされるデータは圧縮前の10GBのままとなります。今回のテスト環境では、転送先のディスクIOがボトルネックになり、かかる時間は、

10GB ÷ 200MB/s  =  50 秒

となります。実測結果もこのくらいの転送時間でした。

まとめると、今回の実験結果としては、 80秒 → 50秒 との結果でした。

 

ただ、実際の環境においては、それほど大きく圧縮できるファイルはないと思われます。もし、ファイルの圧縮率が10% (10GB→9GB)であったとすると、圧縮後の転送時間は、

9GB ÷ 125MB/s  =  72 秒

の計算となります。80秒→72秒 の8秒の短縮ですね。

 

さらに、今回計測した環境は1GbpsのLAN接続でしたが、これがもし100Mbpsだったとすると、圧縮なしでの転送は

10GB ÷ 100Mbps(12.5MB/s) = 800 秒

圧縮後(10%圧縮の場合)は、

9GB ÷ 100Mbps(12.5MB/s) = 720 秒

となります。 800秒 → 720秒 の効果となります。

 

結局のところ、SMB圧縮効果は、環境条件によって効果も大きく変わるということが言えると思います。おおむね圧縮率に比例した転送時間の短縮は見込めると考えてよいと思われますが、実際にどのくらいの効果になるかは、コピー対象のファイルがどのくらい圧縮できるか、などをもとに、上記のようなモデルで計算してみてください。

 

(参考)Insider Preview版での圧縮アルゴリズムについて

この章は、通常の製品版のWindowsには関係ない話になりますので、Insider Previewをご存じない方は読み飛ばしてください。

 

SMB圧縮の機能は、開発者向けの評価版Windowsである Insider Previewにて機能の改善が進められているのですが、Windows 2022とWindows 11 のInsider Previewでは、SMB圧縮のアルゴリズムは以下のようになっていました。

  1. 転送するファイルの最初の500MBの圧縮を試みる。
  2. 100MB以上の圧縮効果がなければ圧縮せずファイルを転送する。100MB以上の圧縮が可能であれば圧縮して転送する。

つまり、100MB以上の圧縮効果が出せない小さいサイズのファイルは圧縮されず、実際に圧縮されるファイルは大きなファイル(例えば数GB以上のファイル)に限られていました。しかし、Windows 11 Insider Preview Build 22449 からは、上記アルゴリズムは撤廃され、ファイルサイズによらず常に圧縮が行われるように修正されています。

通常の製品版のWindowsでは、常に圧縮して転送するロジックになっていると思われます。

 

ネットワークドライブ割り当てによるSMB圧縮の利用方法

本記事では、SMB圧縮の利用方法として、①エクスプローラを利用する方法と、②コピーツールを利用する方法をご紹介しましたが、SMB圧縮のマイクロソフトのページでは、ネットワークドライブへの割り当てによる方法も解説されています。が、ちょっと調べたところ、その設定には、現在まだ Pre-release の Windows Server 2022 PowerShell が必要のようでした。近いうちにこの利用方法も可能になると思われます。

 

参考リンク

 

まとめ

SMB圧縮のエクスプローラによる利用は、レジストリの設定が必要であったり、転送方向が片方向だったりと制約があるので、実際には現時点で使える方法としては、コピーツール(robocopy, xcopy) によるコピーになるような気がします。

一般的には圧縮できる割合に応じて転送時間の短縮が図れるのではないかと思われます。特に、LANの速度が100Mbpsである場合にはその効果は大きいと思われます。

ご自分の環境に応じて、利用・導入を検討されてはいかがでしょうか。

 

 

Related Articles

 

Submit your comment
Name:
Comment:
Submission type:



Submitted comments will be processed manually. So, please understand it will take about a day to publish your comment.