Phoronix a rapporté le 29 octobre 2026 que la modification du pilote FAT avait été intégrée à Linux 7.4 au cours de cette semaine. Elle accélère un chemin précis de préallocation : dans le cas le plus rapide, les durées publiées passent de 92,489 s à 0,348 s pour une boucle de réservation d’espace, pas pour une copie ordinaire de fichiers.
Ce que change l’allocation FAT32
fallocate() réserve de l’espace de stockage à l’avance. Avec FALLOC_FL_KEEP_SIZE, cette préallocation ne modifie pas la taille affichée du fichier. Le changement de Matheus Alves de Almeida concerne cette opération dans le pilote FAT de Linux.
Un appel réserve plusieurs clusters à la fois
Un cluster est une unité d’allocation du système de fichiers. Dans le chemin FALLOC_FL_KEEP_SIZE, le code appelait auparavant fat_add_clusters(inode, 1) de façon répétée, un cluster à la fois. Le patch transmet le nombre de clusters demandé à un seul appel de fat_add_clusters().
Le changement porte donc sur la manière dont le pilote lance l’allocation. Matheus Alves de Almeida explique que le regroupement peut aussi rassembler les mises à jour FAT sur les montages synchrones, où chaque allocation de cluster était autrement traitée de façon synchrone.
Les conditions derrière les résultats
Le cas le plus rapide concerne 16 fichiers de 16 Mio chacun, des clusters FAT32 de 4 096 octets et un montage synchrone. Matheus Alves de Almeida rapporte que la boucle chronométrée est passée de 92,489 s à 0,348 s. Le rapport de ces durées correspond à environ 265,8×. Le patch indique un environnement QEMU/KVM, un périphérique virtio-blk et cache=none; les temps sont des moyennes de 10 échantillons.
Le résultat le plus faible parmi les 12 configurations listées concerne 128 fichiers de 16 Kio, des clusters de 512 octets et un montage non synchrone. La boucle est passée de 1,287 ms à 0,241 ms, soit environ 5,3×, sur la moyenne de 10 échantillons indiquée pour ce cas.
| Cas de la matrice | Fichiers et taille par fichier | Taille des clusters | Montage synchrone | Temps de boucle avant | Temps de boucle après | Rapport des temps | Échantillons |
| Résultat le plus élevé | 16 × 16 Mio | 4 096 octets | Oui | 92,489 s | 0,348 s | ≈ 265,8× | 10 |
| Résultat le plus faible | 128 × 16 Kio | 512 octets | Non | 1,287 ms | 0,241 ms | ≈ 5,3× | 10 |
La préallocation n’est pas une copie de fichiers
La boucle testée appelle fallocate() avec FALLOC_FL_KEEP_SIZE pour chaque fichier. Elle mesure donc le temps de cette préallocation dans les conditions indiquées, et non le débit de cp, de dd ou d’une copie ordinaire. Les multiplicateurs décrivent les cas de la matrice du patch, avec des gains particulièrement importants sur les montages synchrones; ils ne mesurent pas la vitesse générale des lectures, écritures ou transferts FAT32.