On Wed, Mar 09, 2011 at 01:40:28PM +0800, Miao Xie wrote:
> Thanks for your advice. But AFAIK, reordering the fields like what you
> said can not reduce the space of delayed_nodes, because a hole is
> placed on the end to make the structure big enough to pack tightly
> into arrays and maintain proper alignment. So although we reorder the
> fields, the size of delayed_node is still 304 bytes.
Let me redo it explicitly:
Your patch does not specify alignment of the cache object
+int __init btrfs_delayed_inode_init(void)
+{
+ delayed_node_cache = kmem_cache_create("delayed_node",
+ sizeof(struct btrfs_delayed_node),
+ 0,
^^
+ SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD,
+ NULL);
+ if (!delayed_node_cache)
+ return -ENOMEM;
+ return 0;
+}
and default BYTES_PER_WORD == sizeof(void*) will be used. Let's assume
it's 8 (eg. on x86_64). The delayed_node is 304, which is multiple of 8
and the objects will have no padding at the end. A quick test, comparing
adresses of 2 adjacent allocated objects, confirmed that.
If I did the math correctly, we are able to reduce size by 7 bytes:
reorder fileds (6b) and merge bools into one-byte bitfield (1b). This is
not enough, padding to next object alignment will consume this (as you
wrote above).
Hm, nice exercise, no improvement.
> > Still needed to reduce by 7 from 304-6=298. Does not seem to be possible, the
> > bool flags provide only 1 byte. Under these conditions, I suggest to make the
> > bool fields int again to reduce instruction count which manage these flags.
> > Compiler did not make them int automatically (altough it is free to do it).
>
> Sorry, I don't understand what you said above clearly, Did you mean
> we can not access bool variables by one instruction?
Ah, no I confused myself, I was thinking of bitfields. Checked that gcc
emits one instruction on x86_64, I did not check other arches.
dave
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html