linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Michal Hocko <mhocko@suse.cz>
To: Konstantin Khlebnikov <khlebnikov@openvz.org>
Cc: linux-mm@kvack.org, Andrew Morton <akpm@linux-foundation.org>,
	linux-kernel@vger.kernel.org, Hugh Dickins <hughd@google.com>,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Subject: Re: [PATCH v6 3/7] mm: push lru index into shrink_[in]active_list()
Date: Mon, 26 Mar 2012 17:39:32 +0200	[thread overview]
Message-ID: <20120326153932.GD22754@tiehlicka.suse.cz> (raw)
In-Reply-To: <20120322215627.27814.4499.stgit@zurg>

On Fri 23-03-12 01:56:27, Konstantin Khlebnikov wrote:
> Let's toss lru index through call stack to isolate_lru_pages(),
> this is better than its reconstructing from individual bits.
> 
> Signed-off-by: Konstantin Khlebnikov <khlebnikov@openvz.org>
> Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
> Acked-by: Hugh Dickins <hughd@google.com>

Looks nice
Reviewed-by: Michal Hocko <mhocko@suse.cz>

> ---
>  mm/vmscan.c |   41 +++++++++++++++++------------------------
>  1 files changed, 17 insertions(+), 24 deletions(-)
> 
> diff --git a/mm/vmscan.c b/mm/vmscan.c
> index f4dca0c..fb6d54e 100644
> --- a/mm/vmscan.c
> +++ b/mm/vmscan.c
> @@ -1127,15 +1127,14 @@ int __isolate_lru_page(struct page *page, isolate_mode_t mode, int file)
>   * @nr_scanned:	The number of pages that were scanned.
>   * @sc:		The scan_control struct for this reclaim session
>   * @mode:	One of the LRU isolation modes
> - * @active:	True [1] if isolating active pages
> - * @file:	True [1] if isolating file [!anon] pages
> + * @lru		LRU list id for isolating
>   *
>   * returns how many pages were moved onto *@dst.
>   */
>  static unsigned long isolate_lru_pages(unsigned long nr_to_scan,
>  		struct mem_cgroup_zone *mz, struct list_head *dst,
>  		unsigned long *nr_scanned, struct scan_control *sc,
> -		isolate_mode_t mode, int active, int file)
> +		isolate_mode_t mode, enum lru_list lru)
>  {
>  	struct lruvec *lruvec;
>  	struct list_head *src;
> @@ -1144,13 +1143,9 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan,
>  	unsigned long nr_lumpy_dirty = 0;
>  	unsigned long nr_lumpy_failed = 0;
>  	unsigned long scan;
> -	int lru = LRU_BASE;
> +	int file = is_file_lru(lru);
>  
>  	lruvec = mem_cgroup_zone_lruvec(mz->zone, mz->mem_cgroup);
> -	if (active)
> -		lru += LRU_ACTIVE;
> -	if (file)
> -		lru += LRU_FILE;
>  	src = &lruvec->lists[lru];
>  
>  	for (scan = 0; scan < nr_to_scan && !list_empty(src); scan++) {
> @@ -1487,7 +1482,7 @@ static inline bool should_reclaim_stall(unsigned long nr_taken,
>   */
>  static noinline_for_stack unsigned long
>  shrink_inactive_list(unsigned long nr_to_scan, struct mem_cgroup_zone *mz,
> -		     struct scan_control *sc, int priority, int file)
> +		     struct scan_control *sc, int priority, enum lru_list lru)
>  {
>  	LIST_HEAD(page_list);
>  	unsigned long nr_scanned;
> @@ -1498,6 +1493,7 @@ shrink_inactive_list(unsigned long nr_to_scan, struct mem_cgroup_zone *mz,
>  	unsigned long nr_dirty = 0;
>  	unsigned long nr_writeback = 0;
>  	isolate_mode_t isolate_mode = ISOLATE_INACTIVE;
> +	int file = is_file_lru(lru);
>  	struct zone *zone = mz->zone;
>  	struct zone_reclaim_stat *reclaim_stat = get_reclaim_stat(mz);
>  
> @@ -1523,7 +1519,7 @@ shrink_inactive_list(unsigned long nr_to_scan, struct mem_cgroup_zone *mz,
>  	spin_lock_irq(&zone->lru_lock);
>  
>  	nr_taken = isolate_lru_pages(nr_to_scan, mz, &page_list, &nr_scanned,
> -				     sc, isolate_mode, 0, file);
> +				     sc, isolate_mode, lru);
>  	if (global_reclaim(sc)) {
>  		zone->pages_scanned += nr_scanned;
>  		if (current_is_kswapd())
> @@ -1661,7 +1657,7 @@ static void move_active_pages_to_lru(struct zone *zone,
>  static void shrink_active_list(unsigned long nr_to_scan,
>  			       struct mem_cgroup_zone *mz,
>  			       struct scan_control *sc,
> -			       int priority, int file)
> +			       int priority, enum lru_list lru)
>  {
>  	unsigned long nr_taken;
>  	unsigned long nr_scanned;
> @@ -1673,6 +1669,7 @@ static void shrink_active_list(unsigned long nr_to_scan,
>  	struct zone_reclaim_stat *reclaim_stat = get_reclaim_stat(mz);
>  	unsigned long nr_rotated = 0;
>  	isolate_mode_t isolate_mode = ISOLATE_ACTIVE;
> +	int file = is_file_lru(lru);
>  	struct zone *zone = mz->zone;
>  
>  	lru_add_drain();
> @@ -1687,17 +1684,14 @@ static void shrink_active_list(unsigned long nr_to_scan,
>  	spin_lock_irq(&zone->lru_lock);
>  
>  	nr_taken = isolate_lru_pages(nr_to_scan, mz, &l_hold, &nr_scanned, sc,
> -				     isolate_mode, 1, file);
> +				     isolate_mode, lru);
>  	if (global_reclaim(sc))
>  		zone->pages_scanned += nr_scanned;
>  
>  	reclaim_stat->recent_scanned[file] += nr_taken;
>  
>  	__count_zone_vm_events(PGREFILL, zone, nr_scanned);
> -	if (file)
> -		__mod_zone_page_state(zone, NR_ACTIVE_FILE, -nr_taken);
> -	else
> -		__mod_zone_page_state(zone, NR_ACTIVE_ANON, -nr_taken);
> +	__mod_zone_page_state(zone, NR_LRU_BASE + lru, -nr_taken);
>  	__mod_zone_page_state(zone, NR_ISOLATED_ANON + file, nr_taken);
>  	spin_unlock_irq(&zone->lru_lock);
>  
> @@ -1752,10 +1746,8 @@ static void shrink_active_list(unsigned long nr_to_scan,
>  	 */
>  	reclaim_stat->recent_rotated[file] += nr_rotated;
>  
> -	move_active_pages_to_lru(zone, &l_active, &l_hold,
> -						LRU_ACTIVE + file * LRU_FILE);
> -	move_active_pages_to_lru(zone, &l_inactive, &l_hold,
> -						LRU_BASE   + file * LRU_FILE);
> +	move_active_pages_to_lru(zone, &l_active, &l_hold, lru);
> +	move_active_pages_to_lru(zone, &l_inactive, &l_hold, lru - LRU_ACTIVE);
>  	__mod_zone_page_state(zone, NR_ISOLATED_ANON + file, -nr_taken);
>  	spin_unlock_irq(&zone->lru_lock);
>  
> @@ -1855,11 +1847,11 @@ static unsigned long shrink_list(enum lru_list lru, unsigned long nr_to_scan,
>  
>  	if (is_active_lru(lru)) {
>  		if (inactive_list_is_low(mz, file))
> -			shrink_active_list(nr_to_scan, mz, sc, priority, file);
> +			shrink_active_list(nr_to_scan, mz, sc, priority, lru);
>  		return 0;
>  	}
>  
> -	return shrink_inactive_list(nr_to_scan, mz, sc, priority, file);
> +	return shrink_inactive_list(nr_to_scan, mz, sc, priority, lru);
>  }
>  
>  static int vmscan_swappiness(struct mem_cgroup_zone *mz,
> @@ -2110,7 +2102,8 @@ restart:
>  	 * rebalance the anon lru active/inactive ratio.
>  	 */
>  	if (inactive_anon_is_low(mz))
> -		shrink_active_list(SWAP_CLUSTER_MAX, mz, sc, priority, 0);
> +		shrink_active_list(SWAP_CLUSTER_MAX, mz,
> +				   sc, priority, LRU_ACTIVE_ANON);
>  
>  	/* reclaim/compaction might need reclaim to continue */
>  	if (should_continue_reclaim(mz, nr_reclaimed,
> @@ -2550,7 +2543,7 @@ static void age_active_anon(struct zone *zone, struct scan_control *sc,
>  
>  		if (inactive_anon_is_low(&mz))
>  			shrink_active_list(SWAP_CLUSTER_MAX, &mz,
> -					   sc, priority, 0);
> +					   sc, priority, LRU_ACTIVE_ANON);
>  
>  		memcg = mem_cgroup_iter(NULL, memcg, NULL);
>  	} while (memcg);
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/

-- 
Michal Hocko
SUSE Labs
SUSE LINUX s.r.o.
Lihovarska 1060/12
190 00 Praha 9    
Czech Republic

--
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/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  parent reply	other threads:[~2012-03-26 15:39 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-03-22 21:56 [PATCH v6 0/7] mm: some simple cleanups Konstantin Khlebnikov
2012-03-22 21:56 ` [PATCH v6 1/7] mm/memcg: scanning_global_lru means mem_cgroup_disabled Konstantin Khlebnikov
2012-03-26 15:04   ` Michal Hocko
2012-03-26 15:18     ` Johannes Weiner
2012-03-26 15:31       ` Michal Hocko
2012-03-26 21:39         ` Hugh Dickins
2012-03-27  7:46           ` Michal Hocko
2012-03-22 21:56 ` [PATCH v6 2/7] mm/memcg: move reclaim_stat into lruvec Konstantin Khlebnikov
2012-03-26 15:16   ` Michal Hocko
2012-03-22 21:56 ` [PATCH v6 3/7] mm: push lru index into shrink_[in]active_list() Konstantin Khlebnikov
2012-03-23  4:48   ` Minchan Kim
2012-03-26 15:39   ` Michal Hocko [this message]
2012-03-22 21:56 ` [PATCH v6 4/7] mm: mark mm-inline functions as __always_inline Konstantin Khlebnikov
2012-03-22 21:56 ` [PATCH v6 5/7] mm: remove lru type checks from __isolate_lru_page() Konstantin Khlebnikov
2012-03-23  1:46   ` KAMEZAWA Hiroyuki
2012-03-22 21:56 ` [PATCH v6 6/7] mm/memcg: kill mem_cgroup_lru_del() Konstantin Khlebnikov
2012-03-23  1:48   ` KAMEZAWA Hiroyuki
2012-03-26 15:23   ` Michal Hocko
2012-03-26 16:05     ` Konstantin Khlebnikov
2012-03-22 21:56 ` [PATCH v6 7/7] mm/memcg: use vm_swappiness from target memory cgroup Konstantin Khlebnikov
2012-03-26 15:59   ` Michal Hocko

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=20120326153932.GD22754@tiehlicka.suse.cz \
    --to=mhocko@suse.cz \
    --cc=akpm@linux-foundation.org \
    --cc=hughd@google.com \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=khlebnikov@openvz.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox