Re: [PATCH 1/1] mm/swap.c: flush lru_add pvecs on compound page arrival

From: Dave Hansen
Date: Wed Jun 08 2016 - 11:31:28 EST


On 06/08/2016 07:35 AM, Lukasz Odzioba wrote:
> diff --git a/mm/swap.c b/mm/swap.c
> index 9591614..3fe4f18 100644
> --- a/mm/swap.c
> +++ b/mm/swap.c
> @@ -391,9 +391,8 @@ static void __lru_cache_add(struct page *page)
> struct pagevec *pvec = &get_cpu_var(lru_add_pvec);
>
> get_page(page);
> - if (!pagevec_space(pvec))
> + if (!pagevec_add(pvec, page) || PageCompound(page))
> __pagevec_lru_add(pvec);
> - pagevec_add(pvec, page);
> put_cpu_var(lru_add_pvec);
> }

Lukasz,

Do we have any statistics that tell us how many pages are sitting the
lru pvecs? Although this helps the problem overall, don't we still have
a problem with memory being held in such an opaque place?

I think if we're going to be hacking around this area, we should also
add something to vmstat or zoneinfo to spell out how many of these
things there are.