NVMe atomske audicijske upisivanja bez fsync-a
Audicijski zapisi (audit logs) su ključni za sigurnost i usklađenost, ali njihova trajnost često dolazi po cijenu performansi. Tradicionalni pristup poziva fsync nakon svakog upisa kako bi se osiguralo da su podaci fizički zapisani na disk. Međutim, na NVMe uređajima, to može drastično smanjiti propusnost, osobito u sustavima s visokim opterećenjem. Srećom, postoji način da se postigne atomska upisivanja bez žrtvovanja brzine.
Problem s fsync-om
Svaki poziv fsync prisiljava kontroler da isprazni sve međuspremnike i osigura da su podaci trajno pohranjeni. To je skupo jer uključuje čekanje na fizički zapis, što na NVMe-u može uključivati i interne operacije poput garbage collection-a. U sustavima gdje se audicijski zapisi pišu često, to može postati usko grlo.
NVMe atomska upisivanja
NVMe specifikacija podržava atomske upisivanja (atomic writes) koja osiguravaju da se određeni blok podataka upisuje u cijelosti ili se uopće ne upisuje. To znači da čak i ako dođe do iznenadnog gubitka struje, neće biti djelomično zapisanih podataka. Ključ je u tome da se audicijski zapisi strukturiraju tako da svaki unos bude u zasebnom bloku ili da se koristi tehnika write-ahead logging (WAL) s atomicnim upisima.
Strukturiranje upisa
Umjesto pozivanja fsync-a nakon svakog upisa, možete grupirati više unosa u jedan veći upis koji će biti atomski. Na primjer, možete koristiti append-only datoteku gdje se novi zapisi dodaju na kraj, a svaki zapis ima kontrolni zbroj (checksum). Ako dođe do prekida, možete provjeriti zadnji valjani zapis i nastaviti od tamo. Ovo eliminira potrebu za fsync-om po unosu, jer atomski upis osigurava da se cijeli blok (koji sadrži više unosa) upisuje odjednom.
Implementacija u praksi
Kada koristite NVMe uređaje, možete iskoristiti atomic write značajku putem upravljačkih programa ili API-ja koji podržavaju ovu funkciju. Na primjer, u Linux okruženju možete koristiti io_uring s oznakom RWF_ATOMIC koja omogućava atomske upise. Također, možete koristiti direct I/O s poravnanjem na veličinu sektora kako biste osigurali da upisi budu atomski.
Prednosti i izazovi
Glavna prednost je značajno povećanje propusnosti jer se izbjegava čekanje na fsync. Također, smanjuje se opterećenje CPU-a i smanjuje latencija. Međutim, postoji izazov: morate osigurati da su upisi dovoljno veliki da budu atomski (obično 4KB ili više) i da su poravnati na granice sektora. Također, morate implementirati mehanizam za provjeru valjanosti zapisa nakon ponovnog pokretanja, koristeći kontrolne zbrojeve ili sekvencijske brojeve.
Zaključak
Korištenje atomskih upisa na NVMe uređajima bez fsync-a po unosu je izvedivo i donosi velike dobitke u performansama. Ključ je u pravilnom strukturiranju upisa i korištenju naprednih značajki NVMe-a. Ovaj pristup omogućava trajnost audicijskih zapisa bez žrtvovanja brzine, što je idealno za moderne sustave s visokim zahtjevima.
Zanima vas ovakva AI tehnologija?
RiNET gradi sovereign AI rjesenja za javni sektor i poduzeca - od civic intelligence do automatizacije nabave.
Kontaktirajte nas →
Komentari