Hi Joonsoo, On Mon, Sep 02, 2013 at 05:38:54PM +0900, Joonsoo Kim wrote: >This patchset implements byte sized indexes for the freelist of a slab. > >Currently, the freelist of a slab consist of unsigned int sized indexes. >Most of slabs have less number of objects than 256, so much space is wasted. >To reduce this overhead, this patchset implements byte sized indexes for >the freelist of a slab. With it, we can save 3 bytes for each objects. > >This introduce one likely branch to functions used for setting/getting >objects to/from the freelist, but we may get more benefits from >this change. > >Below is some numbers of 'cat /proc/slabinfo' related to my previous posting >and this patchset. > > >* Before * ># name <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables [snip...] >kmalloc-512 525 640 512 8 1 : tunables 54 27 0 : slabdata 80 80 0 >kmalloc-256 210 210 256 15 1 : tunables 120 60 0 : slabdata 14 14 0 >kmalloc-192 1016 1040 192 20 1 : tunables 120 60 0 : slabdata 52 52 0 >kmalloc-96 560 620 128 31 1 : tunables 120 60 0 : slabdata 20 20 0 >kmalloc-64 2148 2280 64 60 1 : tunables 120 60 0 : slabdata 38 38 0 >kmalloc-128 647 682 128 31 1 : tunables 120 60 0 : slabdata 22 22 0 >kmalloc-32 11360 11413 32 113 1 : tunables 120 60 0 : slabdata 101 101 0 >kmem_cache 197 200 192 20 1 : tunables 120 60 0 : slabdata 10 10 0 > >* After my previous posting(overload struct slab over struct page) * ># name <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables [snip...] >kmalloc-512 527 600 512 8 1 : tunables 54 27 0 : slabdata 75 75 0 >kmalloc-256 210 210 256 15 1 : tunables 120 60 0 : slabdata 14 14 0 >kmalloc-192 1040 1040 192 20 1 : tunables 120 60 0 : slabdata 52 52 0 >kmalloc-96 750 750 128 30 1 : tunables 120 60 0 : slabdata 25 25 0 >kmalloc-64 2773 2773 64 59 1 : tunables 120 60 0 : slabdata 47 47 0 >kmalloc-128 660 690 128 30 1 : tunables 120 60 0 : slabdata 23 23 0 >kmalloc-32 11200 11200 32 112 1 : tunables 120 60 0 : slabdata 100 100 0 >kmem_cache 197 200 192 20 1 : tunables 120 60 0 : slabdata 10 10 0 > >kmem_caches consisting of objects less than or equal to 128 byte have one more >objects in a slab. You can see it at objperslab. I think there is one less objects in a slab after observing objperslab. Regards, Wanpeng Li > >We can improve further with this patchset. > >* My previous posting + this patchset * ># name <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables [snip...] >kmalloc-512 521 648 512 8 1 : tunables 54 27 0 : slabdata 81 81 0 >kmalloc-256 208 208 256 16 1 : tunables 120 60 0 : slabdata 13 13 0 >kmalloc-192 1029 1029 192 21 1 : tunables 120 60 0 : slabdata 49 49 0 >kmalloc-96 529 589 128 31 1 : tunables 120 60 0 : slabdata 19 19 0 >kmalloc-64 2142 2142 64 63 1 : tunables 120 60 0 : slabdata 34 34 0 >kmalloc-128 660 682 128 31 1 : tunables 120 60 0 : slabdata 22 22 0 >kmalloc-32 11716 11780 32 124 1 : tunables 120 60 0 : slabdata 95 95 0 >kmem_cache 197 210 192 21 1 : tunables 120 60 0 : slabdata 10 10 0 > >kmem_caches consisting of objects less than or equal to 256 byte have >one or more objects than before. In the case of kmalloc-32, we have 12 more >objects, so 384 bytes (12 * 32) are saved and this is roughly 9% saving of >memory. Of couse, this percentage decreases as the number of objects >in a slab decreases. > >Please let me know expert's opions :) >Thanks. > >This patchset comes from a Christoph's idea. >https://lkml.org/lkml/2013/8/23/315 > >Patches are on top of my previous posting. >https://lkml.org/lkml/2013/8/22/137 > >Joonsoo Kim (4): > slab: factor out calculate nr objects in cache_estimate > slab: introduce helper functions to get/set free object > slab: introduce byte sized index for the freelist of a slab > slab: make more slab management structure off the slab > > mm/slab.c | 138 +++++++++++++++++++++++++++++++++++++++++++++---------------- > 1 file changed, 103 insertions(+), 35 deletions(-) > >-- >1.7.9.5 > >-- >To unsubscribe, send a message with 'unsubscribe linux-mm' in >the body to majordomo@xxxxxxxxx. For more info on Linux MM, >see: http://www.linux-mm.org/ . >Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a> -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>