XFS: FALLOC_FL_WRITE_ZEROES érkezik a hatékonyabb működésért a Linux 7.3-ban

enlightened Ez az oldal a közösségért készül. heart Kövess minket máshol is:  Linux Mint Magyar Közösség a Mastodon-on  Telegram csatorna – csak hírek  Beszélgessünk a Telegram – Linux csevegő csoport  Hírek olvasása RSS segítségével  Linux Mint Hivatalos Magyar Közösség a Facebook-on      Linux Mint Baráti Kör a Facebook-on
wink Ha hasznosnak találod, és szeretnéd, hogy folytatódjon, támogasd a munkát Ko-fi vagy Paypal segítségével. laugh

kami911 képe

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 a fallocate() a blokkokat nem írt (unwritten) állapotban foglalja le akkor is, ha a FALLOC_FL_ZERO_RANGE opció 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 dd haszná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_UNMAP funkciót, valamint a BLK_FLAG_WRITE_ZEROES_UNMAP_DISABLED jelzőt az SCSI-, NVMe- és device-mapper-illesztőprogramokban. Emellett hozzáadja a FALLOC_FL_WRITE_ZEROES és a STATX_ATTR_WRITE_ZEROES_UNMAP tá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 a FALLOC_FL_WRITE_ZEROES kapcsolóval. A FALLOC_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.