[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20090512092347.GB25923@csn.ul.ie>
Date: Tue, 12 May 2009 10:23:48 +0100
From: Mel Gorman <mel@....ul.ie>
To: David Rientjes <rientjes@...gle.com>
Cc: Andrew Morton <akpm@...ux-foundation.org>,
Greg Kroah-Hartman <gregkh@...e.de>,
Nick Piggin <npiggin@...e.de>,
Peter Ziljstra <a.p.ziljstra@...llo.nl>,
Christoph Lameter <cl@...ux-foundation.org>,
Dave Hansen <dave@...ux.vnet.ibm.com>,
San Mehat <san@...roid.com>, Arve Hj?nnev?g <arve@...roid.com>,
linux-kernel@...r.kernel.org
Subject: Re: [patch 02/11 -mmotm] lowmemorykiller: Don't count free space
unless it meets the specified limit by itself
On Sun, May 10, 2009 at 03:07:10PM -0700, David Rientjes wrote:
> From: Arve Hjønnevåg <arve@...roid.com>
>
> This allows processes to be killed when the kernel evict cache pages in
> an attempt to get more contiguous free memory.
>
I'm not seeing what this patch has to do with contiguous free memory. I
see what the patch is doing - lowering the threshold allowing a
particular min_adj value to be used, but not why.
> Signed-off-by: Arve Hjønnevåg <arve@...roid.com>
> ---
> drivers/staging/android/lowmemorykiller.c | 13 +++++++++----
> 1 files changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/staging/android/lowmemorykiller.c b/drivers/staging/android/lowmemorykiller.c
> --- a/drivers/staging/android/lowmemorykiller.c
> +++ b/drivers/staging/android/lowmemorykiller.c
> @@ -58,20 +58,25 @@ static int lowmem_shrink(int nr_to_scan, gfp_t gfp_mask)
> int min_adj = OOM_ADJUST_MAX + 1;
> int selected_tasksize = 0;
> int array_size = ARRAY_SIZE(lowmem_adj);
> - int other_free = global_page_state(NR_FREE_PAGES) + global_page_state(NR_FILE_PAGES);
> + int other_free = global_page_state(NR_FREE_PAGES);
> + int other_file = global_page_state(NR_FILE_PAGES);
> if(lowmem_adj_size < array_size)
> array_size = lowmem_adj_size;
> if(lowmem_minfree_size < array_size)
> array_size = lowmem_minfree_size;
> for(i = 0; i < array_size; i++) {
It would appear that lowmem_adj_size is making assumptions on
the number of zones that exist in the system. It's not clear why
sysctl_lowmem_reserve_ratio[] is not being used or how they differ.
> - if(other_free < lowmem_minfree[i]) {
> + if (other_free < lowmem_minfree[i] &&
> + other_file < lowmem_minfree[i]) {
> min_adj = lowmem_adj[i];
> break;
> }
> }
> if(nr_to_scan > 0)
> - lowmem_print(3, "lowmem_shrink %d, %x, ofree %d, ma %d\n", nr_to_scan, gfp_mask, other_free, min_adj);
> - rem = global_page_state(NR_ACTIVE) + global_page_state(NR_INACTIVE);
> + lowmem_print(3, "lowmem_shrink %d, %x, ofree %d %d, ma %d\n", nr_to_scan, gfp_mask, other_free, other_file, min_adj);
> + rem = global_page_state(NR_ACTIVE_ANON) +
> + global_page_state(NR_ACTIVE_FILE) +
> + global_page_state(NR_INACTIVE_ANON) +
> + global_page_state(NR_INACTIVE_FILE);
This looks like it's a compile fix since changes made to 4f98a2fe. This
should have been in a separate patch and prioritised.
> if (nr_to_scan <= 0 || min_adj == OOM_ADJUST_MAX + 1) {
> lowmem_print(5, "lowmem_shrink %d, %x, return %d\n", nr_to_scan, gfp_mask, rem);
> return rem;
--
Mel Gorman
Part-time Phd Student Linux Technology Center
University of Limerick IBM Dublin Software Lab
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists