Introduction
La version 2 de Windows Subsystem for Linux (WSL) a récemment bénéficié d'une amélioration significative en termes de performances d'accès aux fichiers Windows. Cette évolution est particulièrement importante pour les utilisateurs qui travaillent sur des projets nécessitant des échanges entre les systèmes d'exploitation Windows et Linux.
Contexte Technique
WSL 1, introduit en 2016, utilisait un pilote de système de fichiers personnalisé appelé DrvFs pour accéder aux lecteurs Windows. Cependant, avec l'arrivée de WSL 2 en 2019, un noyau Linux complet a été intégré dans une machine virtuelle Hyper-V légère. Pour les accès de fichiers entre les systèmes d'exploitation, un serveur de fichiers 9P a été mis en place sur le côté Windows. Les sessions Linux se connectent à ce serveur via une socket Hyper-V au démarrage.
Le protocole 9P fonctionne, mais il comporte une surcharge de protocole due à la taille des messages (msize=65536, 64 Ko). Les charges de travail intensives en fichiers qui touchent de nombreux petits fichiers supportent cette surcharge à chaque aller-retour. Microsoft a continué à améliorer cela depuis le lancement de WSL 2.
En 2021, virtiofs est apparu comme une fonctionnalité expérimentale opt-in. Virtiofs utilise le transport VirtIO pour un accès aux fichiers partagés en mémoire, réduisant ainsi la surcharge de sérialisation par rapport à 9P. Pour l'activer, il faut définir virtiofs=true dans la section [wsl2] du fichier .wslconfig.
Analyse et Implications
Récemment, une mise à jour a permis à chaque périphérique virtio d'avoir son propre pool DMA dédié, réduisant ainsi les contentions lors des opérations d'entrée-sortie intensives. Cette amélioration profite particulièrement aux flux de travail qui nécessitent un accès fréquent aux fichiers entre les systèmes d'exploitation, tels que les projets de développement logiciel qui résident sur un lecteur Windows mais sont compilés sous Linux.
Pour profiter pleinement de cette amélioration, il est recommandé de configurer virtiofs=true dans le fichier .wslconfig, de mettre à jour le noyau WSL vers la dernière version disponible, et de s'assurer que la session WSL 2 dispose d'au moins 1 Go de mémoire RAM.
Perspective
Les performances du système de fichiers WSL à travers la frontière des systèmes d'exploitation ont continué à s'améliorer avec chaque génération. Alors que virtiofs reste pour l'instant une fonctionnalité opt-in, les travaux se poursuivent ouvertement sur github.com/microsoft/WSL pour continuer à réduire l'écart de performances entre les accès de fichiers locaux et ceux qui traversent la frontière entre Windows et Linux.