From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Chinner Subject: [PATCH 01/12] vmscan: add shrink_slab tracepoints Date: Thu, 2 Jun 2011 17:00:56 +1000 Message-ID: <1306998067-27659-2-git-send-email-david@fromorbit.com> References: <1306998067-27659-1-git-send-email-david@fromorbit.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, xfs@oss.sgi.com To: linux-fsdevel@vger.kernel.org Return-path: In-Reply-To: <1306998067-27659-1-git-send-email-david@fromorbit.com> Sender: owner-linux-mm@kvack.org List-Id: linux-fsdevel.vger.kernel.org From: Dave Chinner =D0=86t is impossible to understand what the shrinkers are actually doing without instrumenting the code, so add a some tracepoints to allow insight to be gained. Signed-off-by: Dave Chinner --- include/trace/events/vmscan.h | 67 +++++++++++++++++++++++++++++++++++= ++++++ mm/vmscan.c | 6 +++- 2 files changed, 72 insertions(+), 1 deletions(-) diff --git a/include/trace/events/vmscan.h b/include/trace/events/vmscan.= h index ea422aa..c798cd7 100644 --- a/include/trace/events/vmscan.h +++ b/include/trace/events/vmscan.h @@ -310,6 +310,73 @@ TRACE_EVENT(mm_vmscan_lru_shrink_inactive, show_reclaim_flags(__entry->reclaim_flags)) ); =20 +TRACE_EVENT(mm_shrink_slab_start, + TP_PROTO(struct shrinker *shr, struct shrink_control *sc, + unsigned long pgs_scanned, unsigned long lru_pgs, + unsigned long cache_items, unsigned long long delta, + unsigned long total_scan), + + TP_ARGS(shr, sc, pgs_scanned, lru_pgs, cache_items, delta, total_scan), + + TP_STRUCT__entry( + __field(struct shrinker *, shr) + __field(long, shr_nr) + __field(gfp_t, gfp_flags) + __field(unsigned long, pgs_scanned) + __field(unsigned long, lru_pgs) + __field(unsigned long, cache_items) + __field(unsigned long long, delta) + __field(unsigned long, total_scan) + ), + + TP_fast_assign( + __entry->shr =3D shr; + __entry->shr_nr =3D shr->nr; + __entry->gfp_flags =3D sc->gfp_mask; + __entry->pgs_scanned =3D pgs_scanned; + __entry->lru_pgs =3D lru_pgs; + __entry->cache_items =3D cache_items; + __entry->delta =3D delta; + __entry->total_scan =3D total_scan; + ), + + TP_printk("shrinker %p: nr %ld gfp_flags %s pgs_scanned %ld lru_pgs %ld= cache items %ld delta %lld total_scan %ld", + __entry->shr, + __entry->shr_nr, + show_gfp_flags(__entry->gfp_flags), + __entry->pgs_scanned, + __entry->lru_pgs, + __entry->cache_items, + __entry->delta, + __entry->total_scan) +); + +TRACE_EVENT(mm_shrink_slab_end, + TP_PROTO(struct shrinker *shr, int shrinker_ret, + unsigned long total_scan), + + TP_ARGS(shr, shrinker_ret, total_scan), + + TP_STRUCT__entry( + __field(struct shrinker *, shr) + __field(long, shr_nr) + __field(int, shrinker_ret) + __field(unsigned long, total_scan) + ), + + TP_fast_assign( + __entry->shr =3D shr; + __entry->shr_nr =3D shr->nr; + __entry->shrinker_ret =3D shrinker_ret; + __entry->total_scan =3D total_scan; + ), + + TP_printk("shrinker %p: nr %ld total_scan %ld return val %d", + __entry->shr, + __entry->shr_nr, + __entry->total_scan, + __entry->shrinker_ret) +); =20 #endif /* _TRACE_VMSCAN_H */ =20 diff --git a/mm/vmscan.c b/mm/vmscan.c index faa0a08..48e3fbd 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -250,6 +250,7 @@ unsigned long shrink_slab(struct shrink_control *shri= nk, unsigned long long delta; unsigned long total_scan; unsigned long max_pass; + int shrink_ret =3D 0; =20 max_pass =3D do_shrinker_shrink(shrinker, shrink, 0); delta =3D (4 * nr_pages_scanned) / shrinker->seeks; @@ -274,9 +275,11 @@ unsigned long shrink_slab(struct shrink_control *shr= ink, total_scan =3D shrinker->nr; shrinker->nr =3D 0; =20 + trace_mm_shrink_slab_start(shrinker, shrink, nr_pages_scanned, + lru_pages, max_pass, delta, total_scan); + while (total_scan >=3D SHRINK_BATCH) { long this_scan =3D SHRINK_BATCH; - int shrink_ret; int nr_before; =20 nr_before =3D do_shrinker_shrink(shrinker, shrink, 0); @@ -293,6 +296,7 @@ unsigned long shrink_slab(struct shrink_control *shri= nk, } =20 shrinker->nr +=3D total_scan; + trace_mm_shrink_slab_end(shrinker, shrink_ret, total_scan); } up_read(&shrinker_rwsem); out: --=20 1.7.5.1 -- 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: email@kvack.org