From 95a25958bca2f77ef8e637320034da01aaaed5df Mon Sep 17 00:00:00 2001 Message-Id: <95a25958bca2f77ef8e637320034da01aaaed5df.1309787991.git.minchan.kim@gmail.com> In-Reply-To: References: From: Minchan Kim Date: Sun, 26 Jun 2011 18:22:22 +0900 Subject: [PATCH v4 09/10] add inorder-lru tracepoints for just measurement This patch adds some tracepints for see the effect this patch series. This tracepoints isn't for merge but just see the effect. Cc: Johannes Weiner Cc: KAMEZAWA Hiroyuki Cc: KOSAKI Motohiro Cc: Mel Gorman Cc: Rik van Riel Cc: Andrea Arcangeli Cc: Michal Hocko Signed-off-by: Minchan Kim --- include/trace/events/inorder_putback.h | 88 ++++++++++++++++++++++++++++++++ mm/migrate.c | 3 + mm/swap.c | 3 + mm/vmscan.c | 4 +- 4 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 include/trace/events/inorder_putback.h diff --git a/include/trace/events/inorder_putback.h b/include/trace/events/inorder_putback.h new file mode 100644 index 0000000..fe81742 --- /dev/null +++ b/include/trace/events/inorder_putback.h @@ -0,0 +1,88 @@ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM inorder_putback + +#if !defined(_TRACE_INP_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_INP_H + +#include +#include + +TRACE_EVENT(mm_inorder_inorder, + + TP_PROTO(struct page *page, + struct page *old_page, + struct page *prev_page), + + TP_ARGS(page, old_page, prev_page), + + TP_STRUCT__entry( + __field(struct page *, page) + __field(struct page *, old_page) + __field(struct page *, prev_page) + ), + + TP_fast_assign( + __entry->page = page; + __entry->old_page = old_page; + __entry->prev_page = prev_page; + ), + + TP_printk("pfn=%lu old pfn=%lu prev_pfn=%lu active=%d", + page_to_pfn(__entry->page), + page_to_pfn(__entry->old_page), + page_to_pfn(__entry->prev_page), + PageActive(__entry->prev_page)) +); + +TRACE_EVENT(mm_inorder_outoforder, + TP_PROTO(struct page *page, + struct page *old_page, + struct page *prev_page), + + TP_ARGS(page, old_page, prev_page), + + TP_STRUCT__entry( + __field(struct page *, page) + __field(struct page *, old_page) + __field(struct page *, prev_page) + ), + + TP_fast_assign( + __entry->page = page; + __entry->old_page = old_page; + __entry->prev_page = prev_page; + ), + + TP_printk("pfn=%lu old pfn=%lu prev_pfn=%lu active=%d", + page_to_pfn(__entry->page), + page_to_pfn(__entry->old_page), + __entry->prev_page ? page_to_pfn(__entry->prev_page) : 0, + __entry->prev_page ? PageActive(__entry->prev_page) : 0) +); + +TRACE_EVENT(mm_inorder_isolate, + + TP_PROTO(struct page *prev_page, + struct page *page), + + TP_ARGS(prev_page, page), + + TP_STRUCT__entry( + __field(struct page *, prev_page) + __field(struct page *, page) + ), + + TP_fast_assign( + __entry->prev_page = prev_page; + __entry->page = page; + ), + + TP_printk("prev_pfn=%lu pfn=%lu active=%d", + page_to_pfn(__entry->prev_page), + page_to_pfn(__entry->page), PageActive(__entry->prev_page)) +); + +#endif /* _TRACE_INP_H */ + +/* This part must be outside protection */ +#include diff --git a/mm/migrate.c b/mm/migrate.c index cf73477..1267c45 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -39,6 +39,9 @@ #include "internal.h" +#define CREATE_TRACE_POINTS +#include + #define lru_to_page(_head) (list_entry((_head)->prev, struct page, lru)) /* diff --git a/mm/swap.c b/mm/swap.c index 611013d..f2ccf81 100644 --- a/mm/swap.c +++ b/mm/swap.c @@ -32,6 +32,7 @@ #include #include +#include #include "internal.h" /* How many pages do we try to swap or page in/out together? */ @@ -846,12 +847,14 @@ static void ____pagevec_ilru_add_fn(struct page *page, void *arg, int idx) */ adjust_ilru_list(lru, old_page, page, idx); __add_page_to_lru_list(zone, page, lru, &prev_page->lru); + trace_mm_inorder_inorder(page, old_page, prev_page); } else { file = is_file_lru(lru); active = is_active_lru(lru); if (active) SetPageActive(page); add_page_to_lru_list(zone, page, lru); + trace_mm_inorder_outoforder(page, old_page, prev_page); } update_page_reclaim_stat(zone, page, file, active); diff --git a/mm/vmscan.c b/mm/vmscan.c index 957c225..48e0007 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -50,10 +50,9 @@ #include #include "internal.h" - +#include #define CREATE_TRACE_POINTS #include - /* * reclaim_mode determines how the inactive list is shrunk * RECLAIM_MODE_SINGLE: Reclaim only order-0 pages @@ -1055,6 +1054,7 @@ int isolate_ilru_page(struct page *page, isolate_mode_t mode, int file, } *prev_page = lru_to_page(&page->lru); + trace_mm_inorder_isolate(*prev_page, page); } return ret; -- 1.7.4.1