mm, vmscan: enhance mm_vmscan_lru_shrink_inactive tracepoint
mm_vmscan_lru_shrink_inactive will currently report the number of scanned and reclaimed pages. This doesn't give us an idea how the reclaim went except for the overall effectiveness though. Export and show other counters which will tell us why we couldn't reclaim some pages. - nr_dirty, nr_writeback, nr_congested and nr_immediate tells us how many pages are blocked due to IO - nr_activate tells us how many pages were moved to the active list - nr_ref_keep reports how many pages are kept on the LRU due to references (mostly for the file pages which are about to go for another round through the inactive list) - nr_unmap_fail - how many pages failed to unmap All these are rather low level so they might change in future but the tracepoint is already implementation specific so no tools should be depending on its stability. Link: http://lkml.kernel.org/r/20170104101942.4860-7-mhocko@kernel.org Signed-off-by: Michal Hocko <mhocko@suse.com> Acked-by: Hillf Danton <hillf.zj@alibaba-inc.com> Acked-by: Mel Gorman <mgorman@suse.de> Acked-by: Vlastimil Babka <vbabka@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committed by
Linus Torvalds

parent
3c710c1ad1
commit
5bccd16657
@@ -340,14 +340,27 @@ TRACE_EVENT(mm_vmscan_lru_shrink_inactive,
|
||||
|
||||
TP_PROTO(int nid,
|
||||
unsigned long nr_scanned, unsigned long nr_reclaimed,
|
||||
unsigned long nr_dirty, unsigned long nr_writeback,
|
||||
unsigned long nr_congested, unsigned long nr_immediate,
|
||||
unsigned long nr_activate, unsigned long nr_ref_keep,
|
||||
unsigned long nr_unmap_fail,
|
||||
int priority, int file),
|
||||
|
||||
TP_ARGS(nid, nr_scanned, nr_reclaimed, priority, file),
|
||||
TP_ARGS(nid, nr_scanned, nr_reclaimed, nr_dirty, nr_writeback,
|
||||
nr_congested, nr_immediate, nr_activate, nr_ref_keep,
|
||||
nr_unmap_fail, priority, file),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(int, nid)
|
||||
__field(unsigned long, nr_scanned)
|
||||
__field(unsigned long, nr_reclaimed)
|
||||
__field(unsigned long, nr_dirty)
|
||||
__field(unsigned long, nr_writeback)
|
||||
__field(unsigned long, nr_congested)
|
||||
__field(unsigned long, nr_immediate)
|
||||
__field(unsigned long, nr_activate)
|
||||
__field(unsigned long, nr_ref_keep)
|
||||
__field(unsigned long, nr_unmap_fail)
|
||||
__field(int, priority)
|
||||
__field(int, reclaim_flags)
|
||||
),
|
||||
@@ -356,14 +369,24 @@ TRACE_EVENT(mm_vmscan_lru_shrink_inactive,
|
||||
__entry->nid = nid;
|
||||
__entry->nr_scanned = nr_scanned;
|
||||
__entry->nr_reclaimed = nr_reclaimed;
|
||||
__entry->nr_dirty = nr_dirty;
|
||||
__entry->nr_writeback = nr_writeback;
|
||||
__entry->nr_congested = nr_congested;
|
||||
__entry->nr_immediate = nr_immediate;
|
||||
__entry->nr_activate = nr_activate;
|
||||
__entry->nr_ref_keep = nr_ref_keep;
|
||||
__entry->nr_unmap_fail = nr_unmap_fail;
|
||||
__entry->priority = priority;
|
||||
__entry->reclaim_flags = trace_shrink_flags(file);
|
||||
),
|
||||
|
||||
TP_printk("nid=%d nr_scanned=%ld nr_reclaimed=%ld priority=%d flags=%s",
|
||||
TP_printk("nid=%d nr_scanned=%ld nr_reclaimed=%ld nr_dirty=%ld nr_writeback=%ld nr_congested=%ld nr_immediate=%ld nr_activate=%ld nr_ref_keep=%ld nr_unmap_fail=%ld priority=%d flags=%s",
|
||||
__entry->nid,
|
||||
__entry->nr_scanned, __entry->nr_reclaimed,
|
||||
__entry->priority,
|
||||
__entry->nr_dirty, __entry->nr_writeback,
|
||||
__entry->nr_congested, __entry->nr_immediate,
|
||||
__entry->nr_activate, __entry->nr_ref_keep,
|
||||
__entry->nr_unmap_fail, __entry->priority,
|
||||
show_reclaim_flags(__entry->reclaim_flags))
|
||||
);
|
||||
|
||||
|
Reference in New Issue
Block a user