В версии протокола SMB, представленной в Windows Server 2022 и Windows 11 вы можете использовать сжатие трафика файлового доступа (SMB compression) для ускорения скорости передачи файлов (при копировании и открытии файлов по сети), уменьшения трафика и нагрузки на сеть. В этой статье рассмотрим, как настроить SMB компрессию в Windows.
Благодаря использованию SMB компрессии (не путать с NTFS компрессией) вам больше не придется использовать сторонние программы для предварительного сжатия файлов перед передачей по медленной (или тарифицируемой) сети. В качестве алгоритма сжатия по умолчанию используется XPRESS (LZ77). Также можно переключить Windows на использование алгоритмов сжатия XPRESS Huffman (LZ77+Huffman), LZNT1, или PATTERN_V1*
Вы можете включить SMB компрессию как на стороне клиента, так и на стороне SMB сервера.
В Windows Server 2022 вы можете включить SMB сжатие двумя способами:
- Через WAC (Windows Admin Center): Files and File Sharing -> File Shares -> выберите общую папку и в ее настройках включите опцию Compress data;
- С помощью PowerShell: при создании новой сетевой папки (
New-SmbShare -Name "Public" -Path "E:\Public" -CompressData $true
) или для существующей шары (Set-SmbShare -Name "share" -CompressData $true
). Можно вывести все каталоги, для которых включено сжатие SMB:Get-SmbShare -CompressData $true
Также вы можете включить поддержку SMB сжатия на стороне клиента. В этом случае не имеет значение, поддерживается ли SMB компрессия на стороне сервера.
Следующие команды позволят подключить сетевой диск в Windows 11 с поддержкой SMB сжатия:
net use * \\fs01\share /requestcompression:yes
или
New-SmbMapping -LocalPath "W:" -RemotePath "\\fs01\share" -CompressNetworkTraffic $true
Попробуем измерить скорость и время передачи vmdk файла виртуальной машины при включенной SMB компрессии. Можете создать сетевую папку с SMB сжатием и без нее, либо используйте параметр /compress в утилите robocopy, чтобы копировать файл с использованием SMB сжатия. Примеры команд
robocopy z:\ c:\ps\without_smb_compress.vmdk srv-cent02.vmdk
robocopy z:\ c:\ps\with_smb_compress.vmdk srv-cent02.vmdk /compress
В моем примере при копировании 3 Гб vmdk файла время копирования при использовании сжатия SMB уменьшилось на 20 % (с 36 секунд до 29).
В RTM версиях Windows 11 и Windows Server 2022 SMB cжатие используется для всех файлов независимо от размера.
Чтобы всегда использовать SMB сжатие для файлов вы можете включить параметр реестра
EnableCompressedTraffic = 1
в ветке HKLM\System\CurrentControlSet\Services\LanManWorkstation\Parameters. Можно создать этот параметр реестра с помощью PowerShell:
Set-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\LanManWorkstation\Parameters\ -Name EnableCompressedTraffic -Value 1
Если вы хотите, чтобы SMB сжатие применялось только для больших файлов (более 100 Мб), нужно в этой же ветке настроить следующие параметры реестра:
- CompressibilitySamplingSize = 524288000
- CompressibleThreshold = 104857600
Если вы хотите полностью запретить использовать SMB компрессию в Windows, задайте параметр
DisableCompression = 1
:
Set-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\LanManWorkstation\Parameters\ -Name DisableCompressedTraffic -Value 1
Или воспользуйтесь командой:
Set-SmbClientConfiguration -DisableCompression $true
Функция SMB Compression совместима с технологиями подписывания и шифрования SMB, SMB over QUIC, SMB multichannel, Hyper-V Live Migration. В утилитах Robocopy and Xcopy можно использовать новую опцию /compress для принудительного использования SMB сжатия при копировании файлов по сети. SMB Direct и RDMA пока не поддерживаются.