mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-26 00:21:17 +00:00
mm, compaction: add vmstats for kcompactd work
A "compact_daemon_wake" vmstat exists that represents the number of times kcompactd has woken up. This doesn't represent how much work it actually did, though. It's useful to understand how much compaction work is being done by kcompactd versus other methods such as direct compaction and explicitly triggered per-node (or system) compaction. This adds two new vmstats: "compact_daemon_migrate_scanned" and "compact_daemon_free_scanned" to represent the number of pages kcompactd has scanned as part of its migration scanner and freeing scanner, respectively. These values are still accounted for in the general "compact_migrate_scanned" and "compact_free_scanned" for compatibility. It could be argued that explicitly triggered compaction could also be tracked separately, and that could be added if others find it useful. Link: http://lkml.kernel.org/r/alpine.DEB.2.10.1612071749390.69852@chino.kir.corp.google.com Signed-off-by: David Rientjes <rientjes@google.com> Acked-by: Vlastimil Babka <vbabka@suse.cz> Cc: Michal Hocko <mhocko@kernel.org> Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
e57b9d8c5a
commit
7f354a548d
4 changed files with 24 additions and 3 deletions
|
@ -548,7 +548,7 @@ isolate_fail:
|
|||
if (blockpfn == end_pfn)
|
||||
update_pageblock_skip(cc, valid_page, total_isolated, false);
|
||||
|
||||
count_compact_events(COMPACTFREE_SCANNED, nr_scanned);
|
||||
cc->total_free_scanned += nr_scanned;
|
||||
if (total_isolated)
|
||||
count_compact_events(COMPACTISOLATED, total_isolated);
|
||||
return total_isolated;
|
||||
|
@ -931,7 +931,7 @@ isolate_fail:
|
|||
trace_mm_compaction_isolate_migratepages(start_pfn, low_pfn,
|
||||
nr_scanned, nr_isolated);
|
||||
|
||||
count_compact_events(COMPACTMIGRATE_SCANNED, nr_scanned);
|
||||
cc->total_migrate_scanned += nr_scanned;
|
||||
if (nr_isolated)
|
||||
count_compact_events(COMPACTISOLATED, nr_isolated);
|
||||
|
||||
|
@ -1631,6 +1631,9 @@ out:
|
|||
zone->compact_cached_free_pfn = free_pfn;
|
||||
}
|
||||
|
||||
count_compact_events(COMPACTMIGRATE_SCANNED, cc->total_migrate_scanned);
|
||||
count_compact_events(COMPACTFREE_SCANNED, cc->total_free_scanned);
|
||||
|
||||
trace_mm_compaction_end(start_pfn, cc->migrate_pfn,
|
||||
cc->free_pfn, end_pfn, sync, ret);
|
||||
|
||||
|
@ -1645,6 +1648,8 @@ static enum compact_result compact_zone_order(struct zone *zone, int order,
|
|||
struct compact_control cc = {
|
||||
.nr_freepages = 0,
|
||||
.nr_migratepages = 0,
|
||||
.total_migrate_scanned = 0,
|
||||
.total_free_scanned = 0,
|
||||
.order = order,
|
||||
.gfp_mask = gfp_mask,
|
||||
.zone = zone,
|
||||
|
@ -1757,6 +1762,8 @@ static void compact_node(int nid)
|
|||
struct zone *zone;
|
||||
struct compact_control cc = {
|
||||
.order = -1,
|
||||
.total_migrate_scanned = 0,
|
||||
.total_free_scanned = 0,
|
||||
.mode = MIGRATE_SYNC,
|
||||
.ignore_skip_hint = true,
|
||||
.whole_zone = true,
|
||||
|
@ -1883,6 +1890,8 @@ static void kcompactd_do_work(pg_data_t *pgdat)
|
|||
struct zone *zone;
|
||||
struct compact_control cc = {
|
||||
.order = pgdat->kcompactd_max_order,
|
||||
.total_migrate_scanned = 0,
|
||||
.total_free_scanned = 0,
|
||||
.classzone_idx = pgdat->kcompactd_classzone_idx,
|
||||
.mode = MIGRATE_SYNC_LIGHT,
|
||||
.ignore_skip_hint = true,
|
||||
|
@ -1891,7 +1900,7 @@ static void kcompactd_do_work(pg_data_t *pgdat)
|
|||
};
|
||||
trace_mm_compaction_kcompactd_wake(pgdat->node_id, cc.order,
|
||||
cc.classzone_idx);
|
||||
count_vm_event(KCOMPACTD_WAKE);
|
||||
count_compact_event(KCOMPACTD_WAKE);
|
||||
|
||||
for (zoneid = 0; zoneid <= cc.classzone_idx; zoneid++) {
|
||||
int status;
|
||||
|
@ -1909,6 +1918,8 @@ static void kcompactd_do_work(pg_data_t *pgdat)
|
|||
|
||||
cc.nr_freepages = 0;
|
||||
cc.nr_migratepages = 0;
|
||||
cc.total_migrate_scanned = 0;
|
||||
cc.total_free_scanned = 0;
|
||||
cc.zone = zone;
|
||||
INIT_LIST_HEAD(&cc.freepages);
|
||||
INIT_LIST_HEAD(&cc.migratepages);
|
||||
|
@ -1927,6 +1938,11 @@ static void kcompactd_do_work(pg_data_t *pgdat)
|
|||
defer_compaction(zone, cc.order);
|
||||
}
|
||||
|
||||
count_compact_events(KCOMPACTD_MIGRATE_SCANNED,
|
||||
cc.total_migrate_scanned);
|
||||
count_compact_events(KCOMPACTD_FREE_SCANNED,
|
||||
cc.total_free_scanned);
|
||||
|
||||
VM_BUG_ON(!list_empty(&cc.freepages));
|
||||
VM_BUG_ON(!list_empty(&cc.migratepages));
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue