Prev: [PATCH 2/6] perf ui: Introduce routine ui_browser__is_current_entry
Next: vmscan: zone_reclaim don't call disable_swap_token()
From: Christoph Lameter on 25 Jun 2010 10:10 On Fri, 25 Jun 2010, KOSAKI Motohiro wrote: > Fix simple argument error. Usually 'order' is very small value than > lru_pages. then it can makes unnecessary icache dropping. This is going to reduce the delta that is added to shrinker->nr significantly thereby increasing the number of times that shrink_slab() is called. What does the "lru_pages" parameter do in shrink_slab()? Looks like its only role is as a divison factor in a complex calculation of pages to be scanned. do_try_to_free_pages passes 0 as "lru_pages" to shrink_slab() when trying to do cgroup lru scans. Why is that? -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Rik van Riel on 8 Jul 2010 09:30 On 07/08/2010 03:40 AM, KOSAKI Motohiro wrote: > Fix simple argument error. Usually 'order' is very small value than > lru_pages. then it can makes unnecessary icache dropping. > > Signed-off-by: KOSAKI Motohiro<kosaki.motohiro(a)jp.fujitsu.com> Acked-by: Rik van Riel <riel(a)redhat.com> -- All rights reversed -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Christoph Lameter on 8 Jul 2010 10:10 On Thu, 8 Jul 2010, KOSAKI Motohiro wrote: > Fix simple argument error. Usually 'order' is very small value than > lru_pages. then it can makes unnecessary icache dropping. AFAICT this is not argument error but someone changed the naming of the parameter. The "lru_pages" parameter is really a division factor affecting the number of pages scanned. This patch increases this division factor significantly and therefore reduces the number of items scanned during zone_reclaim. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Christoph Lameter on 8 Jul 2010 17:10 On Thu, 8 Jul 2010, Andrew Morton wrote: > > AFAICT this is not argument error but someone changed the naming of the > > parameter. > > It's been there since day zero: > > : commit 2a16e3f4b0c408b9e50297d2ec27e295d490267a > : Author: Christoph Lameter <clameter(a)engr.sgi.com> > : AuthorDate: Wed Feb 1 03:05:35 2006 -0800 > : Commit: Linus Torvalds <torvalds(a)g5.osdl.org> > : CommitDate: Wed Feb 1 08:53:16 2006 -0800 > : > : [PATCH] Reclaim slab during zone reclaim That only shows that the order parameter was passed to shrink_slab() which is what I remember being done intentionally. Vaguely recall that this was necessary to avoid shrink_slab() throwing out too many pages for higher order allocs. Initially zone_reclaim was full of heuristics that later were replaced by counter as the new ZVCs became available and gradually better ways of accounting for pages became possible. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: KOSAKI Motohiro on 13 Jul 2010 01:50
> On Thu, Jul 8, 2010 at 4:40 PM, KOSAKI Motohiro > <kosaki.motohiro(a)jp.fujitsu.com> wrote: > > Fix simple argument error. Usually 'order' is very small value than > > lru_pages. then it can makes unnecessary icache dropping. > > > > Signed-off-by: KOSAKI Motohiro <kosaki.motohiro(a)jp.fujitsu.com> > Reviewed-by: Minchan Kim <minchan.kim(a)gmail.com> > > With your test result, This patch makes sense to me. > Please, include your test result in description. How's this? ============================================================== From 19872d74875e2331cbe7eca46c8ef65f5f00d7c4 Mon Sep 17 00:00:00 2001 From: KOSAKI Motohiro <kosaki.motohiro(a)jp.fujitsu.com> Date: Tue, 13 Jul 2010 13:39:11 +0900 Subject: [PATCH] vmscan: shrink_slab() require number of lru_pages, not page order Now, shrink_slab() has following scanning equation. lru_scanned max_pass basic_scan_objects = 4 x ------------- x ----------------------------- lru_pages shrinker->seeks (default:2) scan_objects = min(basic_scan_objects, max_pass * 2) Then, If we pass very small value as lru_pages instead real number of lru pages, shrink_slab() drop much objects rather than necessary. and now, __zone_reclaim() pass 'order' as lru_pages by mistake. that makes bad result. Example, If we receive very low memory pressure (scan = 32, order = 0), shrink_slab() via zone_reclaim() always drop _all_ icache/dcache objects. (see above equation, very small lru_pages make very big scan_objects result) This patch fixes it. Signed-off-by: KOSAKI Motohiro <kosaki.motohiro(a)jp.fujitsu.com> Reviewed-by: Minchan Kim <minchan.kim(a)gmail.com> Acked-by: Christoph Lameter <cl(a)linux-foundation.org> Acked-by: Rik van Riel <riel(a)redhat.com> --- mm/vmscan.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/mm/vmscan.c b/mm/vmscan.c index 6ff51c0..1bf9f72 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -2612,6 +2612,8 @@ static int __zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order) nr_slab_pages0 = zone_page_state(zone, NR_SLAB_RECLAIMABLE); if (nr_slab_pages0 > zone->min_slab_pages) { + unsigned long lru_pages = zone_reclaimable_pages(zone); + /* * shrink_slab() does not currently allow us to determine how * many pages were freed in this zone. So we take the current @@ -2622,7 +2624,7 @@ static int __zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order) * Note that shrink_slab will free memory on all zones and may * take a long time. */ - while (shrink_slab(sc.nr_scanned, gfp_mask, order) && + while (shrink_slab(sc.nr_scanned, gfp_mask, lru_pages) && (zone_page_state(zone, NR_SLAB_RECLAIMABLE) + nr_pages > nr_slab_pages0)) ; -- 1.6.5.2 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |