mm, page_alloc: use __dec_zone_state for order-0 page allocation
__dec_zone_state is cheaper to use for removing an order-0 page as it has fewer conditions to check. The performance difference on a page allocator microbenchmark is; 4.6.0-rc2 4.6.0-rc2 optiter-v1r20 decstat-v1r20 Min alloc-odr0-1 382.00 ( 0.00%) 381.00 ( 0.26%) Min alloc-odr0-2 282.00 ( 0.00%) 275.00 ( 2.48%) Min alloc-odr0-4 233.00 ( 0.00%) 229.00 ( 1.72%) Min alloc-odr0-8 203.00 ( 0.00%) 199.00 ( 1.97%) Min alloc-odr0-16 188.00 ( 0.00%) 186.00 ( 1.06%) Min alloc-odr0-32 182.00 ( 0.00%) 179.00 ( 1.65%) Min alloc-odr0-64 177.00 ( 0.00%) 174.00 ( 1.69%) Min alloc-odr0-128 175.00 ( 0.00%) 172.00 ( 1.71%) Min alloc-odr0-256 184.00 ( 0.00%) 181.00 ( 1.63%) Min alloc-odr0-512 197.00 ( 0.00%) 193.00 ( 2.03%) Min alloc-odr0-1024 203.00 ( 0.00%) 201.00 ( 0.99%) Min alloc-odr0-2048 209.00 ( 0.00%) 206.00 ( 1.44%) Min alloc-odr0-4096 214.00 ( 0.00%) 212.00 ( 0.93%) Min alloc-odr0-8192 218.00 ( 0.00%) 215.00 ( 1.38%) Min alloc-odr0-16384 219.00 ( 0.00%) 216.00 ( 1.37%) Signed-off-by: Mel Gorman <mgorman@techsingularity.net> Acked-by: Vlastimil Babka <vbabka@suse.cz> Cc: Jesper Dangaard Brouer <brouer@redhat.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
682a3385e7
commit
754078eb45
|
@ -2417,6 +2417,7 @@ struct page *buffered_rmqueue(struct zone *preferred_zone,
|
||||||
else
|
else
|
||||||
page = list_first_entry(list, struct page, lru);
|
page = list_first_entry(list, struct page, lru);
|
||||||
|
|
||||||
|
__dec_zone_state(zone, NR_ALLOC_BATCH);
|
||||||
list_del(&page->lru);
|
list_del(&page->lru);
|
||||||
pcp->count--;
|
pcp->count--;
|
||||||
} else {
|
} else {
|
||||||
|
@ -2438,11 +2439,11 @@ struct page *buffered_rmqueue(struct zone *preferred_zone,
|
||||||
spin_unlock(&zone->lock);
|
spin_unlock(&zone->lock);
|
||||||
if (!page)
|
if (!page)
|
||||||
goto failed;
|
goto failed;
|
||||||
|
__mod_zone_page_state(zone, NR_ALLOC_BATCH, -(1 << order));
|
||||||
__mod_zone_freepage_state(zone, -(1 << order),
|
__mod_zone_freepage_state(zone, -(1 << order),
|
||||||
get_pcppage_migratetype(page));
|
get_pcppage_migratetype(page));
|
||||||
}
|
}
|
||||||
|
|
||||||
__mod_zone_page_state(zone, NR_ALLOC_BATCH, -(1 << order));
|
|
||||||
if (atomic_long_read(&zone->vm_stat[NR_ALLOC_BATCH]) <= 0 &&
|
if (atomic_long_read(&zone->vm_stat[NR_ALLOC_BATCH]) <= 0 &&
|
||||||
!test_bit(ZONE_FAIR_DEPLETED, &zone->flags))
|
!test_bit(ZONE_FAIR_DEPLETED, &zone->flags))
|
||||||
set_bit(ZONE_FAIR_DEPLETED, &zone->flags);
|
set_bit(ZONE_FAIR_DEPLETED, &zone->flags);
|
||||||
|
|
Loading…
Reference in New Issue