mm/slub: calculate start order with reserved in consideration
In slub_order(), the order starts from max(min_order, get_order(min_objects * size)). When (min_objects * size) has different order from (min_objects * size + reserved), it will skip this order via a check in the loop. This patch optimizes this a little by calculating the start order with `reserved' in consideration and removing the check in loop. Signed-off-by: Wei Yang <weiyang@linux.vnet.ibm.com> Acked-by: Christoph Lameter <cl@linux.com> Cc: Pekka Enberg <penberg@kernel.org> Cc: David Rientjes <rientjes@google.com> Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
033fd1bd3c
commit
9f835703ea
|
@ -2912,19 +2912,15 @@ static inline int slab_order(int size, int min_objects,
|
|||
if (order_objects(min_order, size, reserved) > MAX_OBJS_PER_PAGE)
|
||||
return get_order(size * MAX_OBJS_PER_PAGE) - 1;
|
||||
|
||||
for (order = max(min_order, get_order(min_objects * size));
|
||||
for (order = max(min_order, get_order(min_objects * size + reserved));
|
||||
order <= max_order; order++) {
|
||||
|
||||
unsigned long slab_size = PAGE_SIZE << order;
|
||||
|
||||
if (slab_size < min_objects * size + reserved)
|
||||
continue;
|
||||
|
||||
rem = (slab_size - reserved) % size;
|
||||
|
||||
if (rem <= slab_size / fract_leftover)
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
return order;
|
||||
|
|
Loading…
Reference in New Issue