A Linux 7.3-ban az XFS fájlrendszer felhasználói szempontból egyetlen igazán említésre méltó újdonságot kap: támogatást adtak a FALLOC_FL_WRITE_ZEROES használatához. A Linux 6.17-ben vezették be a FALLOC_FL_WRITE_ZEROES jelzőt a fallocate() híváshoz, amellyel hatékonyan lehet egy megadott fájlt vagy fájltartományt nullázni. NVMe Deallocate vagy hasonló SCSI szabványok segítségével a fájl vagy tartomány nullázását át lehet adni a háttértárnak, ami sokkal hatékonyabb és jobb teljesítményt ad, mint amikor user space-ben kézzel nullázzák vagy előre inicializálják a fájlt. A FALLOC_FL_WRITE_ZEROES működéséről további részletek:
A
fallocate()jelenleg hatékonyan támogatja az előre lefoglalt fájlok létrehozását. A legtöbb fájlrendszeren azonban afallocate()a blokkokat nem írt (unwritten) állapotban foglalja le akkor is, ha aFALLOC_FL_ZERO_RANGEopció van megadva.
A tartomány kiterjedési állapotát (extent state) később írott (written) állapotra kell alakítani, amikor a felhasználó adatot ír erre a tartományra. Ez számos metaadat-módosítást és naplózási (journal) I/O-műveletet válthat ki.
Ez jelentős írási többletet (write amplification) és teljesítményromlást okozhat szinkron írási módban.
Jelenleg ennek elkerülésére az egyetlen módszer egy üres fájl létrehozása, majd nullákkal való feltöltése (például a
ddhasználatával, nagy blokkmérettel). Ez a módszer azonban lassú, és jelentős lemezsávszélességet használ fel.
Mivel egyre több flashalapú tárolóeszköz áll rendelkezésre, lehetőség nyílik a nullák hatékony SSD-re írására az UNMAP write zeroes paranccsal, amennyiben az eszköz nem ír ténylegesen fizikai nullákat az adathordozóra.
Ha például egy SCSI SSD támogatja az UNMAP bitet, vagy egy NVMe SSD támogatja a DEAC bitet [1], akkor a „write zeroes” parancs nem ír tényleges adatot az eszközre. Az NVMe ehelyett a lenullázott tartományt felszabadított (deallocated) állapotba helyezi. Ez gyorsan végrehajtható, és gyakorlatilag semmilyen lemezírási sávszélességet nem igényel.
Ez a patchsorozat megvalósítja a
BLK_FEAT_WRITE_ZEROES_UNMAPfunkciót, valamint aBLK_FLAG_WRITE_ZEROES_UNMAP_DISABLEDjelzőt az SCSI-, NVMe- és device-mapper-illesztőprogramokban. Emellett hozzáadja aFALLOC_FL_WRITE_ZEROESés aSTATX_ATTR_WRITE_ZEROES_UNMAPtámogatását az ext4 fájlrendszerhez és a nyers blokk-eszközökhöz (raw bdev).
A
fallocate()ezt követően kibővül aFALLOC_FL_WRITE_ZEROESkapcsolóval. AFALLOC_FL_WRITE_ZEROESúgy nullázza a megadott fájltartományt, hogy az adott tartomány későbbi felülírása során ne legyen szükség további módosításokra a fájl leképezési metaadataiban.
Ez a kapcsoló különösen akkor előnyös, ha a tartományon később teljes egészében felülírás történik, mivel így elkerülhető a blokkok újbóli lefoglalása, és ezáltal jelentős mennyiségű metaadat-módosítás takarítható meg. Amikor tavaly beolvasztották a kernelbe, az EXT4 volt az első fájlrendszer, amely megvalósította a FALLOC_FL_WRITE_ZEROES támogatását, most pedig a Linux 7.3-ra az XFS is készen áll rá. A többi XFS frissítés a Linux 7.3-ban rutinszerű hibajavításokat és kódbeli fejlesztéseket tartalmaz.

