On Fri, 26 Feb 2016, js1304@xxxxxxxxx wrote: > Although this idea can apply to all caches whose size is larger than > management array size, it isn't applied to caches which have a > constructor. If such cache's object is used for management array, > constructor should be called for it before that object is returned to > user. I guess that overhead overwhelm benefit in that case so this idea > doesn't applied to them at least now. Caches which have a constructor (or are used with SLAB_RCU_FREE) have a defined content even when they are free. Therefore they cannot be used for the freelist. > For summary, from now on, slab management type is determined by > following logic. > > 1) if management array size is smaller than object size and no ctor, it > becomes OBJFREELIST_SLAB. Also do not do this for RCU slabs. > 2) if management array size is smaller than leftover, it becomes > NORMAL_SLAB which uses leftover as a array. > > 3) if OFF_SLAB help to save memory than way 4), it becomes OFF_SLAB. > It allocate a management array from the other cache so memory waste > happens. Wonder how many of these ugly off slabs are left after what you did here. > TOTAL = OBJFREELIST + NORMAL(leftover) + NORMAL + OFF > > /Before/ > 126 = 0 + 60 + 25 + 41 > > /After/ > 126 = 97 + 12 + 15 + 2 > > Result shows that number of caches that doesn't waste memory increase > from 60 to 109. Great results. > v2: fix SLAB_DESTROTY_BY_RCU cache type handling Ok how are they handled now? Do not see that dealt with in the patch. -- 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>