Re: [PATCH] mm: Do not allocate duplicate stack variables in shrink_page_list()
From: Daniel Jordan
Date: Thu Jan 31 2019 - 11:52:11 EST
On Thu, Jan 31, 2019 at 06:37:02PM +0300, Kirill Tkhai wrote:
> On path shrink_inactive_list() ---> shrink_page_list()
> we allocate stack variables for the statistics twice.
> This is completely useless, and this just consumes stack
> much more, then we really need.
>
> The patch kills duplicate stack variables from shrink_page_list(),
> and this reduce stack usage and object file size significantly:
>
> Stack usage:
> Before: vmscan.c:1122:22:shrink_page_list 648 static
> After: vmscan.c:1122:22:shrink_page_list 616 static
>
> Size of vmscan.o:
> text data bss dec hex filename
> Before: 56866 4720 128 61714 f112 mm/vmscan.o
> After: 56770 4720 128 61618 f0b2 mm/vmscan.o
>
> Signed-off-by: Kirill Tkhai <ktkhai@xxxxxxxxxxxxx>
> ---
> mm/vmscan.c | 44 ++++++++++++++------------------------------
> 1 file changed, 14 insertions(+), 30 deletions(-)
> @@ -1534,6 +1517,7 @@ unsigned long reclaim_clean_pages_from_list(struct zone *zone,
> .priority = DEF_PRIORITY,
> .may_unmap = 1,
> };
> + struct reclaim_stat dummy_stat;
> unsigned long ret;
> struct page *page, *next;
> LIST_HEAD(clean_pages);
> @@ -1547,7 +1531,7 @@ unsigned long reclaim_clean_pages_from_list(struct zone *zone,
> }
>
> ret = shrink_page_list(&clean_pages, zone->zone_pgdat, &sc,
> - TTU_IGNORE_ACCESS, NULL, true);
> + TTU_IGNORE_ACCESS, &dummy_stat, true);
> list_splice(&clean_pages, page_list);
> mod_node_page_state(zone->zone_pgdat, NR_ISOLATED_FILE, -ret);
> return ret;
Stack usage stays the same coming from reclaim_clean_pages_from_list, with a
dummy variable added back after many were taken away in 3c710c1ad11b ("mm,
vmscan: extract shrink_page_list...").
But overall seems like a win to me. You can add
Reviewed-by: Daniel Jordan <daniel.m.jordan@xxxxxxxxxx>