Il file system FAT32, utilizzato ancora oggi su numerosi supporti di archiviazione rimovibili, si prepara a ricevere un miglioramento significativo nel kernel Linux.
Una modifica apparentemente piccola al codice del driver dedicato promette infatti di ridurre sensibilmente i tempi necessari per alcune operazioni sui file. Il risultato è particolarmente interessante perché non deriva da una riscrittura complessa dell’infrastruttura, ma da un intervento mirato sul modo in cui viene gestita l’allocazione dello spazio.
Il lavoro dimostra come anche componenti considerati ormai consolidati possano nascondere margini di ottimizzazione importanti, soprattutto quando vengono esaminati i percorsi di esecuzione meno efficienti.
Come cambia l’allocazione dei file in FAT32
L’intervento è stato realizzato dallo sviluppatore open source Matheus Alves de Almeida e riguarda il driver FAT presente nel kernel. Il problema individuato si manifesta quando un’applicazione richiede di riservare spazio su disco per un file senza modificarne immediatamente la dimensione visibile. Questa operazione viene gestita attraverso il flag FALLOC_FL_KEEP_SIZE, utilizzato per preparare anticipatamente lo spazio necessario alle successive scritture.
Nell’implementazione precedente, il driver procedeva attraverso numerose allocazioni individuali, riservando un cluster alla volta. Un cluster rappresenta l’unità minima di allocazione utilizzata dal file system per organizzare lo spazio disponibile. Quando la richiesta coinvolge quantità consistenti di dati, ripetere continuamente la stessa procedura introduce un sovraccarico evitabile, aumentando il lavoro richiesto al codice del kernel.
La correzione interviene proprio su questo comportamento. Anziché effettuare una successione di piccole allocazioni, il driver può ora riservare più cluster attraverso una singola chiamata. In questo modo diminuisce il numero di operazioni necessarie per completare la richiesta e viene ridotto il lavoro amministrativo che accompagna la gestione dello spazio. La modifica è stata proposta senza alterare il funzionamento generale del formato FAT32, concentrandosi esclusivamente sul percorso responsabile dell’allocazione.
Linux 7.4 porta un incremento di velocità impressionante
I risultati condivisi dall’autore della modifica mostrano un’accelerazione che arriva fino a 265 volte rispetto all’implementazione precedente. Si tratta del valore massimo rilevato nei test, non di un incremento garantito per qualsiasi operazione eseguita su un dispositivo FAT32. L’entità del vantaggio dipende infatti dal tipo di richiesta e dalle condizioni in cui viene effettuata la riserva dello spazio.
La patch è stata integrata nel ramo di sviluppo del kernel durante il lavoro sul pull request non-MM presentato da Andrew Morton. Il suo inserimento rappresenta un esempio interessante di ottimizzazione mirata: invece di intervenire sull’intera struttura del file system, gli sviluppatori hanno individuato un passaggio inefficiente e ne hanno semplificato l’esecuzione.
La ricaduta pratica riguarda soprattutto applicazioni e strumenti che utilizzano la preallocazione dei file. Non bisogna quindi aspettarsi che ogni trasferimento su una chiavetta USB o ogni apertura di un documento diventi improvvisamente più rapida. Il risultato più importante è un altro: Linux continua a migliorare anche il supporto a tecnologie storiche, evitando che la loro longevità si traduca necessariamente in prestazioni inefficienti.