Puncte:2

Scrie în rețea de mare viteză cu capacitate mare de stocare

drapel pf

Am un NAS care rulează Samba cu un pool ZFS 20T cu un vdev raid1 cu două unități de ruginie rotative. Am 16G RAM în aparat chiar acum. Spațiul de stocare este folosit pentru o arhivă de rezervă permanentă a înregistrărilor video în continuă creștere. Este scris o dată, citit o dată pentru procesare și apoi eventual restaurare de rezervă.

Arunc în mod regulat fișiere de 40 GiB pe acest NAS. Îmi voi actualiza rețeaua gigabit la 10GbE pentru a face acest proces mai puțin dureros. Cu toate acestea, bănuiesc că voi deveni limitat de viteza de scriere a unităților de bază.

Înțeleg că un ZIL și SLOG accelerează doar scrierile sincrone, așa că adăugarea unui SSD nvme ca SLOG nu mi-ar afecta cazul de utilizare, deoarece cred că Samba folosește scrieri asincrone în mod implicit.

Nu sunt sigur dacă configurarea samba pentru scrieri sincrone și adăugarea unui SLOG pe un SSD nvme ar face ceea ce am nevoie. Înțeleg că acest lucru vine cu riscul de pierdere a datelor dacă unitatea se defectează sau se întrerupe alimentarea.Acest lucru este acceptabil deoarece rețin fișierele pe mașina sursă suficient de mult pentru a fi retransferate în cazul pierderii de date pe termen scurt. Uzura SSD-ului este o preocupare, dar unitățile obișnuite au 300 TBW sau cam acolo, ceea ce este suficient pentru a umple NAS-ul meu niciodată șters de 15 ori, sau în 75 de ani la rata actuală de generare de date, sunt de acord cu asta și să cumpărați un nou SSD dacă/când SSD-ul se sparge. Acestea sunt avertismente acceptabile. În mod normal, aș încerca doar să fac un benchmark, dar în actuala lipsă de totul, aș dori să știu din timp ce trebuie să cumpăr pentru asta.

Știu că pot adăuga mai multe vdev-uri raid 1 la pool pentru a obține un pool raid 10, dar acest lucru este prea scump, șasiul midtower nu poate suporta atât de multe unități, alimentează extrem de mult piscina împreună cu unitățile existente și ar folosi mai multă energie. timpul să țină toată rugina să se învârtească.

Care sunt opțiunile mele pentru a obține viteze de scriere care depășesc 10 Gbps în acest pool zfs pentru cel puțin 40GiB de date, în afară de adăugarea mai multă rugină la pool într-un mod raid 10?

Puncte:3
drapel us

Modul de scriere sincronă asigură că scrierile ajung imediat într-o locație persistentă. Cu scrierile asincrone, datele sunt stocate în cache în RAM și apelul de scriere se termină imediat. Sistemul de fișiere va programa scrierile reale în locația finală (hard disk).

În cazul ZFS, scopul ZIL / SLOG este să acționeze ca o stocare rapidă și persistentă, care permite modul sincron, adică asigurând clientul de scriere că scrierile sunt finale. În caz contrar, sistemul de fișiere ar trebui să scrie blocurile direct pe hard disk, ceea ce face modul sincron lent.

În cazul dvs., dacă doriți să vă asigurați viteza maximă de scriere a 40 GB de date, atunci ar trebui să vă măriți dimensiunea RAM pentru a acoperi dimensiunea fișierului.

Cu toate acestea, deoarece FS începe să scrie imediat pe hard disk, nu aveți nevoie de memorie de 40 GB pentru a obține viteza maximă pentru scrieri. De exemplu, când clientul a scris 20 GB de date, 10 GB ar putea fi în memoria cache RAM, iar restul 10 GB deja în hard disk.

Deci, trebuie să faceți niște benchmarking pentru a vedea de câtă memorie RAM aveți nevoie pentru a obține viteza maximă de scrieri.

drapel pf
Am crezut că memoria tampon de scriere bazată pe RAM era limitată la o anumită dimensiune. Vrei să spui că ZFS va înghiți cu bucurie toată memoria sistemului ca cache de scriere? Mi se pare surprinzător, deoarece ar putea cauza tot felul de probleme ciudate de performanță dacă nu lăsați suficientă memorie RAM pentru lansarea de noi procese...
Puncte:2
drapel ca

Î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.

djdomi avatar
drapel za
sau pur și simplu adăugați un SATA-SSD ca stocare în cache pentru aproximativ 500 MB/s sau NVME pentru 1 gb/s++++++++
shodanshok avatar
drapel ca
@djdomi nu, așa cum s-a explicat mai sus, o unitate SLOG **nu** este o unitate cache de scriere inversă. Pentru ceea ce sugerați, ar trebui să folosiți `lvmcache` sau `bcache`, fără implicarea ZFS.
djdomi avatar
drapel za
nu, dar zil o poate face
shodanshok avatar
drapel ca
@djdomi din nou, nu: ZIL este jurnalul de intenții ZFS, iar un SLOG este pur și simplu un dispozitiv dedicat sarcinilor ZIL (mai degrabă decât folosind pool-ul principal).
djdomi avatar
drapel za
oricum se numește, există un cache de scriere nativ pe Zfs și asta este încă un fapt și un ssd poate fi folosit pentru asta
shodanshok avatar
drapel ca
@djdomi bine, vă sugerez să citiți o documentație. De exemplu: https://www.servethehome.com/what-is-the-zfs-zil-slog-and-what-makes-a-good-one/
drapel pf
Acest lanț de comentarii de exact de ce pun întrebarea în timp ce găsesc în permanență informații contradictorii și manualul pe care l-am citit dorește să clarifice exact beneficiile așteptate în cazul meu. Mi-ar plăcea dacă confuzia ar putea fi lămurită.
shodanshok avatar
drapel ca
@EmilyL. Mi-am actualizat răspunsul, aruncați o privire.
drapel pf
Nu am spus niciodată că am un raidz pool, pool-ul meu este un raid1 vdev. Nu am nevoie de scriere consistentă de 10Gbps, am nevoie de 10Gbps pentru 40GiB. Piscina mea este de 20T cu două unități, obținerea acestui tip de capacitate cu SSD-uri este în afara bugetului.
shodanshok avatar
drapel ca
Ai (cu mult peste) 40 GB RAM? Dacă da, puteți (de)ajusta ZFS, forțându-l să păstreze mulți GB de date în cache în ARC pentru o perioadă lungă de timp, dar acest lucru ar fi groaznic atât pentru siguranța datelor, cât și pentru performanță (veți suferi blocaje de *minute*). când ZFS decide în cele din urmă să scoată paginile murdare într-un spațiu de stocare stabil). Pentru o astfel de încărcare de lucru, ZFS nu este alegerea potrivită, iar raidz vs mirror nu schimbă nimic. Aș încerca mai degrabă `lvmcache` în modul writeback, dar în acest caz fiți conștienți de faptul că un dispozitiv de cache defect va provoca pierderi de date (cu alte cuvinte: trebuie să vă oglindiți dispozitivele cache).

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.