Re: [PATCH 10/12] mm: clear node in N_HIGH_MEMORY and stop kswapd when all memory is offlined

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 8 Oct 2009, Lee Schermerhorn wrote:

> From rientjes@xxxxxxxxxx Wed Oct  7 02:25:10 2009
> 

From: David Rientjes <rientjes@xxxxxxxxxx>

> [PATCH 10/12] mm: clear node in N_HIGH_MEMORY and stop kswapd when all memory is offlined
> 
> mm: clear node in N_HIGH_MEMORY and stop kswapd when all memory is offlined
> 
> When memory is hot-removed, its node must be cleared in N_HIGH_MEMORY if
> there are no present pages left.
> 
> In such a situation, kswapd must also be stopped since it has nothing
> left to do.
> 
> Cc: Christoph Lameter <cl@xxxxxxxxxxxxxxxxxxxx>
> Cc: Yasunori Goto <y-goto@xxxxxxxxxxxxxx>
> Cc: Mel Gorman <mel@xxxxxxxxx>
> Cc: Rafael J. Wysocki <rjw@xxxxxxx>
> Cc: Rik van Riel <riel@xxxxxxxxxx>

Thanks for adding these, but four of five never got cc'd on the patch :)  
I've added them.

> Signed-off-by: David Rientjes <rientjes@xxxxxxxxxx>
> Signed-off-by: Lee Schermerhorn <lee.schermerhorn@xxxxxx>
> 
> ---
> 
>  include/linux/swap.h |    1 +
>  mm/memory_hotplug.c  |    4 ++++
>  mm/vmscan.c          |   28 ++++++++++++++++++++++------
>  3 files changed, 27 insertions(+), 6 deletions(-)
> 
> Index: linux-2.6.31-mmotm-090925-1435/include/linux/swap.h
> ===================================================================
> --- linux-2.6.31-mmotm-090925-1435.orig/include/linux/swap.h	2009-09-28 10:10:39.000000000 -0400
> +++ linux-2.6.31-mmotm-090925-1435/include/linux/swap.h	2009-10-07 16:24:43.000000000 -0400
> @@ -273,6 +273,7 @@ extern int scan_unevictable_register_nod
>  extern void scan_unevictable_unregister_node(struct node *node);
>  
>  extern int kswapd_run(int nid);
> +extern void kswapd_stop(int nid);
>  
>  #ifdef CONFIG_MMU
>  /* linux/mm/shmem.c */
> Index: linux-2.6.31-mmotm-090925-1435/mm/memory_hotplug.c
> ===================================================================
> --- linux-2.6.31-mmotm-090925-1435.orig/mm/memory_hotplug.c	2009-09-28 10:10:39.000000000 -0400
> +++ linux-2.6.31-mmotm-090925-1435/mm/memory_hotplug.c	2009-10-07 16:24:43.000000000 -0400
> @@ -838,6 +838,10 @@ repeat:
>  
>  	setup_per_zone_wmarks();
>  	calculate_zone_inactive_ratio(zone);
> +	if (!node_present_pages(node)) {
> +		node_clear_state(node, N_HIGH_MEMORY);
> +		kswapd_stop(node);
> +	}
>  
>  	vm_total_pages = nr_free_pagecache_pages();
>  	writeback_set_ratelimit();
> Index: linux-2.6.31-mmotm-090925-1435/mm/vmscan.c
> ===================================================================
> --- linux-2.6.31-mmotm-090925-1435.orig/mm/vmscan.c	2009-09-28 10:10:43.000000000 -0400
> +++ linux-2.6.31-mmotm-090925-1435/mm/vmscan.c	2009-10-07 16:24:43.000000000 -0400
> @@ -2167,6 +2167,7 @@ static int kswapd(void *p)
>  	order = 0;
>  	for ( ; ; ) {
>  		unsigned long new_order;
> +		int ret;
>  
>  		prepare_to_wait(&pgdat->kswapd_wait, &wait, TASK_INTERRUPTIBLE);
>  		new_order = pgdat->kswapd_max_order;
> @@ -2178,19 +2179,23 @@ static int kswapd(void *p)
>  			 */
>  			order = new_order;
>  		} else {
> -			if (!freezing(current))
> +			if (!freezing(current) && !kthread_should_stop())
>  				schedule();
>  
>  			order = pgdat->kswapd_max_order;
>  		}
>  		finish_wait(&pgdat->kswapd_wait, &wait);
>  
> -		if (!try_to_freeze()) {
> -			/* We can speed up thawing tasks if we don't call
> -			 * balance_pgdat after returning from the refrigerator
> -			 */
> +		ret = try_to_freeze();
> +		if (kthread_should_stop())
> +			break;
> +
> +		/*
> +		 * We can speed up thawing tasks if we don't call balance_pgdat
> +		 * after returning from the refrigerator
> +		 */
> +		if (!ret)
>  			balance_pgdat(pgdat, order);
> -		}
>  	}
>  	return 0;
>  }
> @@ -2445,6 +2450,17 @@ int kswapd_run(int nid)
>  	return ret;
>  }
>  
> +/*
> + * Called by memory hotplug when all memory in a node is offlined.
> + */
> +void kswapd_stop(int nid)
> +{
> +	struct task_struct *kswapd = NODE_DATA(nid)->kswapd;
> +
> +	if (kswapd)
> +		kthread_stop(kswapd);
> +}
> +
>  static int __init kswapd_init(void)
>  {
>  	int nid;
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-numa" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]     [Devices]

  Powered by Linux