Performances du système de fichiers WSL : pourquoi l’accès inter-systèmes d’exploitation ralentit votre code
By Mirko Peters ·
Découvrez pourquoi l’accès aux fichiers entre systèmes d’exploitation ralentit WSL. Consultez les bonnes pratiques pour le stockage Linux natif et pour accélérer vos flux de développement.
Automatically translated with AI from the original post. Read the English original

Découvrez pourquoi le mélange des systèmes de fichiers Windows et Linux dans le sous-système Windows pour Linux (WSL) crée d’importants goulots d’étranglement en termes de performances. Apprenez les règles essentielles pour conserver vos répertoires de projet du bon côté de la frontière entre systèmes d’exploitation, afin d’accélérer nettement les tâches de compilation gourmandes en disque, les installations de paquets et les opérations Git.
Points clés
- Stocker des fichiers de projet Linux sur des lecteurs Windows (via /mnt/c/) entraîne une dégradation sévère des performances en raison des coûts de traduction liés au franchissement de la frontière.
- Les arborescences de fichiers volumineuses, comme les répertoires node_modules, pâtissent le plus du franchissement de la frontière entre systèmes d’exploitation lors des compilations et des mises à jour.
- La recommandation officielle de Microsoft consiste à conserver vos fichiers dans le même système d’exploitation que les outils que vous utilisez pour les modifier et les compiler.
- VS Code propose l’extension Remote WSL, qui vous permet de modifier de manière transparente des fichiers hébergés sous Linux à l’aide d’une interface Windows, sans pénalité de performances.
- Les règles de sensibilité à la casse diffèrent radicalement entre les systèmes de fichiers Windows et Linux ; un placement correct des répertoires est donc essentiel pour éviter des bogues inattendus.
Comprendre la séparation entre les systèmes de fichiers Windows et Linux
L’un des pièges les plus courants rencontrés par les développeurs lors de l’adoption du sous-système Windows pour Linux est un placement inadapté des fichiers. Windows et Linux gèrent leur stockage sous-jacent selon des paradigmes architecturaux totalement différents. Lorsque vous exécutez WSL 2, vous utilisez un véritable noyau Linux fonctionnant dans une machine virtuelle légère. Votre distribution Linux dispose donc de son propre système de fichiers Linux natif, isolé, qui fonctionne selon les normes POSIX.
À l’inverse, votre environnement Windows standard repose sur NTFS et utilise des lettres de lecteur, comme votre lecteur C:. Pour faire le lien, WSL monte automatiquement vos lecteurs Windows dans l’environnement Linux, sous le répertoire /mnt/ : par exemple, votre lecteur C apparaît sous la forme /mnt/c. Si cela rend chaque fichier de votre machine hôte lisible et modifiable depuis votre terminal Linux, cela introduit également une pénalité de performance cachée et très coûteuse, appelée chemin de traduction inter-frontières.
Pourquoi l’accès aux fichiers inter-frontières est si lent
Chaque fois qu’un outil Linux lit ou écrit un fichier situé du côté Windows du système, la requête doit traverser la frontière entre la machine virtuelle légère et l’hôte Windows. Pour un seul fichier texte ou un petit script, ce surcoût de traduction est imperceptible. Cependant, les flux de travail de développement logiciel modernes ne portent que rarement sur un seul fichier.
Prenons le cas d’une commande comme npm install ou git clone exécutée dans un répertoire de projet situé dans /mnt/c/mon-projet. Ces opérations génèrent des milliers de demandes de création et de modification de petits fichiers en succession rapide. Chacun de ces petits fichiers subit le coût du franchissement de la frontière. L’effet cumulé est que des opérations qui devraient prendre quelques secondes peuvent durer plusieurs minutes, ce qui pousse de nombreux développeurs à croire à tort que WSL est intrinsèquement lent, alors que la cause est simplement un mauvais placement des répertoires.
Sensibilité à la casse et conflits d’autorisations
Les performances ne sont pas le seul problème lorsqu’on franchit la frontière entre les systèmes d’exploitation. Les règles sous-jacentes du système de fichiers entrent également en conflit, au point de faire planter des applications. La racine native du système de fichiers Linux est strictement sensible à la casse. Deux fichiers nommés Script.js et script.js sont considérés comme deux entités totalement distinctes. Le système de fichiers Windows NTFS, par défaut, ne tient pas compte de la casse.
Par ailleurs, les utilitaires en ligne de commande Linux reposent largement sur les indicateurs de propriété et d’autorisation gérés par des utilitaires comme chmod et chown. Les systèmes de fichiers Windows ne mettent pas ces autorisations en correspondance de manière native, comme les outils Linux l’attendent. Lorsque vous exécutez du code à travers cette frontière, les liens symboliques peuvent ne pas se résoudre correctement, et les scripts de compilation peuvent générer des erreurs obscures, car ils ne parviennent pas à appliquer les autorisations de fichiers requises par l’environnement d’exécution.
Bonnes pratiques pour des workflows WSL rapides
Pour éviter ces pièges de performance et conserver une expérience de développement fluide, adoptez deux habitudes fondamentales. D’abord, placez toujours vos projets Linux dans le système de fichiers Linux natif (quelque part dans votre répertoire personnel, comme ~/projects/), et conservez vos projets purement Windows côté Windows.
Ensuite, tirez parti des outils modernes pour relier votre interface utilisateur sans sacrifier la vitesse d’exécution. Vous n’avez pas besoin d’abandonner vos éditeurs Windows favoris. Grâce à l’extension Remote - WSL pour Visual Studio Code, vous pouvez ouvrir un projet stocké entièrement dans le système de fichiers Linux natif, tout en profitant d’une interface graphique Windows réactive et familière. Votre éditeur s’exécute sous Windows, mais l’exécution de votre code, les tests et la gestion des packages s’effectuent à pleine vitesse dans l’environnement Linux.
Conclusion et prochaines étapes
Maîtriser les frontières des systèmes de fichiers est l’étape la plus importante pour faire de WSL, d’une expérience frustrante, votre outil du quotidien. En alignant vos outils et vos fichiers du bon côté de la frontière entre les systèmes d’exploitation, vous éliminez la latence et évitez les erreurs d’autorisation obscures.
Pour une vision plus large de la façon dont cette fonctionnalité s’intègre aux workflows modernes de développement et de cloud, écoutez l’épisode complet du M365 FM Podcast. Plongez dans la conversation complète pour découvrir les raccourcis d’installation, les comparaisons de versions et la manière dont WSL fait le lien entre les machines locales et l’infrastructure cloud Azure !
Questions fréquentes
Où dois-je stocker mes fichiers de projet lorsque j’utilise WSL ?
Vous devez stocker vos fichiers de projet dans le système de fichiers Linux natif (par exemple dans votre répertoire personnel, comme ~/my-project), plutôt que sur vos lecteurs Windows montés (comme /mnt/c/), afin d’obtenir des vitesses de lecture et d’écriture maximales.
Pourquoi l’exécution de npm install est-elle lente sur mon lecteur Windows dans WSL ?
Les gestionnaires de packages comme npm ou pip génèrent des milliers de petits fichiers pendant l’installation. Lorsque ces fichiers sont écrits à travers la frontière entre les systèmes d’exploitation, sur un lecteur Windows NTFS, chaque fichier subit un surcoût de traduction, ce qui crée d’importants goulets d’étranglement.
Puis-je utiliser Visual Studio Code pour modifier des fichiers stockés dans le système de fichiers Linux ?
Oui. En installant l’extension Remote - WSL pour Visual Studio Code, vous pouvez ouvrir, modifier et déboguer nativement les fichiers situés dans votre distribution Linux WSL, tout en utilisant l’interface de l’éditeur standard de Windows.
Quelle est la différence entre la façon dont Windows et Linux gèrent les noms de fichiers ?
Les systèmes de fichiers Linux sont strictement sensibles à la casse (File.txt et file.txt désignent deux fichiers différents), alors que Windows NTFS ne tient pas compte de la casse par défaut. Exécuter des outils Linux sur des répertoires hébergés par Windows provoque souvent des échecs de compilation en raison de ces différences de comportement sous-jacentes.