zfs: default data block checksum/hash?

taroumaru

Weaksauce
2FA
Joined
Dec 22, 2005
Messages
89
Whats the default zfs checksum/hash for the block pointer & uberblock, when a new pool is created? For [user] data blocks its fletcher4. In the results below, the default checksum algo [zfs get checksum] checksum=on & fletcher4 gave similar results, but not exact [hence confusing].

Is there something else going on when checksum=on [default] & it specifically being set to fletcher4 to account for the considerable difference in read speed [even while ignoring the slight difference in write speed]? This gets even more confusing when comparing fletcher2 results to fletcher4!

6 3TB HDD:
write 20.48 GB via dd, dd if=/dev/zero of=/test/dd.tst bs=1024000 count=20000
read 20.48 GB via dd, dd if=/test/dd.tst of=/dev/null bs=1024000


raidz/no parity
Code:
checksum=on [default]
real       32.1 user        0.0 sys        15.3 _20.48 GB in 32.1s = 638.01 MB/s Write
real       32.8 user        0.0 sys        17.3 _20.48 GB in 32.8s = 624.39 MB/s Read
fletcher2
real       29.4 user        0.0 sys        11.9 _20.48 GB in 29.4s = 696.60 MB/s Write
real       27.5 user        0.0 sys        14.9 _20.48 GB in 27.5s = 744.73 MB/s Read
fletcher4
real       32.3 user        0.0 sys        14.3 _20.48 GB in 32.3s = 634.06 MB/s Write
real       28.4 user        0.0 sys        16.9 _20.48 GB in 28.4s = 721.13 MB/s Read
sha256
real     1:22.3 user        0.0 sys        15.6 _20.48 GB in 82.3s = 248.85 MB/s Write
real     1:27.6 user        0.0 sys        12.3 _20.48 GB in 87.6s = 233.79 MB/s Read

raidz1+0/mirror+stripe
Code:
checksum=on [default]
real       54.8 user        0.0 sys        17.9 _20.48 GB in 54.8s = 373.72 MB/s Write
real       39.5 user        0.0 sys        15.5 _20.48 GB in 39.5s = 518.48 MB/s Read
fletcher2
real       50.2 user        0.0 sys        13.2 _20.48 GB in 50.2s = 407.97 MB/s Write
real       43.2 user        0.0 sys        17.1 _20.48 GB in 43.2s = 474.07 MB/s Read
fletcher4
real       57.8 user        0.0 sys        15.3 _20.48 GB in 57.8s = 354.33 MB/s Write
real       37.6 user        0.0 sys        17.9 _20.48 GB in 37.6s = 544.68 MB/s Read
sha256
real     1:29.0 user        0.0 sys        17.4 _20.48 GB in 89.0s = 230.11 MB/s Write
real     1:33.9 user        0.0 sys        12.9 _20.48 GB in 93.9s = 218.10 MB/s Read

raidz1x2 vdev/raid1+stripe
Code:
checksum=on [default]
real       44.2 user        0.0 sys        15.5 _20.48 GB in 44.2s = 463.35 MB/s Write
real     1:29.4 user        0.0 sys        19.6 _20.48 GB in 89.4s = 229.08 MB/s Read
fletcher2
real       46.2 user        0.0 sys        15.3 _20.48 GB in 46.2s = 443.29 MB/s Write
real     1:22.9 user        0.0 sys        19.6 _20.48 GB in 82.9s = 247.04 MB/s Read
fletcher4
real       50.7 user        0.0 sys        14.0 _20.48 GB in 50.7s = 403.94 MB/s Write
real       44.9 user        0.0 sys        18.9 _20.48 GB in 44.9s = 456.12 MB/s Read
sha256
real     1:29.9 user        0.0 sys        13.3 _20.48 GB in 89.9s = 227.81 MB/s Write
real     1:36.3 user        0.0 sys        13.2 _20.48 GB in 96.3s = 212.67 MB/s Read

raidz2
Code:
checksum=on [default]
real       55.0 user        0.0 sys        15.3 _20.48 GB in 55.0s = 372.36 MB/s Write
real       43.3 user        0.0 sys        15.4 _20.48 GB in 43.3s = 472.98 MB/s Read
fletcher2
real       56.1 user        0.0 sys        16.3 _20.48 GB in 56.1s = 365.06 MB/s Write
real       37.7 user        0.0 sys        22.0 _20.48 GB in 37.7s = 543.24 MB/s Read
fletcher4
real       53.5 user        0.0 sys        14.5 _20.48 GB in 53.5s = 382.80 MB/s Write
real       39.3 user        0.0 sys        20.7 _20.48 GB in 39.3s = 521.12 MB/s Read
sha256
real     1:51.2 user        0.0 sys        15.9 _20.48 GB in 111.2s = 184.17 MB/s Write
real     1:32.4 user        0.0 sys        16.3 _20.48 GB in 92.4s = 221.65 MB/s Read
 
Last edited:
What's with the odd blocksize of 0.977MB and square brackets in your sentences?

What is "raidz/no parity" supposed to mean? "raidz1x2 vdev/raid1+stripe"?

What is the setup? Hardware? Virtualized?

In the topic you ask about data block checksums. Your first question in the post is about metadata. It's all confusing.
 
Last edited:
Don't ask me about the weird block size, ask _Gea, he's the programmer of napp-it.

Its easier to type with, they're right next to my pinky finger.

Sorry about that [was posting about 4-5 posts at the same time.] I wanted to know about the block pointers, uberblock & metadata. More specifically, why the default 'checksum=on' & setting fletcher4 explicitly on the zfs pool gives very dissimilar results. Not to mention the difference between fletcher2 & fletcher4.

Hardware setup has no relations to the question above; anyway if you still must know the specs:

ECS G31T-M [an old board]
Intel Pentium E5500 [should be close to the exact model number & its a dual core!]
4GB of ram [not ECC!]
Intel GT/PT desktop Gig E card
IBM 1015 [flashed to LSI 9211] in I/T mode
SM SC847E16-R1400LPB chassis
6 3TB Seagates, 3 Barracuda XT & 3 1TB/platter [ones that came out a month or 2 ago]
SOL 11 [text mode install & runs on bare metal, so no virtualization]
 
Last edited:
Back
Top