Эх сурвалжийг харах

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>
Wei Yang 9 жил өмнө
parent
commit
9f835703ea
1 өөрчлөгдсөн 1 нэмэгдсэн , 5 устгасан
  1. 1 5
      mm/slub.c

+ 1 - 5
mm/slub.c

@@ -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)
 	if (order_objects(min_order, size, reserved) > MAX_OBJS_PER_PAGE)
 		return get_order(size * MAX_OBJS_PER_PAGE) - 1;
 		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++) {
 			order <= max_order; order++) {
 
 
 		unsigned long slab_size = PAGE_SIZE << order;
 		unsigned long slab_size = PAGE_SIZE << order;
 
 
-		if (slab_size < min_objects * size + reserved)
-			continue;
-
 		rem = (slab_size - reserved) % size;
 		rem = (slab_size - reserved) % size;
 
 
 		if (rem <= slab_size / fract_leftover)
 		if (rem <= slab_size / fract_leftover)
 			break;
 			break;
-
 	}
 	}
 
 
 	return order;
 	return order;