Unverified Commit 82db6dea authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!7182 v3 mm: mglru: reuse some legacy trace

Merge Pull Request from: @ci-robot 
 
PR sync from: Zhao Mengmeng <zhaomengmeng@kylinos.cn>
https://mailweb.openeuler.org/hyperkitty/list/kernel@openeuler.org/message/72Q5MNP4UE4YAZGRZFNR5QZR34VWEFZ4/ 
Backport upstream mglru patch to reuse some trace events, along with
trace-vmscan-postprocess parsing and output fixes.

Jaewon Kim (1):
  mm: multi-gen LRU: reuse some legacy trace events

Vlastimil Babka (2):
  trace-vmscan-postprocess: sync with tracepoints updates
  mm, vmscan: remove ISOLATE_UNMAPPED


-- 
2.33.0
 
https://gitee.com/openeuler/kernel/issues/I9O1OT 
 
Link:https://gitee.com/openeuler/kernel/pulls/7182

 

Reviewed-by: default avatarKefeng Wang <wangkefeng.wang@huawei.com>
Signed-off-by: default avatarZhang Peng <zhangpeng362@huawei.com>
parents 71033ce6 d35d3005
Loading
Loading
Loading
Loading
+18 −24
Original line number Diff line number Diff line
@@ -107,14 +107,14 @@ GetOptions(
);

# Defaults for dynamically discovered regex's
my $regex_direct_begin_default = 'order=([0-9]*) may_writepage=([0-9]*) gfp_flags=([A-Z_|]*)';
my $regex_direct_begin_default = 'order=([0-9]*) gfp_flags=([A-Z_|]*)';
my $regex_direct_end_default = 'nr_reclaimed=([0-9]*)';
my $regex_kswapd_wake_default = 'nid=([0-9]*) order=([0-9]*)';
my $regex_kswapd_sleep_default = 'nid=([0-9]*)';
my $regex_wakeup_kswapd_default = 'nid=([0-9]*) zid=([0-9]*) order=([0-9]*) gfp_flags=([A-Z_|]*)';
my $regex_lru_isolate_default = 'isolate_mode=([0-9]*) classzone_idx=([0-9]*) order=([0-9]*) nr_requested=([0-9]*) nr_scanned=([0-9]*) nr_skipped=([0-9]*) nr_taken=([0-9]*) lru=([a-z_]*)';
my $regex_wakeup_kswapd_default = 'nid=([0-9]*) order=([0-9]*) gfp_flags=([A-Z_|]*)';
my $regex_lru_isolate_default = 'classzone=([0-9]*) order=([0-9]*) nr_requested=([0-9]*) nr_scanned=([0-9]*) nr_skipped=([0-9]*) nr_taken=([0-9]*) lru=([a-z_]*)';
my $regex_lru_shrink_inactive_default = 'nid=([0-9]*) nr_scanned=([0-9]*) nr_reclaimed=([0-9]*) nr_dirty=([0-9]*) nr_writeback=([0-9]*) nr_congested=([0-9]*) nr_immediate=([0-9]*) nr_activate_anon=([0-9]*) nr_activate_file=([0-9]*) nr_ref_keep=([0-9]*) nr_unmap_fail=([0-9]*) priority=([0-9]*) flags=([A-Z_|]*)';
my $regex_lru_shrink_active_default = 'lru=([A-Z_]*) nr_scanned=([0-9]*) nr_rotated=([0-9]*) priority=([0-9]*)';
my $regex_lru_shrink_active_default = 'lru=([A-Z_]*) nr_taken=([0-9]*) nr_active=([0-9]*) nr_deactivated=([0-9]*) nr_referenced=([0-9]*) priority=([0-9]*) flags=([A-Z_|]*)' ;
my $regex_writepage_default = 'page=([0-9a-f]*) pfn=([0-9]*) flags=([A-Z_|]*)';

# Dyanically discovered regex
@@ -184,8 +184,7 @@ sub generate_traceevent_regex {
$regex_direct_begin = generate_traceevent_regex(
			"vmscan/mm_vmscan_direct_reclaim_begin",
			$regex_direct_begin_default,
			"order", "may_writepage",
			"gfp_flags");
			"order", "gfp_flags");
$regex_direct_end = generate_traceevent_regex(
			"vmscan/mm_vmscan_direct_reclaim_end",
			$regex_direct_end_default,
@@ -201,11 +200,11 @@ $regex_kswapd_sleep = generate_traceevent_regex(
$regex_wakeup_kswapd = generate_traceevent_regex(
			"vmscan/mm_vmscan_wakeup_kswapd",
			$regex_wakeup_kswapd_default,
			"nid", "zid", "order", "gfp_flags");
			"nid", "order", "gfp_flags");
$regex_lru_isolate = generate_traceevent_regex(
			"vmscan/mm_vmscan_lru_isolate",
			$regex_lru_isolate_default,
			"isolate_mode", "classzone_idx", "order",
			"classzone", "order",
			"nr_requested", "nr_scanned", "nr_skipped", "nr_taken",
			"lru");
$regex_lru_shrink_inactive = generate_traceevent_regex(
@@ -218,11 +217,10 @@ $regex_lru_shrink_inactive = generate_traceevent_regex(
$regex_lru_shrink_active = generate_traceevent_regex(
			"vmscan/mm_vmscan_lru_shrink_active",
			$regex_lru_shrink_active_default,
			"nid", "zid",
			"lru",
			"nr_scanned", "nr_rotated", "priority");
			"nid", "nr_taken", "nr_active", "nr_deactivated", "nr_referenced",
			"priority", "flags");
$regex_writepage = generate_traceevent_regex(
			"vmscan/mm_vmscan_writepage",
			"vmscan/mm_vmscan_write_folio",
			$regex_writepage_default,
			"page", "pfn", "flags");

@@ -371,7 +369,7 @@ EVENT_PROCESS:
				print "         $regex_wakeup_kswapd\n";
				next;
			}
			my $order = $3;
			my $order = $2;
			$perprocesspid{$process_pid}->{MM_VMSCAN_WAKEUP_KSWAPD_PERORDER}[$order]++;
		} elsif ($tracepoint eq "mm_vmscan_lru_isolate") {
			$details = $6;
@@ -381,18 +379,14 @@ EVENT_PROCESS:
				print "         $regex_lru_isolate/o\n";
				next;
			}
			my $isolate_mode = $1;
			my $nr_scanned = $5;
			my $file = $8;
			my $nr_scanned = $4;
			my $lru = $7;

			# To closer match vmstat scanning statistics, only count isolate_both
			# and isolate_inactive as scanning. isolate_active is rotation
			# isolate_inactive == 1
			# isolate_active   == 2
			# isolate_both     == 3
			if ($isolate_mode != 2) {
			# To closer match vmstat scanning statistics, only count
			# inactive lru as scanning
			if ($lru =~ /inactive_/) {
				$perprocesspid{$process_pid}->{HIGH_NR_SCANNED} += $nr_scanned;
				if ($file =~ /_file/) {
				if ($lru =~ /_file/) {
					$perprocesspid{$process_pid}->{HIGH_NR_FILE_SCANNED} += $nr_scanned;
				} else {
					$perprocesspid{$process_pid}->{HIGH_NR_ANON_SCANNED} += $nr_scanned;
+0 −2
Original line number Diff line number Diff line
@@ -658,8 +658,6 @@ struct lruvec {
	KABI_RESERVE(4)
};

/* Isolate unmapped pages */
#define ISOLATE_UNMAPPED	((__force isolate_mode_t)0x2)
/* Isolate for asynchronous migration */
#define ISOLATE_ASYNC_MIGRATE	((__force isolate_mode_t)0x4)
/* Isolate unevictable pages */
+2 −6
Original line number Diff line number Diff line
@@ -285,10 +285,9 @@ TRACE_EVENT(mm_vmscan_lru_isolate,
		unsigned long nr_scanned,
		unsigned long nr_skipped,
		unsigned long nr_taken,
		isolate_mode_t isolate_mode,
		int lru),

	TP_ARGS(highest_zoneidx, order, nr_requested, nr_scanned, nr_skipped, nr_taken, isolate_mode, lru),
	TP_ARGS(highest_zoneidx, order, nr_requested, nr_scanned, nr_skipped, nr_taken, lru),

	TP_STRUCT__entry(
		__field(int, highest_zoneidx)
@@ -297,7 +296,6 @@ TRACE_EVENT(mm_vmscan_lru_isolate,
		__field(unsigned long, nr_scanned)
		__field(unsigned long, nr_skipped)
		__field(unsigned long, nr_taken)
		__field(unsigned int, isolate_mode)
		__field(int, lru)
	),

@@ -308,7 +306,6 @@ TRACE_EVENT(mm_vmscan_lru_isolate,
		__entry->nr_scanned = nr_scanned;
		__entry->nr_skipped = nr_skipped;
		__entry->nr_taken = nr_taken;
		__entry->isolate_mode = (__force unsigned int)isolate_mode;
		__entry->lru = lru;
	),

@@ -316,8 +313,7 @@ TRACE_EVENT(mm_vmscan_lru_isolate,
	 * classzone is previous name of the highest_zoneidx.
	 * Reason not to change it is the ABI requirement of the tracepoint.
	 */
	TP_printk("isolate_mode=%d classzone=%d order=%d nr_requested=%lu nr_scanned=%lu nr_skipped=%lu nr_taken=%lu lru=%s",
		__entry->isolate_mode,
	TP_printk("classzone=%d order=%d nr_requested=%lu nr_scanned=%lu nr_skipped=%lu nr_taken=%lu lru=%s",
		__entry->highest_zoneidx,
		__entry->order,
		__entry->nr_requested,
+14 −7
Original line number Diff line number Diff line
@@ -2410,8 +2410,7 @@ static unsigned long isolate_lru_folios(unsigned long nr_to_scan,
	}
	*nr_scanned = total_scan;
	trace_mm_vmscan_lru_isolate(sc->reclaim_idx, sc->order, nr_to_scan,
				    total_scan, skipped, nr_taken,
				    sc->may_unmap ? 0 : ISOLATE_UNMAPPED, lru);
				    total_scan, skipped, nr_taken, lru);
	update_lru_sizes(lruvec, lru, nr_zone_taken);
	return nr_taken;
}
@@ -5046,6 +5045,7 @@ static int scan_folios(struct lruvec *lruvec, struct scan_control *sc,
	int sorted = 0;
	int scanned = 0;
	int isolated = 0;
	int skipped = 0;
	int remaining = MAX_LRU_BATCH;
	struct lru_gen_folio *lrugen = &lruvec->lrugen;
	struct mem_cgroup *memcg = lruvec_memcg(lruvec);
@@ -5059,7 +5059,7 @@ static int scan_folios(struct lruvec *lruvec, struct scan_control *sc,

	for (i = MAX_NR_ZONES; i > 0; i--) {
		LIST_HEAD(moved);
		int skipped = 0;
		int skipped_zone = 0;
		int zone = (sc->reclaim_idx + i) % MAX_NR_ZONES;
		struct list_head *head = &lrugen->folios[gen][type][zone];

@@ -5081,16 +5081,17 @@ static int scan_folios(struct lruvec *lruvec, struct scan_control *sc,
				isolated += delta;
			} else {
				list_move(&folio->lru, &moved);
				skipped += delta;
				skipped_zone += delta;
			}

			if (!--remaining || max(isolated, skipped) >= MIN_LRU_BATCH)
			if (!--remaining || max(isolated, skipped_zone) >= MIN_LRU_BATCH)
				break;
		}

		if (skipped) {
		if (skipped_zone) {
			list_splice(&moved, head);
			__count_zid_vm_events(PGSCAN_SKIP, zone, skipped);
			__count_zid_vm_events(PGSCAN_SKIP, zone, skipped_zone);
			skipped += skipped_zone;
		}

		if (!remaining || isolated >= MIN_LRU_BATCH)
@@ -5105,6 +5106,9 @@ static int scan_folios(struct lruvec *lruvec, struct scan_control *sc,
	__count_memcg_events(memcg, item, isolated);
	__count_memcg_events(memcg, PGREFILL, sorted);
	__count_vm_events(PGSCAN_ANON + type, isolated);
	trace_mm_vmscan_lru_isolate(sc->reclaim_idx, sc->order, MAX_LRU_BATCH,
				scanned, skipped, isolated,
				type ? LRU_INACTIVE_FILE : LRU_INACTIVE_ANON);

	/*
	 * There might not be eligible folios due to reclaim_idx. Check the
@@ -5235,6 +5239,9 @@ static int evict_folios(struct lruvec *lruvec, struct scan_control *sc, int swap
retry:
	reclaimed = shrink_folio_list(&list, pgdat, sc, &stat, false);
	sc->nr_reclaimed += reclaimed;
	trace_mm_vmscan_lru_shrink_inactive(pgdat->node_id,
			scanned, reclaimed, &stat, sc->priority,
			type ? LRU_INACTIVE_FILE : LRU_INACTIVE_ANON);

	list_for_each_entry_safe_reverse(folio, next, &list, lru) {
		if (!folio_evictable(folio)) {