From: Minchan Kim <minchan@kernel.org>
To: Michal Hocko <mhocko@kernel.org>
Cc: linux-mm@kvack.org, Johannes Weiner <hannes@cmpxchg.org>,
Mel Gorman <mgorman@suse.de>,
Andrew Morton <akpm@linux-foundation.org>,
Michal Hocko <mhocko@suse.com>
Subject: Re: [RFC PATCH 2/2] mm, vmscan: cleanup inactive_list_is_low
Date: Wed, 11 Jan 2017 08:56:51 +0900 [thread overview]
Message-ID: <20170110235651.GB7130@bbox> (raw)
In-Reply-To: <20170110125552.4170-3-mhocko@kernel.org>
Hi Michal,
On Tue, Jan 10, 2017 at 01:55:52PM +0100, Michal Hocko wrote:
> From: Michal Hocko <mhocko@suse.com>
>
> inactive_list_is_low is duplicating logic implemented by
> lruvec_lru_size_eligibe_zones. Let's use the dedicated function to get
> the number of eligible pages on the lru list and ask use lruvec_lru_size
> to get the total LRU lize only when the tracing is really requested. We
> are still iterating over all LRUs two times in that case but a)
> inactive_list_is_low is not a hot path and b) this can be addressed at
> the tracing layer and only evaluate arguments only when the tracing is
> enabled in future if that ever matters.
Make sense so I was about to add my acked-by but surprised when I found
"bool trace variable" and lruvec_lru_size in the trace so I ask some
questions to the "+ mm-vmscan-add-mm_vmscan_inactive_list_is_low-tracepoint"
thread.
Except that part, looks good to me.
>
> Signed-off-by: Michal Hocko <mhocko@suse.com>
> ---
> mm/vmscan.c | 38 ++++++++++----------------------------
> 1 file changed, 10 insertions(+), 28 deletions(-)
>
> diff --git a/mm/vmscan.c b/mm/vmscan.c
> index 137bc85067d3..a9c881f06c0e 100644
> --- a/mm/vmscan.c
> +++ b/mm/vmscan.c
> @@ -2054,11 +2054,10 @@ static bool inactive_list_is_low(struct lruvec *lruvec, bool file,
> struct scan_control *sc, bool trace)
> {
> unsigned long inactive_ratio;
> - unsigned long total_inactive, inactive;
> - unsigned long total_active, active;
> + unsigned long inactive, active;
> + enum lru_list inactive_lru = file * LRU_FILE;
> + enum lru_list active_lru = file * LRU_FILE + LRU_ACTIVE;
> unsigned long gb;
> - struct pglist_data *pgdat = lruvec_pgdat(lruvec);
> - int zid;
>
> /*
> * If we don't have swap space, anonymous page deactivation
> @@ -2067,27 +2066,8 @@ static bool inactive_list_is_low(struct lruvec *lruvec, bool file,
> if (!file && !total_swap_pages)
> return false;
>
> - total_inactive = inactive = lruvec_lru_size(lruvec, file * LRU_FILE);
> - total_active = active = lruvec_lru_size(lruvec, file * LRU_FILE + LRU_ACTIVE);
> -
> - /*
> - * For zone-constrained allocations, it is necessary to check if
> - * deactivations are required for lowmem to be reclaimed. This
> - * calculates the inactive/active pages available in eligible zones.
> - */
> - for (zid = sc->reclaim_idx + 1; zid < MAX_NR_ZONES; zid++) {
> - struct zone *zone = &pgdat->node_zones[zid];
> - unsigned long inactive_zone, active_zone;
> -
> - if (!managed_zone(zone))
> - continue;
> -
> - inactive_zone = lruvec_zone_lru_size(lruvec, file * LRU_FILE, zid);
> - active_zone = lruvec_zone_lru_size(lruvec, (file * LRU_FILE) + LRU_ACTIVE, zid);
> -
> - inactive -= min(inactive, inactive_zone);
> - active -= min(active, active_zone);
> - }
> + inactive = lruvec_lru_size_eligibe_zones(lruvec, inactive_lru, sc->reclaim_idx);
> + active = lruvec_lru_size_eligibe_zones(lruvec, active_lru, sc->reclaim_idx);
>
> gb = (inactive + active) >> (30 - PAGE_SHIFT);
> if (gb)
> @@ -2096,10 +2076,12 @@ static bool inactive_list_is_low(struct lruvec *lruvec, bool file,
> inactive_ratio = 1;
>
> if (trace)
> - trace_mm_vmscan_inactive_list_is_low(pgdat->node_id,
> + trace_mm_vmscan_inactive_list_is_low(lruvec_pgdat(lruvec)->node_id,
> sc->reclaim_idx,
> - total_inactive, inactive,
> - total_active, active, inactive_ratio, file);
> + lruvec_lru_size(lruvec, inactive_lru), inactive,
> + lruvec_lru_size(lruvec, active_lru), active,
> + inactive_ratio, file);
> +
> return inactive * inactive_ratio < active;
> }
>
> --
> 2.11.0
>
> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to majordomo@kvack.org. For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2017-01-10 23:56 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-10 12:55 [RFC PATCH 0/2] follow up nodereclaim for 32b fix Michal Hocko
2017-01-10 12:55 ` [RFC PATCH 1/2] mm, vmscan: consider eligible zones in get_scan_count Michal Hocko
2017-01-11 6:18 ` Hillf Danton
2017-01-13 9:18 ` Michal Hocko
2017-01-17 6:47 ` Minchan Kim
2017-01-14 16:12 ` Johannes Weiner
2017-01-16 9:29 ` Michal Hocko
2017-01-16 16:01 ` Johannes Weiner
2017-01-16 19:33 ` [PATCH 1/3] mm, vmscan: cleanup lru size claculations Michal Hocko
2017-01-16 19:33 ` Michal Hocko
2017-01-16 19:33 ` [PATCH 2/3] mm, vmscan: consider eligible zones in get_scan_count Michal Hocko
2017-01-16 19:33 ` Michal Hocko
2017-01-17 3:42 ` Hillf Danton
2017-01-17 3:42 ` Hillf Danton
2017-01-16 19:33 ` [PATCH 3/3] Reverted "mm: bail out in shrink_inactive_list()" Michal Hocko
2017-01-16 19:33 ` Michal Hocko
2017-01-17 3:58 ` Hillf Danton
2017-01-17 3:58 ` Hillf Danton
2017-01-17 6:58 ` Minchan Kim
2017-01-17 6:58 ` Minchan Kim
2017-01-17 3:40 ` [PATCH 1/3] mm, vmscan: cleanup lru size claculations Hillf Danton
2017-01-17 3:40 ` Hillf Danton
2017-01-17 6:58 ` Minchan Kim
2017-01-17 6:58 ` Minchan Kim
2017-01-10 12:55 ` [RFC PATCH 2/2] mm, vmscan: cleanup inactive_list_is_low Michal Hocko
2017-01-10 23:56 ` Minchan Kim [this message]
2017-01-11 6:22 ` Hillf Danton
2017-01-14 16:16 ` Johannes Weiner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170110235651.GB7130@bbox \
--to=minchan@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=hannes@cmpxchg.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@suse.de \
--cc=mhocko@kernel.org \
--cc=mhocko@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.