LCOV - code coverage report
Current view: top level - include/trace/events - vmscan.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 1 16 6.2 %
Date: 2021-04-22 12:43:58 Functions: 1 66 1.5 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : #undef TRACE_SYSTEM
       3             : #define TRACE_SYSTEM vmscan
       4             : 
       5             : #if !defined(_TRACE_VMSCAN_H) || defined(TRACE_HEADER_MULTI_READ)
       6             : #define _TRACE_VMSCAN_H
       7             : 
       8             : #include <linux/types.h>
       9             : #include <linux/tracepoint.h>
      10             : #include <linux/mm.h>
      11             : #include <linux/memcontrol.h>
      12             : #include <trace/events/mmflags.h>
      13             : 
      14             : #define RECLAIM_WB_ANON         0x0001u
      15             : #define RECLAIM_WB_FILE         0x0002u
      16             : #define RECLAIM_WB_MIXED        0x0010u
      17             : #define RECLAIM_WB_SYNC         0x0004u /* Unused, all reclaim async */
      18             : #define RECLAIM_WB_ASYNC        0x0008u
      19             : #define RECLAIM_WB_LRU          (RECLAIM_WB_ANON|RECLAIM_WB_FILE)
      20             : 
      21             : #define show_reclaim_flags(flags)                               \
      22             :         (flags) ? __print_flags(flags, "|",                   \
      23             :                 {RECLAIM_WB_ANON,       "RECLAIM_WB_ANON"},   \
      24             :                 {RECLAIM_WB_FILE,       "RECLAIM_WB_FILE"},   \
      25             :                 {RECLAIM_WB_MIXED,      "RECLAIM_WB_MIXED"},  \
      26             :                 {RECLAIM_WB_SYNC,       "RECLAIM_WB_SYNC"},   \
      27             :                 {RECLAIM_WB_ASYNC,      "RECLAIM_WB_ASYNC"}   \
      28             :                 ) : "RECLAIM_WB_NONE"
      29             : 
      30             : #define trace_reclaim_flags(file) ( \
      31             :         (file ? RECLAIM_WB_FILE : RECLAIM_WB_ANON) | \
      32             :         (RECLAIM_WB_ASYNC) \
      33             :         )
      34             : 
      35           2 : TRACE_EVENT(mm_vmscan_kswapd_sleep,
      36             : 
      37             :         TP_PROTO(int nid),
      38             : 
      39             :         TP_ARGS(nid),
      40             : 
      41             :         TP_STRUCT__entry(
      42             :                 __field(        int,    nid     )
      43             :         ),
      44             : 
      45             :         TP_fast_assign(
      46             :                 __entry->nid = nid;
      47             :         ),
      48             : 
      49             :         TP_printk("nid=%d", __entry->nid)
      50             : );
      51             : 
      52           0 : TRACE_EVENT(mm_vmscan_kswapd_wake,
      53             : 
      54             :         TP_PROTO(int nid, int zid, int order),
      55             : 
      56             :         TP_ARGS(nid, zid, order),
      57             : 
      58             :         TP_STRUCT__entry(
      59             :                 __field(        int,    nid     )
      60             :                 __field(        int,    zid     )
      61             :                 __field(        int,    order   )
      62             :         ),
      63             : 
      64             :         TP_fast_assign(
      65             :                 __entry->nid = nid;
      66             :                 __entry->zid    = zid;
      67             :                 __entry->order       = order;
      68             :         ),
      69             : 
      70             :         TP_printk("nid=%d order=%d",
      71             :                 __entry->nid,
      72             :                 __entry->order)
      73             : );
      74             : 
      75           0 : TRACE_EVENT(mm_vmscan_wakeup_kswapd,
      76             : 
      77             :         TP_PROTO(int nid, int zid, int order, gfp_t gfp_flags),
      78             : 
      79             :         TP_ARGS(nid, zid, order, gfp_flags),
      80             : 
      81             :         TP_STRUCT__entry(
      82             :                 __field(        int,    nid             )
      83             :                 __field(        int,    zid             )
      84             :                 __field(        int,    order           )
      85             :                 __field(        gfp_t,  gfp_flags       )
      86             :         ),
      87             : 
      88             :         TP_fast_assign(
      89             :                 __entry->nid         = nid;
      90             :                 __entry->zid         = zid;
      91             :                 __entry->order               = order;
      92             :                 __entry->gfp_flags   = gfp_flags;
      93             :         ),
      94             : 
      95             :         TP_printk("nid=%d order=%d gfp_flags=%s",
      96             :                 __entry->nid,
      97             :                 __entry->order,
      98             :                 show_gfp_flags(__entry->gfp_flags))
      99             : );
     100             : 
     101           0 : DECLARE_EVENT_CLASS(mm_vmscan_direct_reclaim_begin_template,
     102             : 
     103             :         TP_PROTO(int order, gfp_t gfp_flags),
     104             : 
     105             :         TP_ARGS(order, gfp_flags),
     106             : 
     107             :         TP_STRUCT__entry(
     108             :                 __field(        int,    order           )
     109             :                 __field(        gfp_t,  gfp_flags       )
     110             :         ),
     111             : 
     112             :         TP_fast_assign(
     113             :                 __entry->order               = order;
     114             :                 __entry->gfp_flags   = gfp_flags;
     115             :         ),
     116             : 
     117             :         TP_printk("order=%d gfp_flags=%s",
     118             :                 __entry->order,
     119             :                 show_gfp_flags(__entry->gfp_flags))
     120             : );
     121             : 
     122           0 : DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_direct_reclaim_begin,
     123             : 
     124             :         TP_PROTO(int order, gfp_t gfp_flags),
     125             : 
     126             :         TP_ARGS(order, gfp_flags)
     127             : );
     128             : 
     129             : #ifdef CONFIG_MEMCG
     130             : DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_reclaim_begin,
     131             : 
     132             :         TP_PROTO(int order, gfp_t gfp_flags),
     133             : 
     134             :         TP_ARGS(order, gfp_flags)
     135             : );
     136             : 
     137             : DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_softlimit_reclaim_begin,
     138             : 
     139             :         TP_PROTO(int order, gfp_t gfp_flags),
     140             : 
     141             :         TP_ARGS(order, gfp_flags)
     142             : );
     143             : #endif /* CONFIG_MEMCG */
     144             : 
     145           0 : DECLARE_EVENT_CLASS(mm_vmscan_direct_reclaim_end_template,
     146             : 
     147             :         TP_PROTO(unsigned long nr_reclaimed),
     148             : 
     149             :         TP_ARGS(nr_reclaimed),
     150             : 
     151             :         TP_STRUCT__entry(
     152             :                 __field(        unsigned long,  nr_reclaimed    )
     153             :         ),
     154             : 
     155             :         TP_fast_assign(
     156             :                 __entry->nr_reclaimed        = nr_reclaimed;
     157             :         ),
     158             : 
     159             :         TP_printk("nr_reclaimed=%lu", __entry->nr_reclaimed)
     160             : );
     161             : 
     162           0 : DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_direct_reclaim_end,
     163             : 
     164             :         TP_PROTO(unsigned long nr_reclaimed),
     165             : 
     166             :         TP_ARGS(nr_reclaimed)
     167             : );
     168             : 
     169             : #ifdef CONFIG_MEMCG
     170             : DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_memcg_reclaim_end,
     171             : 
     172             :         TP_PROTO(unsigned long nr_reclaimed),
     173             : 
     174             :         TP_ARGS(nr_reclaimed)
     175             : );
     176             : 
     177             : DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_memcg_softlimit_reclaim_end,
     178             : 
     179             :         TP_PROTO(unsigned long nr_reclaimed),
     180             : 
     181             :         TP_ARGS(nr_reclaimed)
     182             : );
     183             : #endif /* CONFIG_MEMCG */
     184             : 
     185           0 : TRACE_EVENT(mm_shrink_slab_start,
     186             :         TP_PROTO(struct shrinker *shr, struct shrink_control *sc,
     187             :                 long nr_objects_to_shrink, unsigned long cache_items,
     188             :                 unsigned long long delta, unsigned long total_scan,
     189             :                 int priority),
     190             : 
     191             :         TP_ARGS(shr, sc, nr_objects_to_shrink, cache_items, delta, total_scan,
     192             :                 priority),
     193             : 
     194             :         TP_STRUCT__entry(
     195             :                 __field(struct shrinker *, shr)
     196             :                 __field(void *, shrink)
     197             :                 __field(int, nid)
     198             :                 __field(long, nr_objects_to_shrink)
     199             :                 __field(gfp_t, gfp_flags)
     200             :                 __field(unsigned long, cache_items)
     201             :                 __field(unsigned long long, delta)
     202             :                 __field(unsigned long, total_scan)
     203             :                 __field(int, priority)
     204             :         ),
     205             : 
     206             :         TP_fast_assign(
     207             :                 __entry->shr = shr;
     208             :                 __entry->shrink = shr->scan_objects;
     209             :                 __entry->nid = sc->nid;
     210             :                 __entry->nr_objects_to_shrink = nr_objects_to_shrink;
     211             :                 __entry->gfp_flags = sc->gfp_mask;
     212             :                 __entry->cache_items = cache_items;
     213             :                 __entry->delta = delta;
     214             :                 __entry->total_scan = total_scan;
     215             :                 __entry->priority = priority;
     216             :         ),
     217             : 
     218             :         TP_printk("%pS %p: nid: %d objects to shrink %ld gfp_flags %s cache items %ld delta %lld total_scan %ld priority %d",
     219             :                 __entry->shrink,
     220             :                 __entry->shr,
     221             :                 __entry->nid,
     222             :                 __entry->nr_objects_to_shrink,
     223             :                 show_gfp_flags(__entry->gfp_flags),
     224             :                 __entry->cache_items,
     225             :                 __entry->delta,
     226             :                 __entry->total_scan,
     227             :                 __entry->priority)
     228             : );
     229             : 
     230           0 : TRACE_EVENT(mm_shrink_slab_end,
     231             :         TP_PROTO(struct shrinker *shr, int nid, int shrinker_retval,
     232             :                 long unused_scan_cnt, long new_scan_cnt, long total_scan),
     233             : 
     234             :         TP_ARGS(shr, nid, shrinker_retval, unused_scan_cnt, new_scan_cnt,
     235             :                 total_scan),
     236             : 
     237             :         TP_STRUCT__entry(
     238             :                 __field(struct shrinker *, shr)
     239             :                 __field(int, nid)
     240             :                 __field(void *, shrink)
     241             :                 __field(long, unused_scan)
     242             :                 __field(long, new_scan)
     243             :                 __field(int, retval)
     244             :                 __field(long, total_scan)
     245             :         ),
     246             : 
     247             :         TP_fast_assign(
     248             :                 __entry->shr = shr;
     249             :                 __entry->nid = nid;
     250             :                 __entry->shrink = shr->scan_objects;
     251             :                 __entry->unused_scan = unused_scan_cnt;
     252             :                 __entry->new_scan = new_scan_cnt;
     253             :                 __entry->retval = shrinker_retval;
     254             :                 __entry->total_scan = total_scan;
     255             :         ),
     256             : 
     257             :         TP_printk("%pS %p: nid: %d unused scan count %ld new scan count %ld total_scan %ld last shrinker return val %d",
     258             :                 __entry->shrink,
     259             :                 __entry->shr,
     260             :                 __entry->nid,
     261             :                 __entry->unused_scan,
     262             :                 __entry->new_scan,
     263             :                 __entry->total_scan,
     264             :                 __entry->retval)
     265             : );
     266             : 
     267           0 : TRACE_EVENT(mm_vmscan_lru_isolate,
     268             :         TP_PROTO(int highest_zoneidx,
     269             :                 int order,
     270             :                 unsigned long nr_requested,
     271             :                 unsigned long nr_scanned,
     272             :                 unsigned long nr_skipped,
     273             :                 unsigned long nr_taken,
     274             :                 isolate_mode_t isolate_mode,
     275             :                 int lru),
     276             : 
     277             :         TP_ARGS(highest_zoneidx, order, nr_requested, nr_scanned, nr_skipped, nr_taken, isolate_mode, lru),
     278             : 
     279             :         TP_STRUCT__entry(
     280             :                 __field(int, highest_zoneidx)
     281             :                 __field(int, order)
     282             :                 __field(unsigned long, nr_requested)
     283             :                 __field(unsigned long, nr_scanned)
     284             :                 __field(unsigned long, nr_skipped)
     285             :                 __field(unsigned long, nr_taken)
     286             :                 __field(isolate_mode_t, isolate_mode)
     287             :                 __field(int, lru)
     288             :         ),
     289             : 
     290             :         TP_fast_assign(
     291             :                 __entry->highest_zoneidx = highest_zoneidx;
     292             :                 __entry->order = order;
     293             :                 __entry->nr_requested = nr_requested;
     294             :                 __entry->nr_scanned = nr_scanned;
     295             :                 __entry->nr_skipped = nr_skipped;
     296             :                 __entry->nr_taken = nr_taken;
     297             :                 __entry->isolate_mode = isolate_mode;
     298             :                 __entry->lru = lru;
     299             :         ),
     300             : 
     301             :         /*
     302             :          * classzone is previous name of the highest_zoneidx.
     303             :          * Reason not to change it is the ABI requirement of the tracepoint.
     304             :          */
     305             :         TP_printk("isolate_mode=%d classzone=%d order=%d nr_requested=%lu nr_scanned=%lu nr_skipped=%lu nr_taken=%lu lru=%s",
     306             :                 __entry->isolate_mode,
     307             :                 __entry->highest_zoneidx,
     308             :                 __entry->order,
     309             :                 __entry->nr_requested,
     310             :                 __entry->nr_scanned,
     311             :                 __entry->nr_skipped,
     312             :                 __entry->nr_taken,
     313             :                 __print_symbolic(__entry->lru, LRU_NAMES))
     314             : );
     315             : 
     316           0 : TRACE_EVENT(mm_vmscan_writepage,
     317             : 
     318             :         TP_PROTO(struct page *page),
     319             : 
     320             :         TP_ARGS(page),
     321             : 
     322             :         TP_STRUCT__entry(
     323             :                 __field(unsigned long, pfn)
     324             :                 __field(int, reclaim_flags)
     325             :         ),
     326             : 
     327             :         TP_fast_assign(
     328             :                 __entry->pfn = page_to_pfn(page);
     329             :                 __entry->reclaim_flags = trace_reclaim_flags(
     330             :                                                 page_is_file_lru(page));
     331             :         ),
     332             : 
     333             :         TP_printk("page=%p pfn=%lu flags=%s",
     334             :                 pfn_to_page(__entry->pfn),
     335             :                 __entry->pfn,
     336             :                 show_reclaim_flags(__entry->reclaim_flags))
     337             : );
     338             : 
     339           0 : TRACE_EVENT(mm_vmscan_lru_shrink_inactive,
     340             : 
     341             :         TP_PROTO(int nid,
     342             :                 unsigned long nr_scanned, unsigned long nr_reclaimed,
     343             :                 struct reclaim_stat *stat, int priority, int file),
     344             : 
     345             :         TP_ARGS(nid, nr_scanned, nr_reclaimed, stat, priority, file),
     346             : 
     347             :         TP_STRUCT__entry(
     348             :                 __field(int, nid)
     349             :                 __field(unsigned long, nr_scanned)
     350             :                 __field(unsigned long, nr_reclaimed)
     351             :                 __field(unsigned long, nr_dirty)
     352             :                 __field(unsigned long, nr_writeback)
     353             :                 __field(unsigned long, nr_congested)
     354             :                 __field(unsigned long, nr_immediate)
     355             :                 __field(unsigned int, nr_activate0)
     356             :                 __field(unsigned int, nr_activate1)
     357             :                 __field(unsigned long, nr_ref_keep)
     358             :                 __field(unsigned long, nr_unmap_fail)
     359             :                 __field(int, priority)
     360             :                 __field(int, reclaim_flags)
     361             :         ),
     362             : 
     363             :         TP_fast_assign(
     364             :                 __entry->nid = nid;
     365             :                 __entry->nr_scanned = nr_scanned;
     366             :                 __entry->nr_reclaimed = nr_reclaimed;
     367             :                 __entry->nr_dirty = stat->nr_dirty;
     368             :                 __entry->nr_writeback = stat->nr_writeback;
     369             :                 __entry->nr_congested = stat->nr_congested;
     370             :                 __entry->nr_immediate = stat->nr_immediate;
     371             :                 __entry->nr_activate0 = stat->nr_activate[0];
     372             :                 __entry->nr_activate1 = stat->nr_activate[1];
     373             :                 __entry->nr_ref_keep = stat->nr_ref_keep;
     374             :                 __entry->nr_unmap_fail = stat->nr_unmap_fail;
     375             :                 __entry->priority = priority;
     376             :                 __entry->reclaim_flags = trace_reclaim_flags(file);
     377             :         ),
     378             : 
     379             :         TP_printk("nid=%d nr_scanned=%ld nr_reclaimed=%ld nr_dirty=%ld nr_writeback=%ld nr_congested=%ld nr_immediate=%ld nr_activate_anon=%d nr_activate_file=%d nr_ref_keep=%ld nr_unmap_fail=%ld priority=%d flags=%s",
     380             :                 __entry->nid,
     381             :                 __entry->nr_scanned, __entry->nr_reclaimed,
     382             :                 __entry->nr_dirty, __entry->nr_writeback,
     383             :                 __entry->nr_congested, __entry->nr_immediate,
     384             :                 __entry->nr_activate0, __entry->nr_activate1,
     385             :                 __entry->nr_ref_keep, __entry->nr_unmap_fail,
     386             :                 __entry->priority,
     387             :                 show_reclaim_flags(__entry->reclaim_flags))
     388             : );
     389             : 
     390           0 : TRACE_EVENT(mm_vmscan_lru_shrink_active,
     391             : 
     392             :         TP_PROTO(int nid, unsigned long nr_taken,
     393             :                 unsigned long nr_active, unsigned long nr_deactivated,
     394             :                 unsigned long nr_referenced, int priority, int file),
     395             : 
     396             :         TP_ARGS(nid, nr_taken, nr_active, nr_deactivated, nr_referenced, priority, file),
     397             : 
     398             :         TP_STRUCT__entry(
     399             :                 __field(int, nid)
     400             :                 __field(unsigned long, nr_taken)
     401             :                 __field(unsigned long, nr_active)
     402             :                 __field(unsigned long, nr_deactivated)
     403             :                 __field(unsigned long, nr_referenced)
     404             :                 __field(int, priority)
     405             :                 __field(int, reclaim_flags)
     406             :         ),
     407             : 
     408             :         TP_fast_assign(
     409             :                 __entry->nid = nid;
     410             :                 __entry->nr_taken = nr_taken;
     411             :                 __entry->nr_active = nr_active;
     412             :                 __entry->nr_deactivated = nr_deactivated;
     413             :                 __entry->nr_referenced = nr_referenced;
     414             :                 __entry->priority = priority;
     415             :                 __entry->reclaim_flags = trace_reclaim_flags(file);
     416             :         ),
     417             : 
     418             :         TP_printk("nid=%d nr_taken=%ld nr_active=%ld nr_deactivated=%ld nr_referenced=%ld priority=%d flags=%s",
     419             :                 __entry->nid,
     420             :                 __entry->nr_taken,
     421             :                 __entry->nr_active, __entry->nr_deactivated, __entry->nr_referenced,
     422             :                 __entry->priority,
     423             :                 show_reclaim_flags(__entry->reclaim_flags))
     424             : );
     425             : 
     426           0 : TRACE_EVENT(mm_vmscan_inactive_list_is_low,
     427             : 
     428             :         TP_PROTO(int nid, int reclaim_idx,
     429             :                 unsigned long total_inactive, unsigned long inactive,
     430             :                 unsigned long total_active, unsigned long active,
     431             :                 unsigned long ratio, int file),
     432             : 
     433             :         TP_ARGS(nid, reclaim_idx, total_inactive, inactive, total_active, active, ratio, file),
     434             : 
     435             :         TP_STRUCT__entry(
     436             :                 __field(int, nid)
     437             :                 __field(int, reclaim_idx)
     438             :                 __field(unsigned long, total_inactive)
     439             :                 __field(unsigned long, inactive)
     440             :                 __field(unsigned long, total_active)
     441             :                 __field(unsigned long, active)
     442             :                 __field(unsigned long, ratio)
     443             :                 __field(int, reclaim_flags)
     444             :         ),
     445             : 
     446             :         TP_fast_assign(
     447             :                 __entry->nid = nid;
     448             :                 __entry->reclaim_idx = reclaim_idx;
     449             :                 __entry->total_inactive = total_inactive;
     450             :                 __entry->inactive = inactive;
     451             :                 __entry->total_active = total_active;
     452             :                 __entry->active = active;
     453             :                 __entry->ratio = ratio;
     454             :                 __entry->reclaim_flags = trace_reclaim_flags(file) &
     455             :                                          RECLAIM_WB_LRU;
     456             :         ),
     457             : 
     458             :         TP_printk("nid=%d reclaim_idx=%d total_inactive=%ld inactive=%ld total_active=%ld active=%ld ratio=%ld flags=%s",
     459             :                 __entry->nid,
     460             :                 __entry->reclaim_idx,
     461             :                 __entry->total_inactive, __entry->inactive,
     462             :                 __entry->total_active, __entry->active,
     463             :                 __entry->ratio,
     464             :                 show_reclaim_flags(__entry->reclaim_flags))
     465             : );
     466             : 
     467           0 : TRACE_EVENT(mm_vmscan_node_reclaim_begin,
     468             : 
     469             :         TP_PROTO(int nid, int order, gfp_t gfp_flags),
     470             : 
     471             :         TP_ARGS(nid, order, gfp_flags),
     472             : 
     473             :         TP_STRUCT__entry(
     474             :                 __field(int, nid)
     475             :                 __field(int, order)
     476             :                 __field(gfp_t, gfp_flags)
     477             :         ),
     478             : 
     479             :         TP_fast_assign(
     480             :                 __entry->nid = nid;
     481             :                 __entry->order = order;
     482             :                 __entry->gfp_flags = gfp_flags;
     483             :         ),
     484             : 
     485             :         TP_printk("nid=%d order=%d gfp_flags=%s",
     486             :                 __entry->nid,
     487             :                 __entry->order,
     488             :                 show_gfp_flags(__entry->gfp_flags))
     489             : );
     490             : 
     491           0 : DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_node_reclaim_end,
     492             : 
     493             :         TP_PROTO(unsigned long nr_reclaimed),
     494             : 
     495             :         TP_ARGS(nr_reclaimed)
     496             : );
     497             : 
     498             : #endif /* _TRACE_VMSCAN_H */
     499             : 
     500             : /* This part must be outside protection */
     501             : #include <trace/define_trace.h>

Generated by: LCOV version 1.14