La modifica FAT32 che Phoronix ha riferito integrata in Linux 7.4 riguarda una specifica operazione di preallocazione: il dato massimo di 265,4× viene da un test su quell’operazione, non da una misura delle normali copie di file.
Phoronix ha riferito il 29 ottobre che la modifica era confluita in Linux 7.4 nel corso della settimana iniziata il 26 ottobre. La patch di Matheus Alves de Almeida interviene sul percorso FALLOC_FL_KEEP_SIZE, che riserva spazio su disco senza cambiare la dimensione registrata del file.
Come cambia l’allocazione dei cluster
Un cluster è un’unità di spazio che il filesystem assegna ai file. Nel percorso modificato, il codice precedente chiedeva un cluster alla volta; la patch passa invece il numero di cluster richiesto a una sola chiamata di fat_add_clusters().
Secondo Matheus Alves de Almeida, il raggruppamento può essere particolarmente vantaggioso sui mount sincroni: il codice può accorpare gli aggiornamenti della FAT, invece di gestire separatamente e in modo sincrono ogni allocazione.
Che cosa misura il risultato di 265,4×
Il valore massimo riguarda un ciclo che eseguiva fallocate() su 16 file da 16 MiB ciascuno, con cluster FAT32 da 4.096 byte e mount sincrono. Nel benchmark riportato dall’autore della patch, il ciclo è passato da 92,489 secondi a 0,348 secondi, media aritmetica di 10 campioni. L’ambiente indicato era QEMU/KVM con un dispositivo virtio-blk e cache=none.
Tra i 12 casi pubblicati, il risultato più basso era 5,3×: 128 file da 16 KiB, cluster da 512 byte e mount non sincrono. Il ciclo è passato da 1,287 a 0,241 millisecondi, anche in questo caso come media di 10 campioni.
| Caso | File e dimensione per file | Cluster FAT32 | Mount sincrono | Tempo totale del ciclo prima | Tempo totale del ciclo dopo | Miglioramento riportato | Campioni |
| Massimo | 16 × 16 MiB | 4.096 byte | Sì | 92,489 s | 0,348 s | 265,4× | 10 |
| Minimo | 128 × 16 KiB | 512 byte | No | 1,287 ms | 0,241 ms | 5,3× | 10 |
La preallocazione non è una copia di file
Il ciclo del benchmark chiamava fallocate() con FALLOC_FL_KEEP_SIZE per ciascun file. Misurava quindi il tempo necessario a riservare spazio in quel percorso FAT32. Non misurava la velocità di copia, lettura o scrittura dei file: il picco di 265,4× descrive quella specifica preallocazione e le condizioni del test.