Microsoft accelera WSL 2: file condivisi più veloci tra Windows e Linux

WSL 2 introduce una modifica che migliora significativamente le prestazioni nell'accesso al file system, specie nelle condivisioni tra Windows e macchine Linux in esecuzione sul sottosistema.

Le prestazioni nell’accesso ai file condivisi sono da tempo uno degli aspetti più critici di WSL 2, Sottosistema Windows per Linux. Quando un’applicazione Linux legge o scrive dati memorizzati nel file system di Windows, le operazioni devono attraversare diversi livelli software e hardware, tra cui Hyper-V, i dispositivi virtuali VirtIO, i meccanismi DMA (Direct Memory Access, che consentono il trasferimento diretto dei dati tra memoria e periferiche) e altri componenti di virtualizzazione. È un processo che aggiunge inevitabilmente un certo ritardo nelle operazioni di input/output.

Per ridurre tale sovraccarico, Microsoft ha modificato più volte l’architettura di WSL, passando inizialmente da DrvFs al protocollo Plan 9 e introducendo successivamente virtiofs. Un recente aggiornamento del codice di WSL promette ulteriori miglioramenti grazie a interventi su SWIOTLB, un componente poco noto ma fondamentale che gestisce il trasferimento dei dati tra memoria e dispositivi, contribuendo a velocizzare le operazioni di lettura e scrittura.

La modifica, integrata nel repository pubblico di WSL, elimina un collo di bottiglia che fino a oggi interessava soprattutto i percorsi di accesso utilizzati da virtiofs e dalla modalità di rete VirtioProxy, due tecnologie che Microsoft impiega sempre più spesso all’interno della propria architettura WSL.

Le novità arrivano mentre il sottosistema Linux integrato in Windows continua a espandersi verso scenari avanzati come container nativi, sviluppo software ad alte prestazioni e workload AI accelerati da GPU.

Perché Microsoft punta sempre di più su virtiofs

WSL 2 esegue una vera istanza Linux all’interno di una macchina virtuale Hyper-V leggera. L’architettura garantisce una compatibilità molto superiore rispetto a WSL 1, permettendo di utilizzare il kernel Linux originale, container Docker, strumenti di sviluppo avanzati e tecnologie come Kubernetes senza particolari adattamenti.

Come osservato nell’introduzione, tuttavia, uno dei punti più delicati riguarda però la condivisione dei file tra Windows e Linux. Molti sviluppatori conservano il codice sorgente nelle directory di Windows e accedono agli stessi file sia dagli strumenti Windows sia dagli ambienti Linux. Ogni operazione deve quindi attraversare il livello di virtualizzazione che separa i due sistemi.

Per migliorare le prestazioni Microsoft ha progressivamente sostituito i meccanismi utilizzati nelle prime versioni di WSL con virtiofs, una tecnologia sviluppata per consentire la condivisione diretta delle directory tra host e macchina virtuale. Rispetto al protocollo Plan 9 utilizzato in passato, virtiofs riduce sensibilmente la latenza e migliora le prestazioni nelle operazioni di input/output intensive.

Il ruolo di SWIOTLB nelle operazioni di I/O

La modifica appena introdotta nel repository WSL riguarda un componente del kernel Linux chiamato SWIOTLB (Software Input/Output Translation Lookaside Buffer). Si tratta di un meccanismo utilizzato durante le operazioni DMA.

Negli ambienti virtualizzati con WSL 2, alcuni dispositivi VirtIO utilizzano buffer intermedi gestiti da SWIOTLB per garantire la compatibilità con i meccanismi di accesso alla memoria. Il sistema funziona correttamente ma, fino a oggi, diversi dispositivi condividevano lo stesso pool di memoria temporanea.

Quando più componenti richiedono simultaneamente l’accesso a queste risorse, si possono creare situazioni di contesa che aumentano la latenza delle operazioni di lettura e scrittura.

La patch pubblicata dagli sviluppatori Microsoft introduce una soluzione relativamente semplice ma efficace: ogni dispositivo VirtIO può ora utilizzare un proprio pool SWIOTLB dedicato anziché affidarsi a una risorsa condivisa. Il vantaggio consiste nella riduzione dei lock e delle competizioni tra dispositivi differenti: le richieste generate da virtiofs, ad esempio, non devono più contendere le stesse strutture dati utilizzate da altri componenti virtualizzati presenti nella macchina Linux.

Come provare subito l’ottimizzazione di WSL 2

La nuova gestione dei pool SWIOTLB è disponibile nelle versioni più recenti del kernel utilizzato da WSL. Per verificare la presenza della modifica è possibile aggiornare il sottosistema eseguendo il comando wsl.exe --update --pre-release da una finestra PowerShell o dal Prompt dei comandi (cmd) aperti con i privilegi amministrativi.

Per ottenere il massimo beneficio è inoltre opportuno abilitare virtiofs, la tecnologia che Microsoft utilizza per velocizzare la condivisione dei file tra Windows e Linux. L’opzione può essere attivata modificando il file .wslconfig presente nella directory del proprio profilo utente Windows e aggiungendo le seguenti righe:

[wsl2]
virtiofs=true

Dopo aver salvato il file è necessario arrestare completamente WSL utilizzando il comando wsl --shutdown quindi riavviare la distribuzione Linux. Va ricordato che virtiofs non è ancora il meccanismo predefinito per la condivisione dei file: in assenza di questa impostazione WSL continua a utilizzare il protocollo Plan 9 attraverso un socket Hyper-V.

Microsoft segnala inoltre che la nuova configurazione richiede almeno 64 MB di memoria libera per il pool SWIOTLB dedicato. Per questo motivo conviene assegnare all’istanza WSL almeno 1 GB di RAM, soprattutto se si eseguono compilazioni software, container o altre attività che generano numerose operazioni di input/output.

Benefici per container, compilazioni e sviluppo AI

Gli effetti della modifica dovrebbero risultare rilevanti soprattutto nei carichi di lavoro che effettuano un numero elevato di accessi al file system.

Compilazioni di grandi progetti software, build Node.js contenenti migliaia di piccoli file, immagini Docker e workload basati su container possono trarre vantaggio dalla riduzione delle contese interne.

Il miglioramento assume un’importanza ancora maggiore alla luce delle nuove iniziative Microsoft legate a WSL. L’azienda sta infatti lavorando a wslc, un runtime che consente di eseguire container Linux in modo nativo sfruttando virtiofs per la condivisione dei dati e il supporto GPU per carichi AI e machine learning.

In scenari di questo tipo, la velocità con cui il sistema riesce a gestire migliaia di operazioni di input/output al secondo diventa un fattore determinante per l’esperienza d’uso complessiva.

Ti consigliamo anche

Link copiato negli appunti