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

Deux flux conceptuels d’allocation de stockage : plusieurs appels pour un cluster sont regroupés en un seul appel pour plusieurs clusters.

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 matriceFichiers et taille par fichierTaille des clustersMontage synchroneTemps de boucle avantTemps de boucle aprèsRapport des tempsÉchantillons
Résultat le plus élevé16 × 16 Mio4 096 octetsOui92,489 s0,348 s≈ 265,8×10
Résultat le plus faible128 × 16 Kio512 octetsNon1,287 ms0,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.