Re: [PATCH 26/35] Use the per-cpu allocator for orders up toPAGE_ALLOC_COSTLY_ORDER

From: Christoph Lameter
Date: Mon Mar 16 2009 - 14:55:00 EST


On Mon, 16 Mar 2009, Mel Gorman wrote:

> -static void free_hot_cold_page(struct page *page, int cold)
> +static void free_hot_cold_page(struct page *page, int order, int cold)
> {
> struct zone *zone = page_zone(page);
> struct per_cpu_pages *pcp;
> unsigned long flags;
> int clearMlocked = PageMlocked(page);
>
> + /* SLUB can return lowish-order compound pages that need handling */
> + if (order > 0 && unlikely(PageCompound(page)))
> + if (unlikely(destroy_compound_page(page, order)))
> + return;
> +

Isnt that also true for stacks and generic network objects ==- 8k?

> again:
> cpu = get_cpu();
> - if (likely(order == 0)) {
> + if (likely(order <= PAGE_ALLOC_COSTLY_ORDER)) {
> struct per_cpu_pages *pcp;
> + int batch;
> + int delta;
>
> pcp = &zone_pcp(zone, cpu)->pcp;
> + batch = max(1, pcp->batch >> order);
> local_irq_save(flags);
> if (!pcp->count) {
> - pcp->count = rmqueue_bulk(zone, 0,
> - pcp->batch, &pcp->list, migratetype);
> + delta = rmqueue_bulk(zone, order, batch,
> + &pcp->list, migratetype);
> + bulk_add_pcp_page(pcp, order, delta);
> if (unlikely(!pcp->count))
> goto failed;

The pcp adds a series of order N pages if an order N alloc occurs and the
queue is empty?

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/