OpenSolaris 2009.06 är här!
Okki!
1. Har man g:la sunkdiskar som NTFS inte "vill ha" så kan man med trygghet köra dom i ZFS, förutsatt Raidz? Låter en aning farligt då en disk som börjar få hårda fel inom kort brukar totalkrascha.
2. Har man glappkontakt som NTFS och ICHxR får arrayen att "Faila" så fixar ZFS detta? Det är ju inte diskens fel att kontakterna glappar men kan i vissa fall ge korrupta data och dess klarar även andra än Raiidz att upptäcka och fixa mha en rebuild.
3. Sk. silent corruption loggas inte av ZFS, ej heller av något annan RAID-implementation, så här har vi inga praktiska användarerfarneheter utan är hänvisade till sk. "forskare" som drar sina slutsatser av statistiska teorier i analogi med att det är bättre att tro på Gud än inte tills dess vi VET om Gud existerar och gör han/hon det så handlar det inte längre om tro utan om vetande och isf riskerar all världens religioner att krascha och mänskligheten med dem.
4. Att ZFS/Raidz upptäcker att en disk i arrayen faller bort är inte alls unikt för ZFS, alla seriösa RAID-implementationer gör detta. Min erfarenhet av detta från Windows är att om detta beror på glappkontakt och man fixar detta så tvingas det fram en total rebuild som tar tid. Mitt knep för att undvika rebuild är att i ICHxR avRaida alla diskar i arrayen, omboota, Raida in dom igen, återladda MBR, och vips är saken "biff" sas. Kan man göra så i ZFS?
1. Jag tror inte man med "trygghet" kan köra sunkdiskar eftersom alla diskar kanske kraschar snart. Men om de inte skulle krascha så skulle jag utan tvekan kunna köra sunkdiskar med ZFS. Men det måste vara raidz, förstås.
2. ZFS detekterar alla fel och talar om att du har problem. Det märker du när du begär status rapport "zpool status".
pool: TempStorage
state: ONLINE
status: The pool is formatted using an older on-disk format. The pool can
still be used, but some features are unavailable.
action: Upgrade the pool using 'zpool upgrade'. Once this is done, the
pool will no longer be accessible on older software versions.
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
TempStorage ONLINE 0 0 0
c7d0p4 ONLINE 0 0 0 <---------------- här detekteras bl.a. silent corruption
errors: No known data errors" <-------------- här detekteras bl.a. silent corruption
Skälet till att ZFS kan detektera felen är att det är end-to-end checksums. Dvs, ZFS jämför alltid början med slutresultatet. Dvs, datat i RAM och datat på disk - blev det lika? Det sker en jämförelse mellan kedjans början och kedjans slut, dvs end-to-end. Andra filsystem jämför inte end-to-end. De skickar ned data från RAM till disk kontrollern - och litar på att det går bra. Men antag att det är BIOS buggar i disk kontrollern? Det finns flera lager i lagringsstacken, grovt finns: RAM ned till kort, kort ned till disk. Egentligen finns det många fler lager. Det var nån studie från... CISCO(?) som visade att packade data kan komprimeras och dekomprimeras runt 7 gånger på väg ned till disk, från RAM. Det kan bli fel när data passerar olika lager. Men ZFS jämför hela tiden RAM mot slutresultatet. End-to-end. Ingen annan gör just detta, dvs kontroll mellan olika lager från början till slut.
3. Nej, silent corruption loggas inte av ZFS, men du när du skriver "zpool status" så ser du alla fel som uppstod och som reparerades (inkl fel med silent corruption). De s.k. "forskarna" du pratar om: de forskar i datavetenskap och har artificiellt introducerat massa fel i ZFS. Dvs, error injection på olika knepiga sätt - och ZFS detekterade alla fel utan problem (pga end-to-end checksums). Men ZFS lyckades inte reparera alla felen pga forskarlaget inte körde raidz.
I andra studier så har XFS, JFS, ReiserFS, etc inte ens lyckats detektera alla fel som injicerades. Än mindre reparera felen. Det viktigaste är att detektera felen - för hur ska du annars känna till att det finns något att reparera?
Mao, anser jag inte att dessa forskningsresultat är värdelösa. ZFS är robust mot många fel och detekterar alla fel som provocerades fram - men forskarna visade att om man korruptar datat i RAM så är ZFS chanslös. Men det är naturligt - ZFS garanterar bara att det som får in, skrivs ned korrekt. ZFS kontrollerar inte om datat som ska sparas ned är korrekt. Så forskarnas slutsats är att man MÅSTE köra ECC RAM tillsammans med ZFS. Därför att RAM är svagaste länken i kedjan. När väl ZFS fått tag i datat så är det säkert. Men innan ZFS fått tag i datat så behöver du ECC. (Det visar sig att inte ens ECC är 100% säkert, det finns bättre RAM-tekniker, men det är dyrare).
Jag har länkat till dessa forskningsartiklar tidigare. Det är bara att läsa dem.
4. ZFS bygger aldrig om allting i onödan. ZFS bygger endast om de data som fattas. Mao kan det gå snabbt att reparera raidet. Mao, så har du inte samma problem i ZFS: där du bygger om hela disken från scratch.
1) Jag körde två diskar speglade så förhoppningsvis kraschar de inte samtidigt båda två. Spegling, alltså zfs mirror är ett bra alternativ till raidz. Jag vet att även hederlig raid1 ger samma skydd mot krasch men det känns som att man har någorlunda koll när det börjar bli fel när man kör ZFS tycker jag. Visst jag hade problem med en av diskarna innan jag körde ZFS och körde hårddisktillverkarens reprationsprogram som hittade någon skadad sektor och reparerade (reallokerade) den. Sedan dess hade jag inga mer problem med den disken och jag påstår inte att det är pga ZFS den inte havererade sedan utan jag menar att jag tack vare ZFS mirror kände att jag vågade fortsätta använda disken utan att det skulle orsaka någon större skada om den havererade.
2) Jag vet inte vad ICHxR fixar, Jag körde disken med NTFS ensam innan. Kör man ZFS mirror så kan den reparera skadade filer genom att läsa från den andra disken (precis som en raid1 också skulle kunna fixa detta). Jag tror dock att ZFS är bättre på att reparera och detektera vilka filer som skadats.
3) Finns säkert en viss (troligen ganska låg) sannolikhet att ett fel råkar slumpa sig så att det inte skulle påverka checksumman och således inte bli detekterat av ZFS. Jag har inte forskat om hur stor den sannolikheten är.
4) ZFS brukar försöka att reparera felen så snart det är möjligt, alltså det blir resilver om en disk som fallit bort på grund av glapp kommer tillbaka igen och som saddam beskrivit så kan denna resilver gå ganska snabbt. Man kan se att det har förekommit om man kollar zpool status men man kan inte se exakt när det insträffade eller vad som orsakade det. Om reparation inte var möjlig så kan man se vilka filer som påverkats av felet som har blivit upptäckta. Men för att upptäcka alla existerande fel får man köra zpool scrub emellanåt så att diskarna söks igenom.
På det hela taget sår man känslan av att det är ganska robust och säkert att köra ZFS.
3) Finns säkert en viss (troligen ganska låg) sannolikhet att ett fel råkar slumpa sig så att det inte skulle påverka checksumman och således inte bli detekterat av ZFS. Jag har inte forskat om hur stor den sannolikheten är.
Det beror helt på vilken checksumma som används. ZFS's förvalda checksumma fletcher2 (om det inte har förändrats under det senaste året) är felaktigt implementerad och har extrema brister för vissa typer av fel. Ironiskt nog har man en ännu värre klass av problem om man implementerar den rätt...
Som användare så är det bästa man kan göra att byta till fletcher4. SHA-256 hade varit idiotsäkert men är beräkningsmässigt tyvärr alldeles för dyr.
"Nothing is impossible because impossible itself says I M Possible..."
Om man byter från fletcher2 till fletcher4 då gäller väl detta endast för nya filer man sparar i filsystemet? Såg att jag visst hade fletcher2 på mina filsystem. Kan tänka mig att man kan skapa ett nytt filsystem med fletcher4 och sedan flytta filerna dit och sedan ta bort det gamla filsystemet. Slutligen kan man väl byta namn på det nya filsystemet så det heter likadant som det gamla gjorde.
Det är rätt metod eller räcker det att bara ändra värdet på denna option?
Det beror helt på vilken checksumma som används. ZFS's förvalda checksumma fletcher2 (om det inte har förändrats under det senaste året) är felaktigt implementerad och har extrema brister för vissa typer av fel.
Det har klagats på implementationen av fletcher2 förrut, t.ex.
OpenSolaris Forums : fletcher2/4 implementations ...
Och detta fixades förrut i b114
Bug ID: 6740597 zfs fletcher-2 is losing its carries
Som användare så är det bästa man kan göra att byta till fletcher4. SHA-256 hade varit idiotsäkert men är beräkningsmässigt tyvärr alldeles för dyr.
Om du verkligen är nojjig så kan du ställa in att default checksumme algoritm är SHA-256 när du beräknar säkerhet.
# zfs set checksum=sha256 dataset
Detta är ett av skälen till att ZFS är lite långsammare än andra filsystem. De andra filsystemen gör inte alls lika många beräkningar för att kontrollera data integriteten. Ju fler beräkningar, desto långsammare, men desto även säkrare. Det går åt 1GHz cpu för att beräkna checksummor för 500MB/sek med fletcher2 - det är alltså ganska snabbt och är effektivt. SHA-256 skulle dra mer kraft. Man måste göra avvägning.
Checksummorna som weeblie pratar om här, fletcher2, används inte för att kolla kollisioner (vilket görs i dedup). Mao, är det inte alls lika höga krav för dessa checksummor för säkerhet, som det är i dedup. I dedup är kraven höga eftersom det används för att hitta kollisioner mellan två liknande datablock. Dessa höga krav ser vi av att SHA-256 är standard i dedup. Tidigare var det fletcher4 som var standard i dedup men det hade brister eftersom det kunde faktiskt generera kollisioner (även om sannolikheten var mycket låg).
OpenSolaris Forums : Dedup - Does "on" imply "sha256?" ...
Mao, att man använder fletcher2 (som kan generera kollisioner) är inte vidare stort problem, när du beräknar säkerhetschecksummor. Kollisioner är illa om du försökte göra dedup, dock (därför finns "verify=on" då dedup jämför varje bit efter att kollision har konstaterats, så därför är inte kollisioner något problem heller i dedup). Men alla Enterprise server hallar kör ju standard checksummealgoritm, vad jag vet. Så det verkar inte vara något problem.
Ronnylov, jag tror du måste kopiera om filerna. Skapa en ny zfs dataset och kopiera dit filerna.
Tack för klargörandet saddam! Jag håller på kopierar över mitt zfs filsystem för mina backuper till ett nytt med fletcher 4. Passade på att aktivera kompression också när jag ändå gjorde denna förflyttning av filerna. Har även ändrat /tank till fletcher 4 så att alla nyskapade filsystem blir fletcher4. Jag tror inte fletcher4 är väldigt mycket tyngre för processorn än fletcher2 (och hastigheten begränsas ändå av gigabitnätverket på min filserver).
Det har klagats på implementationen av fletcher2 förrut, t.ex.
OpenSolaris Forums : fletcher2/4 implementations ...
Och detta fixades förrut i b114
Bug ID: 6740597 zfs fletcher-2 is losing its carries
Inte vad jag kan se ( Cross Reference: /onnv/onnv-gate/usr/src/common/zfs/zfs_fletcher.c ):
134 void
135 fletcher_2_native(const void *buf, uint64_t size, zio_cksum_t *zcp)
136 {
137 const uint64_t *ip = buf;
138 const uint64_t *ipend = ip + (size / sizeof (uint64_t));
139 uint64_t a0, b0, a1, b1;
140
141 for (a0 = b0 = a1 = b1 = 0; ip < ipend; ip += 2) {
142 a0 += ip[0];
143 a1 += ip[1];
144 b0 += a0;
145 b1 += a1;
146 }
147
148 ZIO_SET_CHECKSUM(zcp, a0, a1, b0, b1);
149 }
Det är egentligen inte så konstigt eftersom en ändring skulle:
1. Bryta bakåtkompabilitet.
2. Skapa ett ännu större problem.
Om du verkligen är nojjig så kan du ställa in att default checksumme algoritm är SHA-256 när du beräknar säkerhet.
# zfs set checksum=sha256 dataset
Detta är ett av skälen till att ZFS är lite långsammare än andra filsystem. De andra filsystemen gör inte alls lika många beräkningar för att kontrollera data integriteten. Ju fler beräkningar, desto långsammare, men desto även säkrare. Det går åt 1GHz cpu för att beräkna checksummor för 500MB/sek med fletcher2 - det är alltså ganska snabbt och är effektivt. SHA-256 skulle dra mer kraft. Man måste göra avvägning.
SHA-256 ger dig runt 50 MB per sekund och gigahertz. Därav min antydan om att den praktiskt inte är något vettigt alternativ i normala fall.
CRC32-C hade också varit perfekt. Mycket bättre egenskaper än fletcher och absurdt snabb om processorn har SSE 4.2 (vi pratar om ungefär 1 byte per cykel). Tyvärr känns det föga troligt att Sun/Oracle utnyttjar detta då SPARC != x86.
Checksummorna som weeblie pratar om här, fletcher2, används inte för att kolla kollisioner (vilket görs i dedup). Mao, är det inte alls lika höga krav för dessa checksummor för säkerhet, som det är i dedup. I dedup är kraven höga eftersom det används för att hitta kollisioner mellan två liknande datablock. Dessa höga krav ser vi av att SHA-256 är standard i dedup. Tidigare var det fletcher4 som var standard i dedup men det hade brister eftersom det kunde faktiskt generera kollisioner (även om sannolikheten var mycket låg).
[url="http://opensolaris.org/jive/thread.jspa?threadID=133344&tstar..."]OpenSolaris Forums : Dedup - Does "on" imply "sha256?" ...
Mao, att man använder fletcher2 (som kan generera kollisioner) är inte vidare stort problem, när du beräknar säkerhetschecksummor. Kollisioner är illa om du försökte göra dedup, dock (därför finns "verify=on" då dedup jämför varje bit efter att kollision har konstaterats, så därför är inte kollisioner något problem heller i dedup). Men alla Enterprise server hallar kör ju standard checksummealgoritm, vad jag vet. Så det verkar inte vara något problem.
Problemet med icke-kryptografiska hashar för dedup (utan verify=on) är inte så mycket att risken för spontana kollisioner finns utan att en elak användare kan skicka in filer som skapar dessa kollisioner.
Att enterprise serverhallar kör standardalgoritmen säger inte så mycket. Det finns gott om enterprise serverhallar som inte kör med end-to-end skydd.
Varför inte ta hela steget ut om man är så mån om sin data?
"Nothing is impossible because impossible itself says I M Possible..."
50 MB/s per GHz är väl inte helt oanvändbart? En vanlig dual core på 2 GHz skulle då kunna fixa 200 MB/s (men då finns väl ingen kraft över till något annat). Med gigabitnätverk skulle man ändå få ganska OK hastighet?
Jag ska testa sha256 vid något tillfälle, men är nu för trött så det får bli någon annan gång.
Inte vad jag kan se ( Cross Reference: /onnv/onnv-gate/usr/src/common/zfs/zfs_fletcher.c ):
134 void
135 fletcher_2_native(const void *buf, uint64_t size, zio_cksum_t *zcp)
136 {
137 const uint64_t *ip = buf;
138 const uint64_t *ipend = ip + (size / sizeof (uint64_t));
139 uint64_t a0, b0, a1, b1;
140
141 for (a0 = b0 = a1 = b1 = 0; ip < ipend; ip += 2) {
142 a0 += ip[0];
143 a1 += ip[1];
144 b0 += a0;
145 b1 += a1;
146 }
147
148 ZIO_SET_CHECKSUM(zcp, a0, a1, b0, b1);
149 }
Det är egentligen inte så konstigt eftersom en ändring skulle:
1. Bryta bakåtkompabilitet.
2. Skapa ett ännu större problem.
Jag hängde inte riktigt med här. Vad försöker du säga med ZFS kodutdraget? Att buggen inte alls fixades?
SHA-256 ger dig runt 50 MB per sekund och gigahertz. Därav min antydan om att den praktiskt inte är något vettigt alternativ i normala fall.
Men 50MB/sek för varje GHz är inte för kostsamt för en hemanvändare tycker i alla fall jag. Antag att man kör Quadcore 2GHz, då får man 8 GHz totalt. Om man siktar på 200MB/sek så blir det 4GHz som går åt till SHA-256. Då har man ändå 4GHz över.
Men det verkar som om SHA-256 är 10ggr mer prestanda krävande än fletcher-2. Intressanta siffror. Har du länk på din siffra? Min siffra på 500MB/Sek per GHz är tagen från ZFS wikin.
Problemet med icke-kryptografiska hashar för dedup (utan verify=on) är inte så mycket att risken för spontana kollisioner finns utan att en elak användare kan skicka in filer som skapar dessa kollisioner.
Jo, men dedup kör ju SHA-256 så det är mycket svårt att hitta datablock som ger samma checksumma.
Hur menar du att det skulle vara ett större problem att nån skickar in datablock som ger samma checksumma, än att det blir kollisioner - i dedup?
Att enterprise serverhallar kör standardalgoritmen säger inte så mycket. Det finns gott om enterprise serverhallar som inte kör med end-to-end skydd.
Sant.
Personligen känner jag inte att dessa checksummeberäkningar med fletcher-2 är ett problem. Därför att ingen har klagat på detta i forumen. Om det skulle bli ett problem, om det skulle börja postas klagomål om tappade data - så skulle:
1) Oracle genast ta tag i det problemet. Det duger inte att kalla ZFS för Enterprise filsystem om det är fel i en enkel checksumme algoritm, då måste det genast åtgärdas. Det är bara att byta checksummealgoritm och be folk kopiera över sina data till nya zfs datasets. Det är alltså inget designproblem i ZFS. (Som folk sagt om BTRFS: "broken by design")
2) Alla gå över till SHA-256. Om jag får ut 100MB/sec så räcker det för mig personligen. Större servrar har många cpuer så de får också ut mycket bandbredd. Man kan allokera bråkdelar av cpuer till vissa tasks i Solaris.
3) Sånt problem borde upptäckts långt för flera år sen
Så checksummeberäkningen behöver inte vara vidare kryptografiskt stark, därför att ZFS inte letar efter identiska datablock när man kontrollerar data integritet. Identiska datablock letar man efter i dedup, och därför används SHA-256 i dedup. Jag personligen tror inte detta är ett problem, därför att om det vore ett problem så skulle vi set klagomål, och ZFS gänget skulle bytt algoritm för längesen.
Eller så är det ingen som klagar för att dessa problem då skulle vara osynliga när man kollar zpool status? Man kanske får något bitfel i en videofil så det flimrar till litegrann men man kanske tror att felet orsakats någon annanstans än i filsystemet. Litegrann som att det är svårt att upptäcka "silent corruption" om man kör traditionell raid5. Inte många som klagar på det heller.
Men om nu fletcher4 är något bättre utan att ge mycket sämre prestanda så känns väl det som ett bra val. Jag bara satte checksummeoption till fletcher4 på tank så kommer nya skapade filsystem i framtiden ärva denna egenskap automatiskt. Jag kanske skulle sätta sha256 istället men jag tror nog det kan påverka prestandan, ska testa vid något tillfälle. Sedan beror det ju på om man dessutom aktiverar kompression t.ex. kanske det blir olidligt segt. Jag har ju nu satt fletcher4 och kompression på mitt tank/backup och det verkar funka hyfsat och kanhända sha256 utan kompression också funkar hyfsat, vi får se...
Kanske är detta som är anledningen till varför dedup känns segt? Var det inte någon som gjorde test med dedup och kompression samtidigt aktiverat?
På tal om sha algoritmer så är det inte så segt att köra på. Kör fossil + venti på min server och där venti är just en local hashtabell som mountas ovanpå ett filsystem. Kräver lite kräm men inte så mycket som vill tro om man gör det rätt iaf.
Plan9 fan. In glenda we trust.
@ronnylov
Möjligt. Men alla lagrar inte mediafiler och det borde upptäckts tidigare. T.ex. att dokument inte kan öppnas, packade filer inte kan packas upp, etc - och då skulle det blivit ramaskri "jag har fått corrupta data med ZFS!!! jag kan inte packa upp en fil!!!"
Om du endast är intresserad av att se om någon bit har ändrat på sig, så behöver du inte kryptografiskt stark hashning. Det enda fletcher2 används till, är för att detektera om några bits har ändrat på sig. För detta duger fletcher2.
I dedup så måste du identifiera identiska datablock, så det räcker inte längre med att bara hitta en bit som flippat. I dedup måste du vara säker på att du aldrig råkar säga att två datablock är identiska, av misstag. Därför används SHA-256 i dedup.
För checksumme säkerhetsberäkningar så vill du bara ta reda på om någon bit har ändrat sig. Därför använder du en hashfunktion som gör stora utslag när någon bit ändrat sig (dvs fletcher2). I dedup måste du jämföra om datablock är identiska, detta ställer högre krav på hashfunktionen som måste vara kryptografiskt stark. Därav SHA-256.
@dagle,
Jag fattar inte riktigt. Hur då mounta en hashtabell? Det låter märkligt?
Jag hängde inte riktigt med här. Vad försöker du säga med ZFS kodutdraget? Att buggen inte alls fixades?
Jag tyckte att det vara ganska enkelt att utläsa från koden att "buggen" inte fixades.
Förändringen tror jag istället ha varit att byta från fletcher2 till fletcher4 som standard och att manualen eventuellt inte har kommit ikapp. Men det hjälper inte folk som sitter på senaste officiella releaserna av OSOL eller FreeBSD...
Men 50MB/sek för varje GHz är inte för kostsamt för en hemanvändare tycker i alla fall jag. Antag att man kör Quadcore 2GHz, då får man 8 GHz totalt. Om man siktar på 200MB/sek så blir det 4GHz som går åt till SHA-256. Då har man ändå 4GHz över.
Jag tror att du själv är mycket medveten om att 4x2 GHz != 1x8 Ghz om du slänger in enkeltrådning i bilden.
Benchmark nedan tyder på att ZFS i v14 åtminstone inte är multitrådat om anropen kommer från samma tråd. Det kan självklart ha förändrats i senare versioner.
Men det verkar som om SHA-256 är 10ggr mer prestanda krävande än fletcher-2. Intressanta siffror. Har du länk på din siffra? Min siffra på 500MB/Sek per GHz är tagen från ZFS wikin.
Det bör inte vara några problem att googla på denna info. Vad jag baserar mitt uttalande på är mina egna benchmarks från förr som visar på lite mindre än 20 cykler/byte för blockstorlekar på ett par kilobytes.
Jo, men dedup kör ju SHA-256 så det är mycket svårt att hitta datablock som ger samma checksumma.
Right. Att köra dedup med fletcher4 och utan verify=on som du antydde att någon gjorde är helt galet.
Hur menar du att det skulle vara ett större problem att nån skickar in datablock som ger samma checksumma, än att det blir kollisioner - i dedup?
Som elak användare kan jag utnyttja denna kollision för att få root-rättigheter till ditt system.
Ta t.ex. följande situation:
- Du har en Open Solaris server med ett forum där användare kan ladda upp bilder.
- Jag ser att det har kommit ut en ny uppdatering till någon viktig systemkomponent (SUID-program, kärnan eller någon viktig konfigurationsfil).
- Jag skapar en trojan eller modifierad konfigurationsfil som blockvist har checksummor motsvarande dem för systemkomponenten. Detta är möjligt eftersom algoritmen som används inte är kryptografiskt säker (exakta svårigheten varierar; trivialt för fletcher2 och CRC, lite svårare för fletcher4 och löjligt svår för MD5 även om den räknas som "knäckt").
- Jag bakar in filen i en bild (korrekt alignad) och laddar upp den till din server.
- Du uppgraderar och jag blir root.
Light-varianten vore att angripa databasen för ditt phpBB/vBulletin forum och få administratörsrättigheter där.
Personligen känner jag inte att dessa checksummeberäkningar med fletcher-2 är ett problem. Därför att ingen har klagat på detta i forumen.
Det är inte alltför ofta som man hör folk klaga på att de har drabbats av bitröta heller. Ja, jag vet att man lätt kan googla efter sådana historier, men jämför du med hur många som kör vanlig RAID så representerar dessa personer mindre än en procent av alla användare.
Lägg sedan på dem små marknadsandelarna för ZFS och att svagheten inte själv orsakar dataförluster... och det blir inte alltför underligt om folk inte flammar om detta på forumet. Men faktumet kvarstår att svagheten finns där.
1) Oracle genast ta tag i det problemet. Det duger inte att kalla ZFS för Enterprise filsystem om det är fel i en enkel checksumme algoritm, då måste det genast åtgärdas. Det är bara att byta checksummealgoritm och be folk kopiera över sina data till nya zfs datasets. Det är alltså inget designproblem i ZFS. (Som folk sagt om BTRFS: "broken by design")
"Fel" inte i den bemärkelsen att världen går under utan "fel" eftersom något valdes utan en närmare analys. Situationen är mycket snarlik den för WEP. WEP var designat utan input från kryptologer och därför gjordes det massor av nybörjarmisstag.
Jag menar... jösses, att använda tvåkomplement? Man behöver inte ens en universitetsutbildning för att inse hur extremt dålig mixningen blir för dem högre bitarna.
Fletcher2 har bara 75% chans att upptäcka fel om diskkontrollern enbart flippar den högsta biten i varje quad-word (knappast något orealistiskt scenario).
---
Så istället för att jag ska fortsätta gnälla på fletcher2, låt oss istället kika på en mini-benchmark:

Testet är kört på ett FreeBSD 8.1 system med nio 500 GB diskar och en Q6600 med stockhastigheten 2.4 GHz. Flaskhalsen för sekventiell skrivning och läsning är troligtvis ett temporärt no-name PCI-baserat kontrollerkort.
"Nothing is impossible because impossible itself says I M Possible..."
Jag tyckte att det vara ganska enkelt att utläsa från koden att "buggen" inte fixades.
Hehe, nej det tyckte inte jag var enkelt. Kan du förklara hur du ser att buggen inte fixats? Vad är det man ska kolla efter? Vad är för kodrad som strular? Det låter ju illa att ZFS utvecklarna påstår att buggen fixats, men du säger att buggen inte fixats - eftersom du ser det enkelt.
Förändringen tror jag istället ha varit att byta från fletcher2 till fletcher4 som standard och att manualen eventuellt inte har kommit ikapp. Men det hjälper inte folk som sitter på senaste officiella releaserna av OSOL eller FreeBSD...
Inte en aning om vad som är standard.
Jag tror att du själv är mycket medveten om att 4x2 GHz != 1x8 Ghz om du slänger in enkeltrådning i bilden.
Jo, jag vet. Men en enkelt överslagsräkning visar att man har gott om kraft över. Och om din "20 cykler/byte för blockstorlekar på ett par KB" benchmark som visar att 1GHz ger 50MB/sek med SHA-256 är gammal benchmark så ska den siffran revideras. Sandybridge är ju snabbare än en Pentium 4, t.ex.
Benchmark nedan tyder på att ZFS i v14 åtminstone inte är multitrådat om anropen kommer från samma tråd. Det kan självklart ha förändrats i senare versioner.
Sist jag hörde så var ZFS enkeltrådat när det räknade checksummor. Men jag har inte kollat koden hur status är idag. Men det är något ZFS gänget ska ta tag i, och göra mulitrådat.
Det bör inte vara några problem att googla på denna info. Vad jag baserar mitt uttalande på är mina egna benchmarks från förr som visar på lite mindre än 20 cykler/byte för blockstorlekar på ett par kilobytes.
Hängde återigen inte med. Kan du förklara hur detta säger att 1GHz ger 50MB/sek för SHA-256?
Right. Att köra dedup med fletcher4 och utan verify=on som du antydde att någon gjorde är helt galet.
Va? Var har jag antytt det? Kan du citera?
Som elak användare kan jag utnyttja denna kollision för att få root-rättigheter till ditt system.
Ta t.ex. följande situation:
- Du har en Open Solaris server med ett forum där användare kan ladda upp bilder.
- Jag ser att det har kommit ut en ny uppdatering till någon viktig systemkomponent (SUID-program, kärnan eller någon viktig konfigurationsfil).
- Jag skapar en trojan eller modifierad konfigurationsfil som blockvist har checksummor motsvarande dem för systemkomponenten. Detta är möjligt eftersom algoritmen som används inte är kryptografiskt säker (exakta svårigheten varierar; trivialt för fletcher2 och CRC, lite svårare för fletcher4 och löjligt svår för MD5 även om den räknas som "knäckt").
- Jag bakar in filen i en bild (korrekt alignad) och laddar upp den till din server.
- Du uppgraderar och jag blir root.
Jag hängde inte med på sista raden. Hur blev du root? Antag att du hittat ett elakt datablock som ger samma hashvärde som det riktiga, vad händer när du sparar ditt elaka datablock? Jo, det kommer att raderas eftersom det datablocket redan finns lagrat. Varför lagra ett identiskt datablock igen? Som sagt, jag hänger inte riktigt med, du är lite för snabb i vändningarna för mig.
Lägg sedan på dem små marknadsandelarna för ZFS och att svagheten inte själv orsakar dataförluster... och det blir inte alltför underligt om folk inte flammar om detta på forumet. Men faktumet kvarstår att svagheten finns där.
Jag säger inte att svagheten inte finns, jag säger bara att man vill bara detektera om en bit flippats, och det är mycket enklare än att hitta identiska datablock. Men om det nu stämmer det du säger, att buggar inte fixats (trots att ZFS gänget påstås fixats) så är det illa. Om du nu har rätt om carries bitarna inte bevaras så är det bara att berätta det i ZFS forumet så får du genast mycket uppmärksamhet. Men anser du att fletcher4 är så mycket bättre att man bör köra det istället?
Jag menar... jösses, att använda tvåkomplement? Man behöver inte ens en universitetsutbildning för att inse hur extremt dålig mixningen blir för dem högre bitarna.
Jag har inte satt mig in i fletcher2. Men använder dessa ZFS hashfunktioner, tvåkomplement?
Fletcher2 har bara 75% chans att upptäcka fel om diskkontrollern enbart flippar den högsta biten i varje quad-word (knappast något orealistiskt scenario).
Hur kom du fram till den här siffran, har du länk? Det låter som att det är en oroväckande hög siffra.
Så istället för att jag ska fortsätta gnälla på fletcher2, låt oss istället kika på en mini-benchmark:
http://img828.imageshack.us/img828/6628/checksumtest.png
Testet är kört på ett FreeBSD 8.1 system med nio 500 GB diskar och en Q6600 med stockhastigheten 2.4 GHz. Flaskhalsen för sekventiell skrivning och läsning är troligtvis ett temporärt no-name PCI-baserat kontrollerkort.
Vad försöker du säga här? Kan du förklara lite vad du försöker säga istället för att endast visa lite kod eller en graf, utan en förklaring? Så hänger man med lite i vad du säger?
Men om det du säger stämmer (lite fler förklaringar önskas) så kanske man bör switcha till fletcher4, då?
Hehe, nej det tyckte inte jag var enkelt. Kan du förklara hur du ser att buggen inte fixats? Vad är det man ska kolla efter? Vad är för kodrad som strular? Det låter ju illa att ZFS utvecklarna påstår att buggen fixats, men du säger att buggen inte fixats - eftersom du ser det enkelt.
Kika på rad 142 och 144.
Summeringarna sker implicit med modulo 2^64. En bit som flippas på en högre position påverkar därmed aldrig checksummans lägre bitar.
För att förenkla utskriften nedan; antag att vi sysslar med 16 bitars ord istället (blir annars väldigt många nollor). Följande två medelanden får då samma checksumma enligt ZFS's fletcher2:
0000 ???? 0000 ???? 0000 ????
8000 ???? 0000 ???? 8000 ????
(0x8000 = översta biten satt; ???? är oförändrade block som summeras av rad 143 och 145)
Jo, jag vet. Men en enkelt överslagsräkning visar att man har gott om kraft över. Och om din "20 cykler/byte för blockstorlekar på ett par KB" benchmark som visar att 1GHz ger 50MB/sek med SHA-256 är gammal benchmark så ska den siffran revideras. Sandybridge är ju snabbare än en Pentium 4, t.ex.
Siffran behöver inte revideras mycket eftersom teoretiskt max (i.e. du kollar hur många aritmetiska operationer som krävs) ligger på runt 15 cykler/byte utan hårdvaruacceleration.
Hängde återigen inte med. Kan du förklara hur detta säger att 1GHz ger 50MB/sek för SHA-256?
1 GHz = 1 000 000 000 cykler/sekund
Om det går 20 cykler/byte så går det 50 000 000 bytes/sekund. D.v.s. runt 50 MB/sekund.
Va? Var har jag antytt det? Kan du citera?
"Tidigare var det fletcher4 som var standard i dedup men det hade brister eftersom det kunde faktiskt generera kollisioner (även om sannolikheten var mycket låg).
<...>
Kollisioner är illa om du försökte göra dedup, dock (därför finns "verify=on" då dedup jämför varje bit efter att kollision har konstaterats, så därför är inte kollisioner något problem heller i dedup"
My bad om det var ett missförstånd och du menade att verify också var påslaget. Jag fick intrycket av att fletcher4 var förvalt och att "verify=on" var något man själv hade behövt slå på.
Jag hängde inte med på sista raden. Hur blev du root? Antag att du hittat ett elakt datablock som ger samma hashvärde som det riktiga, vad händer när du sparar ditt elaka datablock? Jo, det kommer att raderas eftersom det datablocket redan finns lagrat. Varför lagra ett identiskt datablock igen? Som sagt, jag hänger inte riktigt med, du är lite för snabb i vändningarna för mig.
Tänk tvärtom här.
Eftersom jag vet att du kommer att lagra ett block med ett visst värde (villket är så fallet med uppdateringar) så kan jag innan dess smyga in ett elakt block. Det är ditt snälla block som raderas och mitt elaka som kommer att användas.
Attacken går även alldeles utmärkt att utföra på alla typer av användardatabaser där jag med tillräckligt stor sannolikhet kan gissa till mig den nya hashen för ett enskilt block efter en förändring (t.ex. shadow-filen om jag äger tillräckligt många konton så att deras utrymme sträcker sig över ett helt block).
Jag säger inte att svagheten inte finns, jag säger bara att man vill bara detektera om en bit flippats, och det är mycket enklare än att hitta identiska datablock. Men om det nu stämmer det du säger, att buggar inte fixats (trots att ZFS gänget påstås fixats) så är det illa. Om du nu har rätt om carries bitarna inte bevaras så är det bara att berätta det i ZFS forumet så får du genast mycket uppmärksamhet. Men anser du att fletcher4 är så mycket bättre att man bör köra det istället?
En fix skulle som sagt bryta mot bakåtkompabiliteten. Därav min uppfattning om att utvecklarna markerade buggen som fixad genom att helt sonikt byta standardvalet.
Fletcher4 har inte samma problem eftersom ackumulatorn är extremt mycket större än arbetsblocken.
Jag har inte satt mig in i fletcher2. Men använder dessa ZFS hashfunktioner, tvåkomplement?
Ja, se kod.
Hur kom du fram till den här siffran, har du länk? Det låter som att det är en oroväckande hög siffra.
Eftersom biten på den högsta positionen inte påverkar checksummans lägre bitar så har vi för multipla bitflippar på den högsta positionen 50% chans att pricka in a0 och 50% att pricka in b0. Vi har då sannolikheten 25% att felen inte detekteras.
Fast detta stämmer i och för sig bara för bitflippar hos 128-bitars ord och inte 64-bitars ord som jag tidigare skrev. För det senare fallet måste vi även betrakta a1 och b1 vilket ger kollisionsrisken 6.25%. Kom bara ihåg att 128-bitars ord inte heller är värst ovanliga i datorn.
Vad försöker du säga här? Kan du förklara lite vad du försöker säga istället för att endast visa lite kod eller en graf, utan en förklaring? Så hänger man med lite i vad du säger?
Men om det du säger stämmer (lite fler förklaringar önskas) så kanske man bör switcha till fletcher4, då?
En bild säger tusen ord, heh. Jag tyckte att den var klar nog:
SHA-256: ~120 MB/s sekventiell skrivning, ~150 MB/s sekventiell läsning
Andra: ~210 MB/s sekventiell skrivning, ~300 MB/s sekventiell läsning
"Nothing is impossible because impossible itself says I M Possible..."
Nu är det visst ytterligare en Illumos-baserad dist på gång - OpenIndiana:
Announcement | Project OpenIndiana
Nu är det visst ytterligare en Illumos-baserad dist på gång - OpenIndiana:
Announcement | Project OpenIndiana
Jo, den disten verkar kunna bli trevlig. Målet är att den ska fortsätta på OpenSolaris. OI (OpenIndiana) ska vara helt binär kompatibel med Solaris 11. Utvecklarna ska hela tiden backporta källkod från Solaris 11 och Solaris 11 Express så OI hela tiden är synkad. Idag stödjer OI numera ZFS dedup, eftersom OI utgår från b147. Snart kommer OI att bygga helt på Illumos. Man kan enkelt uppgradera från b134, bara att peka om IPS repot.
Dock är OpenIndiana buggig just nu. Jag ska vänta ett tag och när de släppt stabilare versioner så ska jag göra en ny BE och testa den. Jag tror b147 är bättre än b134.
Kika på rad 142 och 144.
Summeringarna sker implicit med modulo 2^64. En bit som flippas på en högre position påverkar därmed aldrig checksummans lägre bitar.
För att förenkla utskriften nedan; antag att vi sysslar med 16 bitars ord istället (blir annars väldigt många nollor). Följande två medelanden får då samma checksumma enligt ZFS's fletcher2:
0000 ???? 0000 ???? 0000 ????
8000 ???? 0000 ???? 8000 ????
(0x8000 = översta biten satt; ???? är oförändrade block som summeras av rad 143 och 145)
...
En fix skulle som sagt bryta mot bakåtkompabiliteten. Därav min uppfattning om att utvecklarna markerade buggen som fixad genom att helt sonikt byta standardvalet.
Jag reser mycket snart och har fullt upp på jobbet. Har inte tid just nu att övertyga mig att du har rätt. Så vi kör på att du har rätt.
Detta är oroväckande det du skriver. Kanske bör även jag följa ditt råd att byta till fletcher4. Men innan jag gör så, så vill jag posta detta du påstår på opensolaris forumet, om du inte vill göra det? Detta är ju illa att man bara låter buggen vara. Det kan vara så att du inte läser koden rätt (t.ex. att indata kommer bara se ut på ett visst sätt så att man inte råkar ut för de problem du menar) eller så kan det vara att du har rätt. Då ska det uppmärksammas på forumet.
Vill du posta eller ska jag posta på opensolaris forumets ZFS del? Om du vill att jag postar, kan du skriva en kort förklaring exakt vad som är fel så översätter jag det till engelska? Det är ju illa att ingen i ZFS teamet tar detta på allvar, om nu det är sant.
Siffran behöver inte revideras mycket eftersom teoretiskt max (i.e. du kollar hur många aritmetiska operationer som krävs) ligger på runt 15 cykler/byte utan hårdvaruacceleration.
Jag hänger inte med. Varför är teoretiskt max 15 cykler/byte? På wikin påstås att fletcher2 ger 500MB/sek för varje GHz. Det betyder alltså 2 cykler/byte, och du verkar mena att det är omöjligt att få köra snabbare än 15 cykler/byte (dvs 67 MB/sek)?
ZFS Evil Tuning Guide - Siwiki
1 GHz = 1 000 000 000 cykler/sekund
Om det går 20 cykler/byte så går det 50 000 000 bytes/sekund. D.v.s. runt 50 MB/sekund.
Det låter vettigt. Men frågan är om din implementering verkligen är optimal? 500MB/sek är ganska mycket snabbare än 50MB/sek, vilket du fick.
My bad om det var ett missförstånd och du menade att verify också var påslaget. Jag fick intrycket av att fletcher4 var förvalt och att "verify=on" var något man själv hade behövt slå på.
Jag vet inte om verify=on är förvalt. Jag menar bara att det är dåligt att köra verify=off om du väljer en kryptografiskt svag hashfunktion
Eftersom jag vet att du kommer att lagra ett block med ett visst värde (villket är så fallet med uppdateringar) så kan jag innan dess smyga in ett elakt block. Det är ditt snälla block som raderas och mitt elaka som kommer att användas.
Jag tar min fråga en gång till: hur skulle du "smyga in ett elakt block"? Fattar inte. Hur kan du göra det, när det redan finns ett "identiskt" block? Ditt block borde raderas, och originalblocket som redan finns där, borde finnas kvar?
Fletcher4 har inte samma problem eftersom ackumulatorn är extremt mycket större än arbetsblocken.
Jag postar buggen du upptäckte (där du får all cred förstås) och sen byter jag också till fletcher4, när ZFS teamet bekräftat buggen. Det är iofs enklare om du postar buggen där, istället för att jag gör det.
Ja, se kod.
Ok, om du säger det så. Kan du nämna detta också? Att tvåkomplement är dålig lösning. Skriv ned ditt lösning på forumet istället.
Eftersom biten på den högsta positionen inte påverkar checksummans lägre bitar så har vi för multipla bitflippar på den högsta positionen 50% chans att pricka in a0 och 50% att pricka in b0. Vi har då sannolikheten 25% att felen inte detekteras.
Fast detta stämmer i och för sig bara för bitflippar hos 128-bitars ord och inte 64-bitars ord som jag tidigare skrev. För det senare fallet måste vi även betrakta a1 och b1 vilket ger kollisionsrisken 6.25%. Kom bara ihåg att 128-bitars ord inte heller är värst ovanliga i datorn.
Skriv ned detta också i forumet, är du snäll. Jag hinner inte övertyga mig att du har rätt, har mycket just nu. Men man borde sitta med olika indata, och exekvera algoritmen och se att du har rätt - och det är detta jag inte har tid med just nu. Men vi kör på att du har rätt, så en tydlig buggrapport vore nog bra.
Det ligger väl även i ditt intresse att ZFS blir säkrare, så då är det bra med en enkel och tydlig buggrapport som pekar ut felen så kan ZFS bli bättre. Det tjänar vi alla på, även vi här på forumet.
En bild säger tusen ord, heh. Jag tyckte att den var klar nog:
SHA-256: ~120 MB/s sekventiell skrivning, ~150 MB/s sekventiell läsning
Andra: ~210 MB/s sekventiell skrivning, ~300 MB/s sekventiell läsning
Om jag postar en länk med massa text utan att förklara mer vad man ska titta efter, är det inte lite intetsägande? Jag menar bara att du kunde lagt till en förklarande snutt, typ "här ser vi att SHA-256 är hälften så snabbt som fletcher 2". En sån kort förklaring underlättar mycket.
En fråga: om nu SHA-256 är hälften så snabbt som fletcher2 (som uppnår 500MB/sek) så borde SHA-256 uppnå 250MB/sek för varje GHz? Och inte alls 50MB/sek?
Ronnylov, har du lust att ta tid senare på SHA-256 och fletcher2 - och se hur mycket tid det skiljer?
Detta är oroväckande det du skriver. Kanske bör även jag följa ditt råd att byta till fletcher4. Men innan jag gör så, så vill jag posta detta du påstår på opensolaris forumet, om du inte vill göra det? Detta är ju illa att man bara låter buggen vara. Det kan vara så att du inte läser koden rätt (t.ex. att indata kommer bara se ut på ett visst sätt så att man inte råkar ut för de problem du menar) eller så kan det vara att du har rätt. Då ska det uppmärksammas på forumet.
Vill du posta eller ska jag posta på opensolaris forumets ZFS del? Om du vill att jag postar, kan du skriva en kort förklaring exakt vad som är fel så översätter jag det till engelska? Det är ju illa att ingen i ZFS teamet tar detta på allvar, om nu det är sant.
Som jag har nämnt förut så kan man inte fixa problemet utan att bryta bakåtkompabiliteten. Den enda logiska fixen är att byta standardvalet, vilket troligtvis är vad utvecklarna har gjort här när de har markerat buggen som fixad (har även tidigare nämnt detta).
Faktum är att nu när jag kikade närmare på forumposten du länkade till innan så har dem haft exakt samma diskussion förut.
Jag hänger inte med. Varför är teoretiskt max 15 cykler/byte? På wikin påstås att fletcher2 ger 500MB/sek för varje GHz. Det betyder alltså 2 cykler/byte, och du verkar mena att det är omöjligt att få köra snabbare än 15 cykler/byte (dvs 67 MB/sek)?
ZFS Evil Tuning Guide - Siwiki
Det låter vettigt. Men frågan är om din implementering verkligen är optimal? 500MB/sek är ganska mycket snabbare än 50MB/sek, vilket du fick.
Heh, ligger inte diskussionen kring varför SHA-256 inte är ett bra val?
Du skrev ju själv: "Kan du förklara hur detta säger att 1GHz ger 50MB/sek för SHA-256?"
Jag har aldrig påstått något om fletcher2's prestanda som är mer av teoretiskt intresse än praktisk.
Jag tar min fråga en gång till: hur skulle du "smyga in ett elakt block"? Fattar inte. Hur kan du göra det, när det redan finns ett "identiskt" block? Ditt block borde raderas, och originalblocket som redan finns där, borde finnas kvar?
Och jag svarar en gång till: Jag lägger in mitt block innan du lägger in ditt. Det är du som hittar ett "identiskt" block. Jag letar upp dem patchade filerna på internet, beräknar hasharna, lägger in mina block med samma hashar och väntar på att du ska patcha. Originalblocket är mitt och inte ditt.
Jag postar buggen du upptäckte (där du får all cred förstås) och sen byter jag också till fletcher4, när ZFS teamet bekräftat buggen. Det är iofs enklare om du postar buggen där, istället för att jag gör det.
Ok, om du säger det så. Kan du nämna detta också? Att tvåkomplement är dålig lösning. Skriv ned ditt lösning på forumet istället.
Skriv ned detta också i forumet, är du snäll. Jag hinner inte övertyga mig att du har rätt, har mycket just nu. Men man borde sitta med olika indata, och exekvera algoritmen och se att du har rätt - och det är detta jag inte har tid med just nu. Men vi kör på att du har rätt, så en tydlig buggrapport vore nog bra.
Det ligger väl även i ditt intresse att ZFS blir säkrare, så då är det bra med en enkel och tydlig buggrapport som pekar ut felen så kan ZFS bli bättre. Det tjänar vi alla på, även vi här på forumet.
Se överst.
Om jag postar en länk med massa text utan att förklara mer vad man ska titta efter, är det inte lite intetsägande? Jag menar bara att du kunde lagt till en förklarande snutt, typ "här ser vi att SHA-256 är hälften så snabbt som fletcher 2". En sån kort förklaring underlättar mycket.
En fråga: om nu SHA-256 är hälften så snabbt som fletcher2 (som uppnår 500MB/sek) så borde SHA-256 uppnå 250MB/sek för varje GHz? Och inte alls 50MB/sek??
Som jag skrev tidigare: Testet är kört på ett FreeBSD 8.1 system med nio 500 GB diskar och en Q6600 med stockhastigheten 2.4 GHz. Flaskhalsen för sekventiell skrivning och läsning är troligtvis ett temporärt no-name PCI-baserat kontrollerkort.
Ett GTX 480 är lika snabbt oavsett vilken dator kortet sitter i. Men fortfarande får du många fler FPS (i majoriteten av alla spel) hos ett Core i7 980X system än om du stoppar in kortet i ett Atom N270 system. Varför?
Jo, allt har med att göra vad som är flaskhalsen. Avslagen checksumma är "oändligt" mycket snabbare än fletcher2. Betyder det då att jag kommer få oändlig throughput i mitt system? Självklart inte! Diskarna kommer för eller senare att begränsa!
Det är något som borde ha varit uppenbart hade du verkligen kikat på bilden.
Så, för att sammanfatta:
off: Diskarna eller diskkontrollerna flaskar.
fletcher2: Diskarna eller diskkontrollerna flaskar.
fletcher4: Diskarna eller diskkontrollerna flaskar.
SHA-256: Beräkningarna av hasharna flaskar.
Prestandaskillnaden mellan off, fletcher2 och fletcher4 är i mitt fall inom felmarginalen.
Prestandaskillnaden mellan dem och SHA-256 är i mitt fall däremot rejält.
Ronnylov, har du lust att ta tid senare på SHA-256 och fletcher2 - och se hur mycket tid det skiljer?
Det är bara att köra bonnie++, dumpa outputen till en fil och sedan köra filen genom bon_csv2html.
"Nothing is impossible because impossible itself says I M Possible..."
Med fletcher2 och utan komprimering maxar jag ungefär 93 MB/s sekventiell max hastighet till filservern över gigabitnätverk.
Med checksum=fletcher4 och compression=off fick jag 96 MB/s.
Med checksum=fletcher4 och compression=lzjb fick jag 67 MB/s (det är väl komprimeringen som bromsar här).
sha256 utan komprimering ger ungefär 63 MB/s i samma test.
sha256 och lzjb-kompression ger ungefär 50 MB/s.
Detta är bara en snabbtest i den typen av användning jag har servern till, lagra stora videofiler.
Testen är gjord på freeBSD 8.1 med en pool bestående av 10 stycken hårddiskar, vissa är sammanslagna med gconcat så det blir 7stycken 2 TB-volymer. Har även tweakat ZFS litegrann. Även jag har några hårddiskar på PCI SATA-kort men min flaskhals är i det här fallet gigabitnätverket. Det är dator #3 isignaturen så processorn är en Athlon 64 X2 4850e, två kärnor på 2,5 GHz.
Min slutsats är att fletcher4 inte ger någon som helst negativ inverkan på prestandan jämfört med fletcher2 i min filserver men sha256 segar ner det litegrann. Känns som ett självklart val att byta till fletcher 4 tycker jag medans sha256 förmodligen är overklill och som sagt var har viss negativ inverkan på prestandan.
Med fletcher2 och utan komprimering maxar jag ungefär 93 MB/s sekventiell max hastighet till filservern över gigabitnätverk.
Med checksum=fletcher4 och compression=off fick jag 96 MB/s.
Med checksum=fletcher4 och compression=lzjb fick jag 67 MB/s (det är väl komprimeringen som bromsar här).
sha256 utan komprimering ger ungefär 63 MB/s i samma test.
sha256 och lzjb-kompression ger ungefär 50 MB/s.
Detta är bara en snabbtest i den typen av användning jag har servern till, lagra stora videofiler.
Testen är gjord på freeBSD 8.1 med en pool bestående av 10 stycken hårddiskar, vissa är sammanslagna med gconcat så det blir 7stycken 2 TB-volymer. Har även tweakat ZFS litegrann. Även jag har några hårddiskar på PCI SATA-kort men min flaskhals är i det här fallet gigabitnätverket. Det är dator #3 isignaturen så processorn är en Athlon 64 X2 4850e, två kärnor på 2,5 GHz.
Intressanta siffror. Tack för den infon!
Känns som ett självklart val att byta till fletcher 4 tycker jag medans sha256 förmodligen är overklill och som sagt var har viss negativ inverkan på prestandan.
Jag är inte riktigt övertygad att byta till fletcher4 än. Jag tror det vore trevligt att få problemet bekräftat via annanstans också, alternativt kontrollera saken själv (vilket vore det bästa förstås). Tänk om weeblie har varit lite för snabb med slutsatsen? T.ex. det kommer bara viss indata till fletcher2 som gör att algoritmen aldrig spårar ur på det sätt som han beskriver?
Men, jag håller med om att det låter som att weeblie vet vad han pratar om här, därför är det värt att ta det han säger på allvar och därför vill jag kolla upp detta mera. Det är klart, får man ingen bekräftelse så är det nog klokt att byta till fletcher4.
Som jag har nämnt förut så kan man inte fixa problemet utan att bryta bakåtkompabiliteten. Den enda logiska fixen är att byta standardvalet, vilket troligtvis är vad utvecklarna har gjort här när de har markerat buggen som fixad (har även tidigare nämnt detta).
Ok, så du menar att problemet kan ha fixats på detta sätt? Dvs, man byter standardvalet till fletcher4 och låter fletcher2 vara utan några fixar? Det skulle kunna vara en vettig lösning. Men då borde man kolla detta. Skapa ett ny zfs filsystem och sen kolla vilken hash funktion som är standard: fletcher2 eller fletcher4. Om det är fletcher2 som är standard så postar jag en fråga på opensolaris forumet om ZFS.
Faktum är att nu när jag kikade närmare på forumposten du länkade till innan så har dem haft exakt samma diskussion förut.
Jo, men vad hände efter posten? Diskussionen är några år gammal. Har något ändrats än? Har problemet med fletcher2 fixats? Eller har de bara ändrat default till fletcher4? Om de ändrat default så betyder det antagligen att du har rätt när du säger att "fixen" var att byta default och de sket i att korrigera fletcher2.
Heh, ligger inte diskussionen kring varför SHA-256 inte är ett bra val?
Du skrev ju själv: "Kan du förklara hur detta säger att 1GHz ger 50MB/sek för SHA-256?"
Jag har aldrig påstått något om fletcher2's prestanda som är mer av teoretiskt intresse än praktisk.
Ah, ok nu förstår jag. Du menar att teoretisk max för SHA-256 är 15 cykler/byte? Och denna siffra har du fått fram genom att räkna antal operationer som SHA-256 gör? Det är alltså omöjligt att få snabbare än 67MB/sek per GHz, menar du? Det är max man kan nå?
En fråga: det finns ju instruktioner i t.ex. x86 som opererar på massa bytes samtidigt (t.ex. videogrejer). Kan man inte använda dem till SHA-256? T.ex. antag att man implementerade SHA-256 i x86 så att den opererade på 20 bytes i taget under en enda klockcykel? (T.ex. har ju Niagara Ultrasparc SHA-256 direkt i chippet så den får mycket hög genomströmning - där är det inte 20 cykler per byte. Utan kanske 20 byte på en cykel?)
Och jag svarar en gång till: Jag lägger in mitt block innan du lägger in ditt. Det är du som hittar ett "identiskt" block. Jag letar upp dem patchade filerna på internet, beräknar hasharna, lägger in mina block med samma hashar och väntar på att du ska patcha. Originalblocket är mitt och inte ditt.
Ok, då förstår jag hur du menar. Det låter vettigt det du säger, och ytterligare ett skäl att använda ett kryptografiskt starkt protokoll.
Som jag skrev tidigare: Testet är kört på ett FreeBSD 8.1 system med nio 500 GB diskar och en Q6600 med stockhastigheten 2.4 GHz. Flaskhalsen för sekventiell skrivning och läsning är troligtvis ett temporärt no-name PCI-baserat kontrollerkort.
...
Det är något som borde ha varit uppenbart hade du verkligen kikat på bilden.
Jo, men sen är det frågan om jag har tid att undersöka bilden, och det är även frågan om vad du försöker säga. Ska jag posta en random bild så du har inte en aning om vad jag försöker säga med bilden? Ett tips, om du försöker få dina läsare att acceptera din poäng, så är det bra om du är lite tydlig och pekar ut exakt vad du menar? Det är inte så bra att t.ex. posta massa länkar med massa text och be läsarna dra samma slutsatser som du dragit, utan att ens berätta vilka slutsatser som du tycker är intressanta för din ståndpunkt.
En fråga: är det ditt eget raid eller är det siffror du hittat på nätet?
Så, för att sammanfatta:
off: Diskarna eller diskkontrollerna flaskar.
fletcher2: Diskarna eller diskkontrollerna flaskar.
fletcher4: Diskarna eller diskkontrollerna flaskar.
SHA-256: Beräkningarna av hasharna flaskar.
Ok, det var bättre och tydligare. Så du försöker säga att SHA-256 är långsamt. Ok, det köper jag (det är för övrigt välkänt att SHA-256 är långsamt). Det skulle inte vara så svårt att skriva att "här ser vi att SHA-256 är långsamt"? Jag kanske trodde du pratade om fletcher2 och tittade massor på fletcher2 och inte kom fram till den slutsats du ville jag skulle dra (som egentligen handlade om SHA-256)? Mao, det som är tydligt för dig, är inte alltid tydligt för andra? Kanske bättre att vara övertydlig på nätet?
Tänk om weeblie har varit lite för snabb med slutsatsen? T.ex. det kommer bara viss indata till fletcher2 som gör att algoritmen aldrig spårar ur på det sätt som han beskriver?
Det är inte helt omöjligt, nej.
Skapa ett ny zfs filsystem och sen kolla vilken hash funktion som är standard: fletcher2 eller fletcher4. Om det är fletcher2 som är standard så postar jag en fråga på opensolaris forumet om ZFS.
Skulle vara väldigt bra om du kunde ta en titt. Jag slängde ut min Open Solaris version när de vägrade att släppa en ny officiell version och när FreeBSD 8.1 släpptes.
Ah, ok nu förstår jag. Du menar att teoretisk max för SHA-256 är 15 cykler/byte? Och denna siffra har du fått fram genom att räkna antal operationer som SHA-256 gör? Det är alltså omöjligt att få snabbare än 67MB/sek per GHz, menar du? Det är max man kan nå?
En fråga: det finns ju instruktioner i t.ex. x86 som opererar på massa bytes samtidigt (t.ex. videogrejer). Kan man inte använda dem till SHA-256? T.ex. antag att man implementerade SHA-256 i x86 så att den opererade på 20 bytes i taget under en enda klockcykel? (T.ex. har ju Niagara Ultrasparc SHA-256 direkt i chippet så den får mycket hög genomströmning - där är det inte 20 cykler per byte. Utan kanske 20 byte på en cykel?)
SSE och andra utökningar för x86 ger, så vitt jag vet, dig dock inte möjligheten att summera tre eller XOR:a tre heltals register åt gången. Du har därför en kedja av instruktioner som oavsett hur många ALU:s du har tillgång till flaskar vid latencyn för en enskild.
Tyvärr verkar det som jag har gjort ett väldigt pinsamt fel och räknat med 256 bitars block för SHA-256 och inte 512 bitars block som jag borde ha gjort.
Perfekt out-of-order motor, oändligt många ALU:s och oändligt många register hamnar därför snarare på ungefär halva min tidigare uppskattning. Men så länge som antalet IPC inte ökar dramatiskt så kommer vi ändå inte mycket lägre ner än 15 cykler/byte (~3 IPC)
Hårdvaru-implementationer är en annan femma...
En fråga: är det ditt eget raid eller är det siffror du hittat på nätet?
Det är min egen RAID.
"Nothing is impossible because impossible itself says I M Possible..."
Default är fletcher4 även i Solaris 10 vad det verkar (oklart i vilken update/patchnivå):
Introducing ZFS Properties (Oracle Solaris ZFS Administration Guide) - Sun Microsystems
och enl. denna (s115) så blev det default i opensolaris b114:
ZFS Tutorial USENIX LISA09 Conference
Ingen aning om hur man ser vad default checksum=on mappar mot i praktiken. Bör gå att se med zdb men och inte hittat nåt vettigt, nån annan som vet?
@Weeblie
Huhu, ingen dålig teknisk nivå på dina posts, trots den snälla varianten... Tungt att anstränga hjärnan så här en lördagsmorgon
Liten fråga dock, dataingengör eller datalog?
Varken den ena eller den andra. Teknisk Fysiker tills jag innan sommaren hoppade av för att påbörja ett arbete istället.
"Nothing is impossible because impossible itself says I M Possible..."
Default är fletcher4 även i Solaris 10 vad det verkar (oklart i vilken update/patchnivå):
Introducing ZFS Properties (Oracle Solaris ZFS Administration Guide) - Sun Microsystems
och enl. denna (s115) så blev det default i opensolaris b114:
ZFS Tutorial USENIX LISA09 Conference
Ingen aning om hur man ser vad default checksum=on mappar mot i praktiken. Bör gå att se med zdb men och inte hittat nåt vettigt, nån annan som vet?
Har inte kollat länkarna, men om länkarna säger det du påstår, så tycker jag det visar att Weeblie hade rätt i mycket av det han sade. Bra påpekande av Weeblie tycker jag. Tack för att du är kritisk och berättar om brister, weeblie! Det tjänar vi alla på.
Jag har ju en gammal zfs raid. Undrar om det är fletcher2 eller fletcher4? Efter weeblie, så vill jag gärna ta reda på vilken hashalgoritm min zfs raid använder. Hur gammal är min zfs raid? Man borde kunna kolla vilken zfs version som b114 använder i nån lista, och sen kolla sin egen zfs raid med "zfs version"(?). Om "zfs version" säger att jag har version 18 och om b114 använder version 19 så måste jag kopiera alla mina data till nya zfs filsystem.
saddam, du kan kolla vilken checksummealgoritm ditt filsystem använder med zfs get checksum.
Antag att du har dina filer i tank/lager
zfs get checksum tank/lager
Detta får du kolla på alla filsystemen (du kan lista filsystemen med zfs list).
Man kan enkelt ändra default i sin zpool helt enkelt genom att sätta checksum=fletcher4 på roten så att egenskapen ärvs till nyskapade underliggande filsystem
zfs set checksum=fletcher4 tank
Jag skapade nya filsystem med fletcher4, kopierade sedan från de gamla filsystemen och tog bort de gamla när kopieringen var färdig. Jag har ännu inte gjort det på alla filsystem. När man ändå håller på så kan man fundera om man vill slå på kompression och andra parametrar som man vill aktivera innan man börjar kopiera dit filerna.
Jag skapade nya filsystem med fletcher4, kopierade sedan från de gamla filsystemen och tog bort de gamla när kopieringen var färdig. Jag har ännu inte gjort det på alla filsystem. När man ändå håller på så kan man fundera om man vill slå på kompression och andra parametrar som man vill aktivera innan man börjar kopiera dit filerna.
Kan man ändra till sha-256 om man redan har en skapad zfs filsystem med innehåll? jag skapade min raidz3 tillsammans med build 128. jag har med andra ord ganska ny zpool. är det fletcher4 som är som default på dom senaste byggen som har kommit?
Intel Core 2 Duo E6600@3.0GHz | Asus P5B Deluxe | Corsair XMS2 PC6400 4GB | XFX GeForce 8800GTX 630M 768MB GDDR3 |Seagate Barracuda 500GB NCQ 16MB SATA2 | Seagate Barracuda ES.2 1TB SATA2 32MB 7200RPM | Western Digital Caviar SE16 500GB SATA2 16MB 7200RPM |
Creative SoundBlaster X-Fi Fatal1ty | Eizo 24'' S2431WK | iPower 600 Watt Extreme edition | Windows Vista Business 64 Bitar SP1
Kan man ändra till sha-256 om man redan har en skapad zfs filsystem med innehåll? jag skapade min raidz3 tillsammans med build 128. jag har med andra ord ganska ny zpool. är det fletcher4 som är som default på dom senaste byggen som har kommit?
Läs inlägget ovanför ditt...
Datorer - M1 MacBook Pro 14"
Hörlurssystem - Scarlett 4i4 / Objective2 / Beyerdynamic DT 770
Ljudsystem - NAD C356BEE > DALI Mentor 6
Bilpark - Porsche 718 Spyder
- MSI: 533 dagar senare - knappt någon OLED-inbränning77
- Första dator, (20-23k)0
- Teenage Engineering släpper gratischassi – slut direkt58
- Amazon - dela med er av era erfarenheter789
- Tråden om Nintendo Switch 23,7k
- Sapphires moderkort närmar sig lansering9
- 7800x3d pc pris?6
- Sur, Ledsen, Galen?! Skriv av er här!22k
- 3060 eller 3070 som present till spelande bror?4
- KKL hjälp begagnat bilköp ifrån bilhandlare26
- Köpes Vattenblock till Asus tuf rtx 3080
- Säljes Efterflytt-rensning deluxe – i9 11900K + Z590 + DDR4, Emotiv EEG-headset, nätverk, fläktar m.m.
- Säljes iPad Air 11 (2024) M2 128GB WiFi (Purple)
- Säljes Mini-ITX Gaming-PC med 4070 Ti & Ryzen 7800X3D
- Skänkes Fractal R4
- Säljes LG C3 65 inch OLED + Philips Hue Gradient Lightstrip 65 inch
- Säljes ITX dator, RTX5080 FE + Ryzen 9700x
- Säljes Mini-ITX X3D Gamingdator - Strix 27” WOLED 240hz
- Säljes 3080ti Palit gamerock med vattenblock
- Skänkes R9 fury tri x . Fläktar snurrar men ger ingen bild
- Sapphires moderkort närmar sig lansering9
- Quiz: Vad kan du om gamingskärmar?42
- MSI: 533 dagar senare - knappt någon OLED-inbränning77
- Intels Nova Lake-S nära färdigställda17
- Bättre stöd för Bluetooth-headset i Windows 1140
- AMD Ryzen Threadripper 9980X & 9970X – bäst i klassen18
- Här är de fem första rekryterna till Battlefield 6: Slaget14
- Framework lanserar RTX 5070-bestyckade Laptop 1611
- Veckans fråga: Vad är viktigast när du väljer skärm?80
- Nytt världsrekord i CPU-frekvens20
Externa nyheter
Spelnyheter från FZ
- Bethesda antyder riktiga rymdresor i Starfield idag
- Diskutera – Tidernas bästa co-op-spel är... idag
- Gears of War: Reloaded sågas på Steam – försvunnet split-screen och krascher idag
- Det episka quizzet – Unreal! Gears of War! Fortnite! idag
- Riddick, The Darkness och jobbiga storföretag – se historien om Machinegames idag