There are a lot of conflicting references on the Internet, so I'd really
like to solicit actual experts (ZFS developers or people who have physical
evidence) to weigh in on this...

 

After searching around, the reference I found to be the most seemingly
useful was Erik's post here:

http://opensolaris.org/jive/thread.jspa?threadID=131296

 

Unfortunately it looks like there's an arithmetic error (1TB of 4k blocks
means 268million blocks, not 1 billion).  Also, IMHO it seems important make
the distinction, #files != #blocks.  Due to the existence of larger files,
there will sometimes be more than one block per file; and if I'm not
mistaken, thanks to write aggregation, there will sometimes be more than one
file per block.  YMMV.  Average block size could be anywhere between 1 byte
and 128k assuming default recordsize.  (BTW, recordsize seems to be a zfs
property, not a zpool property.  So how can you know or configure the
blocksize for something like a zvol iscsi target?)

 

(BTW, is there any way to get a measurement of number of blocks consumed per
zpool?  Per vdev?  Per zfs filesystem?)  The calculations below are based on
assumption of 4KB blocks adding up to a known total data consumption.  The
actual thing that matters is the number of blocks consumed, so the
conclusions drawn will vary enormously when people actually have average
block sizes != 4KB.  

 

And one more comment:  Based on what's below, it seems that the DDT gets
stored on the cache device and also in RAM.  Is that correct?  What if you
didn't have a cache device?  Shouldn't it *always* be in ram?  And doesn't
the cache device get wiped every time you reboot?  It seems to me like
putting the DDT on the cache device would be harmful...  Is that really how
it is?

 

After modifications that I hope are corrections, I think the post should
look like this:

 

The rule-of-thumb is 270 bytes/DDT entry, and 200 bytes of ARC for every
L2ARC entry.

DDT doesn't count for this ARC space usage

E.g.: I have 1TB of 4k blocks that are to be deduped, and it turns out that
I have about a 5:1 dedup ratio. I'd also like to see how much ARC usage I
eat up with a 160GB L2ARC.

(1) How many entries are there in the DDT: 

1TB of 4k blocks means there are 268million blocks.  However, at a 5:1 dedup
ratio, I'm only actually storing 20% of that, so I have about 54 million
blocks.  Thus, I need a DDT of about 270bytes * 54 million =~ 14GB in size

(2) My L2ARC is 160GB in size, but I'm using 14GB for the DDT. Thus, I have
146GB free for use as a data cache.  146GB / 4k =~ 38 million blocks can be
stored in the 
remaining L2ARC space.  However, 38 million files takes up: 200bytes * 38
million =~ 7GB of space in ARC.

 

Thus, I better spec my system with (whatever base RAM for basic OS and cache
and application requirements) + 14G because of dedup + 7G because of L2ARC.

_______________________________________________
zfs-discuss mailing list
zfs-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/zfs-discuss

Reply via email to