On Fri, Mar 1, 2019 at 11:54 AM Yafang Shao <laoar.shao@xxxxxxxxx> wrote: > > In the page alloc fast path, it may do node reclaim, which may cause > latency spike. > We should add tracepoint for this event, and also measure the latency > it causes. > > So bellow two tracepoints are introduced, > mm_vmscan_node_reclaim_begin > mm_vmscan_node_reclaim_end > > Signed-off-by: Yafang Shao <laoar.shao@xxxxxxxxx> Acked-by: Souptick Joarder <jrdr.linux@xxxxxxxxx> (for the comment on v1). > --- > include/trace/events/vmscan.h | 32 ++++++++++++++++++++++++++++++++ > mm/vmscan.c | 6 ++++++ > 2 files changed, 38 insertions(+) > > diff --git a/include/trace/events/vmscan.h b/include/trace/events/vmscan.h > index a1cb913..c1ddf28 100644 > --- a/include/trace/events/vmscan.h > +++ b/include/trace/events/vmscan.h > @@ -465,6 +465,38 @@ > __entry->ratio, > show_reclaim_flags(__entry->reclaim_flags)) > ); > + > +TRACE_EVENT(mm_vmscan_node_reclaim_begin, > + > + TP_PROTO(int nid, int order, gfp_t gfp_flags), > + > + TP_ARGS(nid, order, gfp_flags), > + > + TP_STRUCT__entry( > + __field(int, nid) > + __field(int, order) > + __field(gfp_t, gfp_flags) > + ), > + > + TP_fast_assign( > + __entry->nid = nid; > + __entry->order = order; > + __entry->gfp_flags = gfp_flags; > + ), > + > + TP_printk("nid=%d order=%d gfp_flags=%s", > + __entry->nid, > + __entry->order, > + show_gfp_flags(__entry->gfp_flags)) > +); > + > +DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_node_reclaim_end, > + > + TP_PROTO(unsigned long nr_reclaimed), > + > + TP_ARGS(nr_reclaimed) > +); > + > #endif /* _TRACE_VMSCAN_H */ > > /* This part must be outside protection */ > diff --git a/mm/vmscan.c b/mm/vmscan.c > index ac4806f..2bee5d1 100644 > --- a/mm/vmscan.c > +++ b/mm/vmscan.c > @@ -4241,6 +4241,9 @@ static int __node_reclaim(struct pglist_data *pgdat, gfp_t gfp_mask, unsigned in > .reclaim_idx = gfp_zone(gfp_mask), > }; > > + trace_mm_vmscan_node_reclaim_begin(pgdat->node_id, order, > + sc.gfp_mask); > + > cond_resched(); > fs_reclaim_acquire(sc.gfp_mask); > /* > @@ -4267,6 +4270,9 @@ static int __node_reclaim(struct pglist_data *pgdat, gfp_t gfp_mask, unsigned in > current->flags &= ~PF_SWAPWRITE; > memalloc_noreclaim_restore(noreclaim_flag); > fs_reclaim_release(sc.gfp_mask); > + > + trace_mm_vmscan_node_reclaim_end(sc.nr_reclaimed); > + > return sc.nr_reclaimed >= nr_pages; > } > > -- > 1.8.3.1 >