The "pgsteal" stat is confusing because it counts both direct reclaim as well as background reclaim. However, we have "kswapd_steal" which also counts background reclaim value. This patch fixes it and also makes it match the existng "pgscan_" stats. Test: pgsteal_kswapd_dma32 447623 pgsteal_kswapd_normal 42272677 pgsteal_kswapd_movable 0 pgsteal_direct_dma32 2801 pgsteal_direct_normal 44353270 pgsteal_direct_movable 0
Unified · Split
| @@ -26,13 +26,14 @@ enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT, · 25 unmodified lines | ||
| 26 | 26 | PGFREE, PGACTIVATE, PGDEACTIVATE, |
| 27 | 27 | PGFAULT, PGMAJFAULT, |
| 28 | 28 | FOR_ALL_ZONES(PGREFILL), |
| 29 | − FOR_ALL_ZONES(PGSTEAL), | |
| 29 | + FOR_ALL_ZONES(PGSTEAL_KSWAPD), | |
| 30 | + FOR_ALL_ZONES(PGSTEAL_DIRECT), | |
| 30 | 31 | FOR_ALL_ZONES(PGSCAN_KSWAPD), |
| 31 | 32 | FOR_ALL_ZONES(PGSCAN_DIRECT), |
| 32 | 33 | #ifdef CONFIG_NUMA |
| 33 | 34 | PGSCAN_ZONE_RECLAIM_FAILED, |
| 34 | 35 | #endif |
| 35 | − PGINODESTEAL, SLABS_SCANNED, KSWAPD_STEAL, KSWAPD_INODESTEAL, | |
| 36 | + PGINODESTEAL, SLABS_SCANNED, KSWAPD_INODESTEAL, | |
| 36 | 37 | KSWAPD_LOW_WMARK_HIT_QUICKLY, KSWAPD_HIGH_WMARK_HIT_QUICKLY, |
| 37 | 38 | KSWAPD_SKIP_CONGESTION_WAIT, |
| 38 | 39 | PAGEOUTRUN, ALLOCSTALL, PGROTATED, |
| @@ -1568,9 +1568,14 @@ shrink_inactive_list(unsigned long nr_to_scan, struct mem_cgroup_zone *mz, · 1567 unmodified lines | ||
| 1568 | 1568 | reclaim_stat->recent_scanned[0] += nr_anon; |
| 1569 | 1569 | reclaim_stat->recent_scanned[1] += nr_file; |
| 1570 | 1570 | |
| 1571 | − if (current_is_kswapd()) | |
| 1572 | − __count_vm_events(KSWAPD_STEAL, nr_reclaimed); | |
| 1573 | − __count_zone_vm_events(PGSTEAL, zone, nr_reclaimed); | |
| 1571 | + if (global_reclaim(sc)) { | |
| 1572 | + if (current_is_kswapd()) | |
| 1573 | + __count_zone_vm_events(PGSTEAL_KSWAPD, zone, | |
| 1574 | + nr_reclaimed); | |
| 1575 | + else | |
| 1576 | + __count_zone_vm_events(PGSTEAL_DIRECT, zone, | |
| 1577 | + nr_reclaimed); | |
| 1578 | + } | |
| 1574 | 1579 | |
| 1575 | 1580 | putback_inactive_pages(mz, &page_list); |
| 1576 | 1581 | |
| @@ -738,7 +738,8 @@ const char * const vmstat_text[] = { · 737 unmodified lines | ||
| 738 | 738 | "pgmajfault", |
| 739 | 739 | |
| 740 | 740 | TEXTS_FOR_ZONES("pgrefill") |
| 741 | − TEXTS_FOR_ZONES("pgsteal") | |
| 741 | + TEXTS_FOR_ZONES("pgsteal_kswapd") | |
| 742 | + TEXTS_FOR_ZONES("pgsteal_direct") | |
| 742 | 743 | TEXTS_FOR_ZONES("pgscan_kswapd") |
| 743 | 744 | TEXTS_FOR_ZONES("pgscan_direct") |
| 744 | 745 | |
| @@ -747,7 +748,6 @@ const char * const vmstat_text[] = { · 2 unmodified lines | ||
| 747 | 748 | #endif |
| 748 | 749 | "pginodesteal", |
| 749 | 750 | "slabs_scanned", |
| 750 | − "kswapd_steal", | |
| 751 | 751 | "kswapd_inodesteal", |
| 752 | 752 | "kswapd_low_wmark_hit_quickly", |
| 753 | 753 | "kswapd_high_wmark_hit_quickly", |