Windows : comment activer la compression SMB pour le transfert de fichiers ?

I. Présentation

Dans ce tutoriel, nous allons apprendre à activer la compression SMB sur un partage sous Windows Server 2022 et nous allons exploiter ce partage à partir d'un poste client sous Windows 11. Il s'agit de l'une des nouvelles fonctionnalités de Windows Server 2022, prise en charge également sur Windows 11.

Grâce à la compression SMB, les données sont compressées à la volée avant d'être transférées vers l'hôte distant dans le but de réaliser le transfert plus rapidement. En effet, la compression va permettre de réduire la quantité de données à transférer, donc logiquement le temps de transfert devrait être réduit. Au niveau de la machine, le processeur sera un peu plus sollicité, car il faut compresser les données avant de les envoyer, et de l'autre côté, la machine doit les décompresser à la réception.

Au sein de sa documentation, Microsoft précise que la compression SMB utilise l'algorithme de compression XPRESS (LZ77) par défaut, mais que d'autres algorithmes sont disponibles :  XPRESS Huffman (LZ77+Huffman), LZNT1 ou PATTERN_V1.

La compression SMB est compatible avec les transferts de fichiers notamment avec des outils comme Robocopy ou Xcopy, ainsi que les lecteurs réseaux, mais également des fonctions plus avancées : chiffrement SMB, SMB over QUIC, SMB multichannel ou encore Hyper-V Live Migration.

Pour ma part, je vais utiliser le serveur SRV-APPS qui est bien sûr sous Windows Server 2022 et je vais agir sur un partage nommé "Partage".

II. Activer la compression SMB

Sur Windows Server 2022, il y a deux manières d'activer la compression SMB sur un partage :

  • À partir de Windows Admin Center, dans les options du partage
  • À partir d'une commande PowerShell

Nous allons voir les deux méthodes dans ce tutoriel, car tout le monde n'utilise Windows Admin Center même si c'est un outil de gestion à la mode ! À partir du gestionnaire de serveur et des options avancées d'un partage, il n'est pas possible d'activer la compression SMB.

A. La compression SMB avec Windows Admin Center

Je ne vais pas m'attarder sur l'installation de Windows Admin Center, car je l'ai déjà évoquée dans un autre article et ce n'est pas l'objet du jour. Au sein de l'interface, après avoir cliqué sur le serveur "SRV-APPS", il faut cliquer sur "Partage mutuel de fichiers" à gauche puis sur l'onglet "Partages de fichiers". La liste des partages présents sur le serveur s'affiche et nous pouvons voir le fameux "Partage".

Tout à droite, il y a une colonne "Compresser des données" positionnée à "false" pour chaque partage. Cela signifie que la compression SMB est désactivée et que c'est la configuration par défaut.

Pour activer l'option sur un partage, c'est tout simple : il faut cliquer sur le partage dans la liste puis cliquer sur le bouton "Modifier le partage". Un panneau latéral va s'afficher sur la droite avec plusieurs options, dont "Compresser des données". Vous l'aurez compris, il faut cocher la case et valider ! C'est tout !

Windows Admin Center - Compression SMB

B. La compression SMB avec PowerShell

Pour activer la compression SMB sur un partage avec PowerShell, c'est également très simple ! Si le partage existe déjà, il suffit de modifier sa configuration avec Set-SmbShare et le paramètre "-CompressData" qui agit directement sur cette option. Ce paramètre doit être définit à "$true" pour activer et "$false" pour désactiver.

Ce qui donne :

Set-SmbShare -Name "Partage" -CompressData $true

Lorsque la commande est exécutée, il faut valider avec "O" puis "Entrée". Ce n'est pas plus compliqué.

Maintenant, si l'on imagine que le partage n'existe pas, on pourrait le créer avec New-SmbShare et définir le paramètre "-CompressData" à "$true" dès la création. Comme ceci :

New-SmbShare -Name "Partage" -Path "C:\Partage" -CompressData $true

Sur une machine, la commande Get-SmbShare est capable de lister les partages, donc c'est un excellent moyen de vérifier notre configuration. C'est d'autant plus simple que cette commande contient aussi le paramètre "-CompressData" ! Si l'on veut lister tous les partages avec la compression active, il suffit d'exécuter cette commande :

Get-SmbShare -CompressData $true

Notre partage est bien retourné !

Get-SmbShare -CompressData $true

III. Comment exploiter la compression SMB ?

Pour que la compression SMB s'applique lors d'un échange de données, il faut que la machine cliente (client SMB) qui communique avec le serveur de fichiers (serveur SMB), ici SRV-APPS, soit configurée pour utiliser la compression SMB. Autrement dit, la compression SMB doit être activée côté client, et donc côté Windows 11.

A. Configuration de la compression SMB sur Windows 11

L'activation de la compression SMB

La commande ci-dessous permet de récupérer la configuration SMB de Windows 11 et plus précisément la propriété "DisableCompression". Normalement, la compression SMB est activée par défaut (mais pas exploitée). La commande ci-dessous doit retourner "false".

Get-SmbClientConfiguration | ft DisableCompression

Si ce n'est pas le cas, voici comment activer la compression SMB (ou la désactiver, à l'inverse) :

Set-SmbClientConfiguration -DisableCompression $false

B. Créer un fichier pour tester (facultatif)

Pour effectuer un test de transfert des données avec et sans compression SMB, on peut utiliser un fichier ISO assez volumineux, un disque virtuel VHD/VMDK, etc... ou créer son propre fichier "vide" d'une taille définie. Sous Windows, on peut créer un fichier vide d'une taille définie avec la commande fsutil. Voici comment créer un fichier de 8 Go :

fsutil file createnew c:\8Go.txt 8589934592

Vous pouvez aussi créer un fichier VHD de taille fixe à l'aide de diskpart (ensuite, l'initialiser, le monter, et ajouter quelques fichiers JPG, par exemple). Pour créer un VHD de 8 Go :

diskpart
create vdisk file="C:\SMB.vhd" maximum=8096 type=fixed

Cette étape est facultative si vous avez déjà des données.

C. Compression SMB avec Robocopy

La compression SMB est exploitable par les administrateurs de différentes façons : sur un cluster Hyper-V via la Live Migration, au travers de l'excellent (et indémodable) Robocopy, mais aussi xcopy.

Commençons par Robocopy qui intègre un nouveau paramètre nommé "/compress" (comme xcopy) sur Windows Server 2022 et Windows 11 afin d'exploiter la compression SMB.

Je vais transférer le fichier "8Go.txt" de mon hôte local sous Windows 11 vers SRV-APPS. Voici la commande :

ROBOCOPY "C:\" "\\srv-apps.it-connect.local\Partage" 8Go.txt

On peut voir qu'en 31 secondes, l'affaire est bouclée, sans compression SMB.

Maintenant, je vais supprimer le fichier sur SRV-APPS et relancer Robocopy en ajoutant le paramètre "/compress" pour activer la compression des données. Cela donne :

ROBOCOPY "C:\" "\\srv-apps.it-connect.local\Partage" 8Go.txt /COMPRESS

La copie est à peine plus rapide : 28 secondes au lieu de 31 secondes. Pour avoir fait différents tests, l'écart n'est pas flagrant, voire même inexistant, dans certains cas, mais quoi qu'il en soit cela reste avantageux pour la congestion du réseau.

Robocopy compression SMB

Pour expliquer ce faible écart au niveau des performances, je dirais que c'est parce que mes deux machines virtuelles sont hébergées sur le même hôte VMware ESXi. Le bénéfice devrait être plus important et visible sur un transfert entre deux machines avec un réseau standard à 1 Gbit/s (si quelqu'un a le matos pour tester et me faire un retour 🙂).

Il faut savoir également que la compression SMB ne s'applique pas sur des données déjà compressées. Si vous transférez une archive ZIP, elle ne s'appliquera pas, car il n'y a pas d'intérêt les données à transférer étant déjà compressées. Cela ne ferait qu'alourdir le transfert inutilement.

D. Compression SMB avec un lecteur réseau

Pour les utilisateurs finaux, il va falloir faire autrement, car je ne pense pas qu'il travaille avec Robocopy donc on va pouvoir utiliser Net Use pour monter un lecteur réseau avec l'option de compression SMB activée. Si l'on veut monter le partage "Partage" de "SRV-APPS" en local avec la lettre "S" et activer la compression, voici la commande à utiliser :

net use S: \\srv-apps.it-connect.local\Partage /requestcompression:yes

Pour comparer les performances, je l'ai monté sans cette option de compression et j'ai copié une centaine de Mo de fichiers JPG. Ensuite, j'ai déconnecté le lecteur réseau et je l'ai reconnecté avec l'option de compression SMB afin de comparer les performances. Là, la différence est un peu plus évidente.

J'obtiens :

Compression SMB avec un lecteur réseau
Sans compression SMB

Et :

Avec compression SMB

PowerShell, au travers de New-SmbMapping est capable aussi de monter un lecteur réseau avec la compression SMB activée, mais il ne sera pas visible dans l'explorateur de fichiers (contrairement à New-PSDrive, mais l'option, n'est pas disponible). Voici tout de même un exemple :

New-SmbMapping -LocalPath "S:" -RemotePath "\\srv-apps.it-connect.local\Partage" -CompressNetworkTraffic $true

Il existe aussi une méthode qui consiste à créer la valeur de Registre "EnableCompressedTraffic" et lui affecter la valeur "1" pour compresser le trafic SMB autant que possible. Je n'ai pas encore bien cerné l'effet de cette valeur dans le Registre.

Set-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\LanManWorkstation\Parameters\ -Name EnableCompressedTraffic -Value 1

IV. Conclusion

Nous venons de voir comment activer la compression SMB sur Windows Server 2022 et comment exploiter cette fonctionnalité au travers différentes méthodes (robocopy, net use, etc.). On peut voir que ce n'est pas si évident que ça de constater une différence significative au niveau des performances, et que cela dépend de la qualité du réseau entre les deux machines, mais aussi des types de données à transférer. Pour réduire la congestion du réseau, cette option me semble intéressante dans tous les cas.

Si vous effectuez quelques tests, n'hésitez pas à partager vos résultats en commentaire ! 😉

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian Burnel

Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.

florian has 3767 posts and counting.See all posts by florian

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

 

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.