23/11/2024

WSL

WSL 2 : gérer les ressources allouées à Linux avec .wslconfig

I. Présentation

Lorsque l'on utile WSL 2 sous Windows pour faire tourner des distributions Linux, nous n'avons pas trop de visibilité sur les ressources utilisées, ou en tout cas, sur le maximum de ressources que peuvent utiliser nos machines Linux. Microsoft a intégré un fichier de configuration nommé ".wslconfig" qui permet de gérer les ressources, c'est ce que nous allons voir.

II. WSL : ressources utilisées par les distributions Linux

Pour commencer, cherchons à voir quelles sont les ressources consommées par les distributions Linux. Je vous rappelle que l'on peut voir l'état de chaque distribution Linux (démarrée/arrêtée) avec la commande suivante :

wsl -l -v

Ensuite, au niveau des processus, nous avons bien des processus "wsl.exe", mais ils ne sont pas du tout représentatifs des ressources consommées. Pour avoir des informations précises, il faut s'intéresser à d'autres processus : vmmem. Ce processus permet de visualiser les ressources consommées par les machines virtuelles, en l'occurrence dans notre cas, la machine virtuelle WSL qui fait tourner les distributions Linux.

À partir de la console PowerShell, on peut voir facilement les ressources consommées par ce processus :

Get-Process vmmem

Bien entendu, vous pouvez voir ces informations à partir du Gestionnaire des tâches, en mode graphique. On peut voir sur la copie d'écran ci-dessous que le démarrage d'une distribution Linux entraîne la création d'un nouveau processus, et surtout cela entraîne une consommation de RAM : 436 Mo. On peut également voir le taux d'occupation du CPU.

Ressources consommées par WSL (RAM et CPU)

Si la distribution Linux tourne, mais que l'on ne fait rien avec, elle consomme relativement peu de RAM. Encore que, sur une machine avec 8 Go de RAM, on peut vite le sentir.

Ce que je vous recommande, c'est d'arrêter une distribution Linux quand vous ne l'utilisez plus (sans pour autant arrêter la machine virtuelle WSL). Comme nous l'avions vu dans un autre article, cette opération s'effectue avec la commande suivante :

wsl -t <nom de la distribution>
wsl -t Ubuntu

Voilà qui devrait libérer un peu de ressources sur votre machine Windows. Passons maintenant à la gestion des ressources.

III. Gérer les ressources avec .wslconfig

Depuis Windows 10 2004 (ou 20H1 ou May 2020 Update), il est possible de gérer les ressources utilisables par WSL grâce à un fichier .wslconfig que l'on va venir créer à la racine du profil de notre utilisateur :

C:\Users\<mon utilisateur>\.wslconfig

Par exemple, pour l'utilisateur "Florian" :

C:\Users\Florian\.wslconfig

Au sujet de la consommation des ressources, voici ce que nous dit la documentation de Microsoft :

  • Mémoire (RAM) : 50 % de la mémoire RAM totale de Windows ou 8 Go (la valeur la plus faible étant retenue). Sur les versions antérieures à la Build 20175 : 80 % de la mémoire RAM totale de Windows, en sachant qu'actuellement Windows 10 21H1 correspond à la Build 19043.
  • Mémoire (SWAP) : 25 % de la taille de la mémoire RAM disponible pour Windows, arrondie au Go le plus proche.
  • Processeur : la machine WSL peut utiliser le même nombre de processeurs que Windows, autrement dit tous les cœurs du CPU.

En lisant ces informations, on voit que la machine virtuelle WSL 2 peut consommer beaucoup de ressources sur notre machine. Nous allons pouvoir maîtriser cette consommation de ressources en jouant avec le fichier .wslconfig.

Commencez par créer un fichier nommé ".wslconfig" au sein de votre profil utilisateur. Pour rappel, cela va donner :

C:\Users\<mon utilisateur>\.wslconfig

Ou tout simplement :

%USERPROFILE%\.wslconfig

Dans ce fichier, commencez par créer une section sur la première ligne :

[wsl2]

A. WSL 2 : limiter la RAM

Pour limiter la RAM utilisable au maximum, par exemple à 4 Go, on va spécifier :

memory=4GB

Si vous souhaitez définir une valeur très faible, comme 512 Mo, c'est possible aussi :

memory=512MB

B. WSL 2 : limiter la mémoire SWAP

Pour la mémoire SWAP, le principe est le même qu'avec la RAM, si ce n'est que le nom du paramètre est différent :

swap=2GB

Pour désactiver le SWAP, on fera :

swap=0

Par définition, la mémoire SWAP s'appuie sur un fichier. Ici, ce sera sur un disque virtuel au format VHDX. Par défaut, ce disque est créé dans le profil de l'utilisateur à l'emplacement suivant :

%USERPROFILE%\AppData\Local\Temp\swap.vhdx

Pour définir un nouvel emplacement, Microsoft propose une option, mais elle ne fonctionne pas chez moi...! Voici tout de même pour information, si vous voulez essayer :

swapFile="C:\TEMP\swap.vhdx"

C. WSL 2 : gérer le nombre de processeurs virtuels

Pour le CPU, nous pouvons définir le nombre de processeurs virtuels de la machine virtuelle, comme on le ferait avec une VM dans Hyper-V.

Pour limiter la machine virtuelle à deux processeurs virtuels, voici la ligne à inclure :

processors=2

D. WSL 2 : exemple de fichier .wslconfig

Si l'on reprend les directives que l'on vient de voir, cela nous donne le résultat suivant :

[wsl2]
memory=4GB
swap=2GB
processors=2

Enregistrez le fichier .wslconfig et fermez-le pour le moment. Pour que les changements soient pris en compte, nous devons arrêter la VM WSL 2 et la relancer. Pour l'arrêter, voici la commande :

wsl --shutdown

Pour la relancer, il suffit de lancer une distribution Linux ou d'exécuter la commande "wsl"... La mécanique va se lancer ! 😉

Si l'on regarde les ressources de la distribution Linux, on peut voir que la RAM est bien définie à 4 Go et qu'il n'y a pas de SWAP (je l'ai défini à "0" dans le fichier de configuration pour cet essai) :

top

Le fichier de configuration .wslconfig intègre deux, trois, options supplémentaires. Vous pouvez spécifier un noyau Linux personnalisé (option kernel), mais aussi désactiver la possibilité de faire du port forwarding vers votre distribution Linux lorsque vous ciblez "localhost" (comme on a pu voir dans les épisodes précédents).

localhostForwarding=false

Voilà, vous connaissez l'essentiel du fichier de configuration .wslconfig pour gérer les ressources de WSL ! Vous allez retrouver le contrôle !

N'oubliez pas de consulter les autres épisodes de cette série d'articles pour maîtriser pleinement WSL sous Windows.

author avatar
Florian BURNEL Co-founder of IT-Connect
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.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

1 commentaire sur “WSL 2 : gérer les ressources allouées à Linux avec .wslconfig

  • Merci pour ces ressources. Pour le ramdisk, cela marche de mon coté lorsque j’utilise \\ :
    swapfile= »C:\\TEMP\\swap.vhdx »

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

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