Înțeleg că acest lucru vine cu riscul de pierdere a datelor dacă unitatea se defectează
sau întreruperea curentului. Acest lucru este acceptabil deoarece rețin fișierele de pe
mașină sursă suficient de lungă pentru a fi retransferată în cazul datelor pe termen scurt
pierderi
Dacă puteți tolera pierderea a până la 5 secunde de scrieri, puteți pur și simplu să configurați ZFS ignora sincronizarea cererilor cu comanda zfs set sync=tanc dezactivat
Forțarea tuturor scrierilor să treacă printr-un SLOG, chiar și unul foarte rapid, este nu mai rapid decât ocolirea solicitărilor de sincronizare. SLOG nu este un cache clasic de writeback, care absoarbe scrierea pentru a le demonta la nivelul mai lent. Mai degrabă, este un mijloc de a oferi persistență cu latență scăzută prin stocarea temporară a scrierii de sincronizare (și numai ei) într-un depozit rapid intermediar. După câteva secunde, aceleași scrieri vor fi transferate din memoria principală în pool-ul principal. Un SLOG nu este citit niciodată până când nu are loc o blocare (și se recuperează).
Acestea fiind spuse, cu un singur vdev oglindă bazat pe HDD, nu veți putea niciodată să saturați o legătură de 10 Gbs. Pentru a scrie constant la viteza de ~1 GB/s, aveți nevoie macar 10 HDD în raidz2 sau 12+ HDD în oglindă+striping. Sau, și mai bine, aveți nevoie de un pool complet SSD. Asta chiar înainte de a considera lucrurile ca dimensiunea recordului
, comprimare
, etc.
EDIT, pentru a clarifica joburile SLOG:
Pentru a minimiza latența pentru scrierile sincronizate, ZFS a folosit așa-numitul ZFS Intent Log (ZIL). Pe scurt: de fiecare dată când sosește scrierea sincronizată, ZFS le scrie imediat într-o zonă temporară de pool numită ZIL. Acest lucru permite ca scrierile să revină imediat, permițând aplicației de apelare să continue. După câteva secunde, la confirmarea tranzacției, toate înregistrările scrise în ZIL primesc răspuns la pool-ul principal. Asta face nu înseamnă că ZIL este citit la fiecare comitere; mai degrabă, datele care urmează să fie scrise provin din memoria cache principală DRAM ARC. Cu alte cuvinte, ZIL este un fel de „jurnal de înregistrare” care asigură persistența rapidă a datelor pentru datele de sincronizare care urmează să fie scrise.
Aceasta înseamnă de fapt că scrierile sincronizate sunt duplicate: sunt scrise ambii la ZIL și la piscina principală. Introduceți SLOG (dispozitiv de jurnal separat): un dispozitiv dedicat sincronizare doar scrieri - adică: eliberează pool-ul principal de traficul ZIL. Un SLOG SSD rapid este important, deoarece HDD-urile sunt foarte lente pentru scrierile de sincronizare. SLOG-ul nu este cache-ul clasic de writeback deoarece:
- absoarbe doar scrierile sincronizate, ignorând complet scrierile normale;
- reproduce numai datele care sunt deja stocate în cache în ARC.
Cele două puncte combinate înseamnă că un SLOG mare este practic irositor, deoarece are nevoie doar de 3 ori dimensiunea maximă a unei tranzacții ZFS. Cu alte cuvinte, un SLOG de 2-4 GB este suficient pentru majoritatea cazurilor, cu un SLOG mai mare util doar în anumite setări.
Un astfel de SLOG este esențial pentru a oferi o latență mai mică pentru scrierile de sincronizare aleatoare, dar, deși poate absorbi vârfuri foarte mici de scrieri de sincronizare secvențială, aceasta nu este funcția sa principală. Cu alte cuvinte, puteți vedea ZIL/SLOG ca o porțiune persistentă de ARC. Corolarul este că nu vă puteți aștepta să scrieți zeci de GB și să ascundeți viteza lentă a pool-ului principal prin SLOG, deoarece aceasta înseamnă că aveți deja zeci de GB de date murdare. în interiorul ARC bazat pe RAM.
Setare sincronizare=dezactivat
instruiți ZFS să amenințe toate scrierile, chiar și cele sincronizate, așa cum scrierile asincrone normale. Acest lucru va ocoli orice date ZIL/SLOG și dacă puteți accepta o fereastră de pierdere de date de 5 secunde, aceasta este setarea mai rapidă pe care o puteți realiza vreodată - chiar și în comparație cu SLOG foarte rapid ca Optane sau RAMdrive. Lucrul frumos despre sincronizare=dezactivat
este că nu dezactivează scrierea de sincronizare pentru metadatele proprii ZFS și, prin urmare, nu vă pune sistemul de fișiere în pericol. Acest lucru nu înseamnă că îl puteți folosi cu ușurință: așa cum este menționat de mai multe ori, ar trebui să fiți sigur că înțelegeți implicațiile sale (puteți pierde ultimele secunde de date nesincronizate în caz de blocare/pierdere de putere).
Pe de altă parte, un cache clasic de writeback bazat pe SSD ca lvmcache
și bcache
poate folosi (mai mult sau mai puțin) eficient sute de GB de memorie cache SSD pentru a masca latența/debitul pool-ului principal - mai ales pentru că sunt cache-uri cu writeback complet care nu trebuie să aibă datele lor în memoria principală (dimpotrivă, memoria principală se înroșește singur prin aceste cache-uri SSD).
Raționamentul din spatele ZFS a fost că memoria principală (mare) a sistemului este cache-ul tău real de citire/scriere, SLOG fiind un mijloc de a avea o latență mai mică pentru scrierile de sincronizare aleatoare.