WSL 2 : gérer les ressources allouées à Linux avec .wslconfig
Sommaire
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.
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.
Merci pour ces ressources. Pour le ramdisk, cela marche de mon coté lorsque j’utilise \\ :
swapfile= »C:\\TEMP\\swap.vhdx »