From: Andrew Morton <akpm@linux-foundation.org>
To: Vincent Li <macli@brc.ubc.ca>
Cc: kosaki.motohiro@jp.fujitsu.com, riel@redhat.com,
minchan.kim@gmail.com, fengguang.wu@intel.com,
linux-mm@kvack.org, Mel Gorman <mel@csn.ul.ie>
Subject: Re: [RESEND][PATCH V1] mm/vsmcan: check shrink_active_list() sc->isolate_pages() return value.
Date: Fri, 4 Sep 2009 16:53:05 -0700 [thread overview]
Message-ID: <20090904165305.c19429ce.akpm@linux-foundation.org> (raw)
In-Reply-To: <alpine.DEB.2.00.0909041431370.32680@kernelhack.brc.ubc.ca>
On Fri, 4 Sep 2009 14:39:32 -0700 (PDT)
Vincent Li <macli@brc.ubc.ca> wrote:
>
> Ok, I followed the patches above to make following testing code:
>
> ---
> diff --git a/include/trace/events/kmem.h b/include/trace/events/kmem.h
> index eaf46bd..863820a 100644
> --- a/include/trace/events/kmem.h
> +++ b/include/trace/events/kmem.h
> @@ -388,6 +388,24 @@ TRACE_EVENT(mm_page_alloc_extfrag,
> __entry->alloc_migratetype == __entry->fallback_migratetype)
> );
>
> +TRACE_EVENT(mm_vmscan_isolate_pages,
> +
> + TP_PROTO(int nr_taken_zeros),
> +
> + TP_ARGS(nr_taken_zeros),
> +
> + TP_STRUCT__entry(
> + __field(int, nr_taken_zeros)
> + ),
> +
> + TP_fast_assign(
> + __entry->nr_taken_zeros = nr_taken_zeros;
> + ),
> +
> + TP_printk("nr_taken_zeros=%d",
> + __entry->nr_taken_zeros)
> +);
> +
> #endif /* _TRACE_KMEM_H */
>
> /* This part must be outside protection */
> diff --git a/mm/vmscan.c b/mm/vmscan.c
> index ad93096..c2cf4dd 100644
> --- a/mm/vmscan.c
> +++ b/mm/vmscan.c
> @@ -40,6 +40,7 @@
> #include <linux/memcontrol.h>
> #include <linux/delayacct.h>
> #include <linux/sysctl.h>
> +#include <trace/events/kmem.h>
>
> #include <asm/tlbflush.h>
> #include <asm/div64.h>
> @@ -1306,6 +1307,7 @@ static void shrink_active_list(unsigned long nr_pages, struct zone *zone,
> struct zone_reclaim_stat *reclaim_stat = get_reclaim_stat(zone, sc);
> unsigned long nr_rotated = 0;
> unsigned long nr_deactivated = 0;
> + int nr_taken_zeros = 0;
>
> lru_add_drain();
> spin_lock_irq(&zone->lru_lock);
> @@ -1321,8 +1323,11 @@ static void shrink_active_list(unsigned long nr_pages, struct zone *zone,
> }
> __count_zone_vm_events(PGREFILL, zone, pgscanned);
>
> - if (nr_taken == 0)
> + if (nr_taken == 0) {
> + nr_taken_zeros++;
> + trace_mm_vmscan_isolate_pages(nr_taken_zeros);
> goto done;
> + }
>
> reclaim_stat->recent_scanned[file] += nr_taken;
> if (file)
Well you want to count two things: 1: how many times nr_taken==0 and 2:
how many times nr_taken!=0.
> Then I got test result with:
>
> root@kernelhack:/usr/src/mmotm-0903# perf stat --repeat 5 -e \
> kmem:mm_vmscan_isolate_pages hackbench 100
>
> Running with 100*40 (== 4000) tasks.
> Time: 52.736
> Running with 100*40 (== 4000) tasks.
> Time: 64.982
> Running with 100*40 (== 4000) tasks.
> Time: 56.866
> Running with 100*40 (== 4000) tasks.
> Time: 37.137
> Running with 100*40 (== 4000) tasks.
> Time: 48.415
>
> Performance counter stats for 'hackbench 100' (5 runs):
>
> 14189 kmem:mm_vmscan_isolate_pages ( +- 9.084% )
>
> 52.680621973 seconds time elapsed ( +- 0.689% )
>
> Is the testing patch written write? I don't understand what the number
> 14189 means? Does it make any sense?
I don't think you need nr_taken_zeros at all. You'd want something like
if (nr_taken == 0)
trace_mm_vmscan_nr_taken_zero();
else
trace_mm_vmscan_nr_taken_nonzero();
which would pointlessly generate a huge stream of events which would
have to be added up downstream, which is dumb.
I don't know if the tracing code is capable of maintaining the counters
for you. Perhaps you _do_ need nr_taken_zeros. In which case you want
if (nr_taken == 0) {
nr_taken_zeros++;
trace_mm_vmscan_isolate_pages_zero(nr_taken_zeros);
} else {
nr_taken_nonzeros++;
trace_mm_vmscan_isolate_pages_nonzero(nr_taken_nonzeros);
}
which is awkward. Mel will know.
> >
> > The way I used to do stuff like this is:
> >
> > int akpm1;
> > int akpm2;
> >
> > ...
> > if (nr_taken)
> > akpm1++;
> > else
> > akpm2++;
> >
> > then inspect the values of akpm1 and akpm2 in the running kernel using kgdb.
That's looking more attractive ;)
--
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:[~2009-09-04 23:54 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-02 23:49 [RESEND][PATCH V1] mm/vsmcan: check shrink_active_list() sc->isolate_pages() return value Vincent Li
2009-09-03 21:06 ` Andrew Morton
2009-09-03 22:02 ` Vincent Li
2009-09-03 22:47 ` Andrew Morton
2009-09-04 21:39 ` Vincent Li
2009-09-04 23:53 ` Andrew Morton [this message]
2009-09-08 13:21 ` Mel Gorman
2009-09-08 22:39 ` Vincent Li
2009-09-08 23:27 ` Minchan Kim
2009-10-15 22:47 ` Vincent Li
2009-10-15 23:13 ` Vincent Li
2009-10-16 2:10 ` Minchan Kim
2009-10-16 2:20 ` Wu Fengguang
2009-10-16 3:05 ` KOSAKI Motohiro
2009-10-16 3:26 ` Vincent Li
2009-11-26 4:56 ` KOSAKI Motohiro
2009-09-09 9:59 ` Mel Gorman
2009-09-04 1:37 ` Minchan Kim
2009-09-04 2:01 ` Andrew Morton
2009-09-04 5:01 ` Vincent Li
2009-09-04 16:05 ` Vincent Li
2009-09-06 23:38 ` KOSAKI Motohiro
2009-09-08 18:32 ` Vincent Li
2009-09-08 23:47 ` KOSAKI Motohiro
2009-09-09 12:04 ` Johannes Weiner
2009-09-09 13:22 ` Minchan Kim
2009-09-22 21:02 ` Andrew Morton
2009-09-22 23:01 ` Vincent Li
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=20090904165305.c19429ce.akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=fengguang.wu@intel.com \
--cc=kosaki.motohiro@jp.fujitsu.com \
--cc=linux-mm@kvack.org \
--cc=macli@brc.ubc.ca \
--cc=mel@csn.ul.ie \
--cc=minchan.kim@gmail.com \
--cc=riel@redhat.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.