On Feb 28, 2010, at 11:04 PM, Erik Trimble wrote: > Richard Elling wrote: >> On Feb 28, 2010, at 7:11 PM, Erik Trimble wrote: >> >>> I'm finally at the point of adding an SSD to my system, so I can get >>> reasonable dedup performance. >>> >>> The question here goes to sizing of the SSD for use as an L2ARC device. >>> >>> Noodling around, I found Richard's old posing on ARC->L2ARC memory >>> requirements, which is mighty helpful in making sure I don't overdo the >>> L2ARC side. >>> >>> (http://www.mail-archive.com/zfs-discuss@opensolaris.org/msg34677.html) >>> >> >> I don't know of an easy way to see the number of blocks, which is what >> you need to complete a capacity plan. OTOH, it doesn't hurt to have an >> L2ARC, just beware of wasting space if you have a small RAM machine. >> > I haven't found a good way, either. And I've looked. ;-) > > > > >>> What I haven't found is a reasonable way to determine how big I'll need an >>> L2ARC to fit all the relevant data for dedup. I've seen several postings >>> back in Jan about this, and there wasn't much help, as was acknowledged at >>> the time. >>> >>> What I'm after is exactly what needs to be stored extra for DDT? I'm >>> looking at the 200-byte header in ARC per L2ARC entry, and assuming that is >>> for all relevant info stored in the L2ARC, whether it's actual data or >>> metadata. My question is this: the metadata for a slab (record) takes up >>> how much space? With DDT turned on, I'm assuming that this metadata is >>> larger than with it off (or, is it the same now for both)? >>> >>> There has to be some way to do a back-of-the-envelope calc that says (X) >>> pool size = (Y) min L2ARC size = (Z) min ARC size >>> >> >> If you know the number of blocks and the size distribution you can >> calculate this. In other words, it isn't very easy to do in advance unless >> you have a fixed-size workload (eg database that doesn't grow :-) >> For example, if you have a 10 GB database with 8KB blocks, then >> you can calculate how much RAM would be required to hold the >> headers for a 10 GB L2ARC device: >> headers = 10 GB / 8 KB >> RAM needed ~ 200 bytes * headers >> >> for media, you can reasonably expect 128KB blocks. >> >> The DDT size can be measured with "zdb -D poolname" but you can expect that >> to grow over time, too. >> -- richar > That's good, but I'd like a way to pre-calculate my potential DDT size > (which, I'm assuming, will sit in L2ARC, right?)
It will be in the ARC/L2ARC just like other data. > Once again, I'm assuming that each DDT entry corresponds to a record (slab), > so to be exact, I would need to know the number of slabs (which doesn't > currently seem possible). I'd be satisfied with a guesstimate based on what > my expected average block size it. But what I need to know is how big a DDT > entry is for each record. I'm trying to parse the code, and I don't have it > in a sufficiently intelligent IDE right now to find all the cross-references. > I've got as far as (in ddt.h) > > struct ddt_entry { > ddt_key_t dde_key; > ddt_phys_t dde_phys[DDT_PHYS_TYPES]; > zio_t *dde_lead_zio[DDT_PHYS_TYPES]; > void *dde_repair_data; > enum ddt_type dde_type; > enum ddt_class dde_class; > uint8_t dde_loading; > uint8_t dde_loaded; > kcondvar_t dde_cv; > avl_node_t dde_node; > }; > > Any idea what these structure size actually are? Around 270 bytes, or one 512 byte sector. -- richard ZFS storage and performance consulting at http://www.RichardElling.com ZFS training on deduplication, NexentaStor, and NAS performance http://nexenta-atlanta.eventbrite.com (March 16-18, 2010) _______________________________________________ zfs-discuss mailing list zfs-discuss@opensolaris.org http://mail.opensolaris.org/mailman/listinfo/zfs-discuss