Hur fungerar Slog zfs?

Permalänk
Medlem

Hur fungerar Slog zfs?

Hej försökt förstå mig på hur Slog i zfs fungerar men har lite oklarheter.
Vad jag förstått det som så är det en skriv cashe som gör att den kan vänta lite med skriva datan lite senare istälket för skriva direkt och den bara datan i 5 sekunder.
Så när man skall dimensionera sin slog disk så skall den vara minst vad ens nätverk klarar föra över under 5 sekunder.

Om jag skulle föra över en stor fil på 50Gb skulle jag få upp hastigheten på överföringen till vad slog disken klarar och sen för den över datan till de mekaniska diskarna , eller blir det bara 5 sekunder och flaskhalsen är de mekaniska diskarna?

Jag vill ha upp skrivhastigheten och väljer mellan om jag skall köra en z2 raid eller en raid 10 för att också få upp skrivhastigheterna.
Kommer ha 10Gbit nätverk, eventuellt 20 om jag har portar över.

Permalänk
Medlem
Skrivet av jope84:

Hej försökt förstå mig på hur Slog i zfs fungerar men har lite oklarheter.
Vad jag förstått det som så är det en skriv cashe som gör att den kan vänta lite med skriva datan lite senare istälket för skriva direkt och den bara datan i 5 sekunder.
Så när man skall dimensionera sin slog disk så skall den vara minst vad ens nätverk klarar föra över under 5 sekunder.

Om jag skulle föra över en stor fil på 50Gb skulle jag få upp hastigheten på överföringen till vad slog disken klarar och sen för den över datan till de mekaniska diskarna , eller blir det bara 5 sekunder och flaskhalsen är de mekaniska diskarna?

Jag vill ha upp skrivhastigheten och väljer mellan om jag skall köra en z2 raid eller en raid 10 för att också få upp skrivhastigheterna.
Kommer ha 10Gbit nätverk, eventuellt 20 om jag har portar över.

Skulle föreslå t.ex. https://www.truenas.com/docs/references/zilandslog/ som förhållandevis lättläst genomgång av själva principen.

Mycket kort: Det är inte en cache i egentlig mening. Men en separat SLOG på SSD snabbar upp specifikt synkrona skrivningar (särskilt om det är en pool av hårddiskar) eftersom datan annars först skrivas i ZIL på en enhet i poolen så att den finns i säkert förvar och sedan en gång till för att sprida ut den i poolen där den ska lagras permanent.

Se även: https://www.truenas.com/docs/references/slog/ för lite generella rekommendationer.

Vad gäller "raid"-nivå så har RAIDZ2 sina fördelar men är ju inte det bästa valet sett till prestanda.

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem

Det finns två typer av skrivningar, synkrona och asynkrona. Typexemplet på synkrona skrivningar är databaser, där databasen efter varje skrivning säger till operativsystemet ungefär "vänta till skrivningen ligger säkert på disk innan vi fortsätter". Det ZFS normalt gör i den situationen, om man inte har en speciell Slog-enhet, är att skriva data på ett speciellt ställe på den vanliga arrayen av diskar. Om det skulle ske en krasch under tiden data ligger där kan ZFS gå igenom dessa skrivningar nästa gång man startar och skriva dem "ordentligt". Man gör så här för att det finns risk att det blir ineffektivt att göra så kallad "copy on write" annars, vilket skulle göra ZFS mycket långsammare i vissa situationer. Med den här tekniken blir det bara ungefär hälften så långsamt som asynkrona skrivningar.

Om man skriver mycket synkrona skrivningar till ZFS kan man alltså snabba upp det hela genom att flytta de här "extra" skrivningarna till en annan enhet (eller förslagsvis spegel av enheter för att undvika problem vid krascher). Om enheten dessutom har låg skriv-latency (t ex SSD) kan det bli en väldigt stor förbättring. Säg t ex att databasen väntar 0.1 ms istället för 10 ms mellan varje skrivning, det blir en förbättring på 100x.

Skrivningar över nätverket är antagligen inte synkrona och då har en separat SLog-enhet ingen betydelse alls, den används i princip inte alls även om du lägger till den. De data som skrivs i den situationen ligger istället i minnet tills de skrivs ut "ordentligt" på diskarna.

Att skriva en stor fil till 4 diskar borde gå ungefär lika snabbt med "RAID-10" och RAID-Z2. De bör båda vara ungefär dubbelt så snabba tillsammans som en ensam disk. Har du 6 diskar borde RAID-Z2 vara snabbare, den borde vara ungefär 4 gånger snabbare än en ensam disk i den situationen (datan sprids ut på 4 diskar, plus 2 för felkorrigering), medans "RAID-10" bara skulle vara 3 gånger snabbare (datan sprids ut till 3 diskar, plus 3 för spegling). Osv. Det är dock rent teoretiskt och förutsätter att alla diskar är lika stora och lika mycket använda (dvs du har inte expanderat "RAID-10" efterhand, i så fall sjunker hastigheten eftersom större del av nya skrivningar kommer göras mot de nya tommare diskarna). Det bästa är att testa innan du bestämmer dig om det är viktigt.

Permalänk
Medlem
Skrivet av evil penguin:

Skulle föreslå t.ex. https://www.truenas.com/docs/references/zilandslog/ som förhållandevis lättläst genomgång av själva principen.

Mycket kort: Det är inte en cache i egentlig mening. Men en separat SLOG på SSD snabbar upp specifikt synkrona skrivningar (särskilt om det är en pool av hårddiskar) eftersom datan annars först skrivas i ZIL på en enhet i poolen så att den finns i säkert förvar och sedan en gång till för att sprida ut den i poolen där den ska lagras permanent.

Se även: https://www.truenas.com/docs/references/slog/ för lite generella rekommendationer.

Vad gäller "raid"-nivå så har RAIDZ2 sina fördelar men är ju inte det bästa valet sett till prestanda.

The optimal SLOG device is a small, flash-based device such an SSD or NVMe card, thanks to their inherent high-performance, low latency and of course persistence in case of power loss.

You can mirror SLOG devices as an additional precaution and be surprised what speed improvements can be gained from only a few gigabytes of separate log storage. Your storage pool has the write performance of an all-flash array with the capacity of a traditional spinning disk array.

Enligt den texten så verkar de ju som det skulle öka skrivhastigheten. Tänkte isåfall jag skull stoppa i en nvme på ttp 256gb eller om jag hittar någon intel optane disk.

Ja det är ju säkerheten med z2 som jag är intresserad av och vad jag fattar de som så ger 5 diskar i z2 ca 3x läs och 1x skriv. Därför jag vill fuska till lite högre skrivhastigheter.

L2arc tror jag inte jag har så stor nytta av då jag inte använde samma filer hela tiden då det mesta kommer vara kall lagring.
Sen vm och docker kommer hamna på en nvme så där behövs ingen cashe .

Permalänk
Medlem
Skrivet av trudelutt:

Det finns två typer av skrivningar, synkrona och asynkrona. Typexemplet på synkrona skrivningar är databaser, där databasen efter varje skrivning säger till operativsystemet ungefär "vänta till skrivningen ligger säkert på disk innan vi fortsätter". Det ZFS normalt gör i den situationen, om man inte har en speciell Slog-enhet, är att skriva data på ett speciellt ställe på den vanliga arrayen av diskar. Om det skulle ske en krasch under tiden data ligger där kan ZFS gå igenom dessa skrivningar nästa gång man startar och skriva dem "ordentligt". Man gör så här för att det finns risk att det blir ineffektivt att göra så kallad "copy on write" annars, vilket skulle göra ZFS mycket långsammare i vissa situationer. Med den här tekniken blir det bara ungefär hälften så långsamt som asynkrona skrivningar.

Om man skriver mycket synkrona skrivningar till ZFS kan man alltså snabba upp det hela genom att flytta de här "extra" skrivningarna till en annan enhet (eller förslagsvis spegel av enheter för att undvika problem vid krascher). Om enheten dessutom har låg skriv-latency (t ex SSD) kan det bli en väldigt stor förbättring. Säg t ex att databasen väntar 0.1 ms istället för 10 ms mellan varje skrivning, det blir en förbättring på 100x.

Skrivningar över nätverket är antagligen inte synkrona och då har en separat SLog-enhet ingen betydelse alls, den används i princip inte alls även om du lägger till den. De data som skrivs i den situationen ligger istället i minnet tills de skrivs ut "ordentligt" på diskarna.

Att skriva en stor fil till 4 diskar borde gå ungefär lika snabbt med "RAID-10" och RAID-Z2. De bör båda vara ungefär dubbelt så snabba tillsammans som en ensam disk. Har du 6 diskar borde RAID-Z2 vara snabbare, den borde vara ungefär 4 gånger snabbare än en ensam disk i den situationen (datan sprids ut på 4 diskar, plus 2 för felkorrigering), medans "RAID-10" bara skulle vara 3 gånger snabbare (datan sprids ut till 3 diskar, plus 3 för spegling). Osv. Det är dock rent teoretiskt och förutsätter att alla diskar är lika stora och lika mycket använda (dvs du har inte expanderat "RAID-10" efterhand, i så fall sjunker hastigheten eftersom större del av nya skrivningar kommer göras mot de nya tommare diskarna). Det bästa är att testa innan du bestämmer dig om det är viktigt.

Jasså blir skriv hastigheten också snabbare av z2?
De zfs raid kalkylatorerna jag hittat säger bara att läshastigheterna blir högre med fler diskar medans skriv blir samma som en disk pga paritetsskrivningarna.
Men om den kan lägga den i ramet så skulle kanske mer ram göra nytta. Har tänkt mig 64gb till en början.

Servern är inte byggd ännu, men chassit har kommit och vissa delar är på väg. Synd bara att jag skall iväg på jobb i 2 veckor.

Permalänk
Medlem
Skrivet av jope84:

Jasså blir skriv hastigheten också snabbare av z2?
De zfs raid kalkylatorerna jag hittat säger bara att läshastigheterna blir högre med fler diskar medans skriv blir samma som en disk pga paritetsskrivningarna.

För sekventiella skrivningar så skalar RAID-Z2 fint. Den skriver på alla diskar samtidigt i fullt blås.

För små skrivningar är jag inte helt säker på hur det är med RAID-Z2, och det beror kanske även på hur små man pratar om. En minimal 4 kB-skrivning antar jag skrivs i 3 kopior på 3 olika diskar, dvs prestanda blir något sämre än speglade diskar (och det blir mycket svinn i utrymme också!) Men mellanstora skrivningar skrivs nog ut på flera diskar och kräver alltså att alla diskar jobbar på dem utan att höja prestanda någonting. Dvs skalar inte alls, prestanda blir som att köra en ensam disk.

Skrivet av jope84:

Men om den kan lägga den i ramet så skulle kanske mer ram göra nytta. Har tänkt mig 64gb till en början.

Rent allmänt så mår ZFS bra av mycket RAM sägs det. Jag antar att det beror på att copy-on-write gör att det blir mycket sökningar på allting på disken. Men för att skriva stora filer räcker det att du ger ZFS tillräckligt med RAM för att kunna skriva 5 sekunder i maximal hastighet, dvs runt 5-10 GB i ditt fall. Så säg minst 16 GB för att ha plats med lite annat också.

Permalänk
Medlem

En Special vdev device borde väll snabba skrivningarna med eller? Tänkte om man har separata ssd för metadata så slipper de mekaniska diskarna slösa tid på massa småskrivningar.

Vad jag förstått skulle de räcka med 2st sata ssd på typ 128gb i raid 1 . Och de kostar ju inte många kronor.

Permalänk
Medlem
Skrivet av jope84:

En Special vdev device borde väll snabba skrivningarna med eller? Tänkte om man har separata ssd för metadata så slipper de mekaniska diskarna slösa tid på massa småskrivningar.

Vad jag förstått skulle de räcka med 2st sata ssd på typ 128gb i raid 1 . Och de kostar ju inte många kronor.

Jag har inte mätt eller så, men min magkänsla säger att metadata upptar en väldigt liten del av tiden när du skriver sekventiellt. Så det kommer antagligen inte snabba upp nämnvärt.

Jag känner inte till något i ZFS som löser ditt problem. Jag tror du kommer behöva titta på andra lösningar, t ex bcache eller Unraid som har någon slags "skriv-buffert" som kan ligga på SSD. Det är dock inget jag kan något om. Tänk dock på att en liten SSD kan slitas mycket om alla skrivningar ska gå via den.

Alternativt helt enkelt betala mer för bättre hårdvara - skaffa fler hårddiskar eller gå över till SSD helt och hållet (billigaste SSD kostar bara ca 3 gånger så mycket som billigaste hårddisken per TB, men den låga kapaciteten på de billigare varianterna kan göra det hela dyrare i praktiken).

Permalänk
Medlem
Skrivet av trudelutt:

För små skrivningar är jag inte helt säker på hur det är med RAID-Z2, och det beror kanske även på hur små man pratar om. En minimal 4 kB-skrivning antar jag skrivs i 3 kopior på 3 olika diskar, dvs prestanda blir något sämre än speglade diskar (och det blir mycket svinn i utrymme också!) Men mellanstora skrivningar skrivs nog ut på flera diskar och kräver alltså att alla diskar jobbar på dem utan att höja prestanda någonting. Dvs skalar inte alls, prestanda blir som att köra en ensam disk.

Kan förresten rätta det här, läste mer om det igår efter jag skrev inlägget.

Om man skulle skapa en stor fil genom att var 5:e sekund skriva 4 kB till den skulle det nog funka som jag beskrev ovan. Men det är nog ovanligt i praktiken. Om man ändrar 4 kB i mitten på någon fil som skrivits på ett mer normalt sätt innan (sekventiellt eller nära på) så måste ZFS läsa in en hel "chunk" av data från alla diskar i stripen förutom pariteten (data verifieras med checksummor, felkorrigeringsdata används bara om data inte stämmer överens med checksumman eller en disk inte kan läsas). Hur stor den här "chunken" är beror dels på inställningar man gör (recordsize, vanligt är 128 kB - 1 MB) och dels på hur stor skrivningen var från första början. Sedan gör ZFS ändringen på 4 kB och skriver tillbaka hela "chunken" inkl felkorrigeringsdata på ett nytt ställe, vilket då involverar alla diskarna.

För läsningar på 4 kB så gör man ungefär samma, förutom att man inte behöver skriva tillbaka någonting. Dvs även om man bara vill läsa 4 kB så läser den ändå in hela "chunk:en" på t ex 128 kB som ligger utspridd på alla diskar (förutom de diskarna som innehåller felkorrigeringsdata för den här "chunk:en"). Sedan beräknas checksumma och jämförs med det lagrade värdet, och om allt är som det ska returneras data till programmet som läser.

Därav att RAID-Zx är lika långsamt som en ensam disk på random reads och random writes.