mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	bpftool: Add {i,d}tlb_misses support for bpftool profile
Commit 47c09d6a9f67("bpftool: Introduce "prog profile" command")
introduced "bpftool prog profile" command which can be used
to profile bpf program with metrics like # of instructions,
This patch added support for itlb_misses and dtlb_misses.
During an internal bpf program performance evaluation,
I found these two metrics are also very useful. The following
is an example output:
 $ bpftool prog profile id 324 duration 3 cycles itlb_misses
           1885029 run_cnt
        5134686073 cycles
            306893 itlb_misses
 $ bpftool prog profile id 324 duration 3 cycles dtlb_misses
           1827382 run_cnt
        4943593648 cycles
           5975636 dtlb_misses
 $ bpftool prog profile id 324 duration 3 cycles llc_misses
           1836527 run_cnt
        5019612972 cycles
           4161041 llc_misses
From the above, we can see quite some dtlb misses, 3 dtlb misses
perf prog run. This might be something worth further investigation.
Signed-off-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Song Liu <songliubraving@fb.com>
Link: https://lore.kernel.org/bpf/20201119073039.4060095-1-yhs@fb.com
			
			
This commit is contained in:
		
							parent
							
								
									4e99d115d8
								
							
						
					
					
						commit
						450d060e8f
					
				
					 1 changed files with 29 additions and 1 deletions
				
			
		| 
						 | 
					@ -1717,6 +1717,34 @@ struct profile_metric {
 | 
				
			||||||
		.ratio_desc = "LLC misses per million insns",
 | 
							.ratio_desc = "LLC misses per million insns",
 | 
				
			||||||
		.ratio_mul = 1e6,
 | 
							.ratio_mul = 1e6,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							.name = "itlb_misses",
 | 
				
			||||||
 | 
							.attr = {
 | 
				
			||||||
 | 
								.type = PERF_TYPE_HW_CACHE,
 | 
				
			||||||
 | 
								.config =
 | 
				
			||||||
 | 
									PERF_COUNT_HW_CACHE_ITLB |
 | 
				
			||||||
 | 
									(PERF_COUNT_HW_CACHE_OP_READ << 8) |
 | 
				
			||||||
 | 
									(PERF_COUNT_HW_CACHE_RESULT_MISS << 16),
 | 
				
			||||||
 | 
								.exclude_user = 1
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							.ratio_metric = 2,
 | 
				
			||||||
 | 
							.ratio_desc = "itlb misses per million insns",
 | 
				
			||||||
 | 
							.ratio_mul = 1e6,
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							.name = "dtlb_misses",
 | 
				
			||||||
 | 
							.attr = {
 | 
				
			||||||
 | 
								.type = PERF_TYPE_HW_CACHE,
 | 
				
			||||||
 | 
								.config =
 | 
				
			||||||
 | 
									PERF_COUNT_HW_CACHE_DTLB |
 | 
				
			||||||
 | 
									(PERF_COUNT_HW_CACHE_OP_READ << 8) |
 | 
				
			||||||
 | 
									(PERF_COUNT_HW_CACHE_RESULT_MISS << 16),
 | 
				
			||||||
 | 
								.exclude_user = 1
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							.ratio_metric = 2,
 | 
				
			||||||
 | 
							.ratio_desc = "dtlb misses per million insns",
 | 
				
			||||||
 | 
							.ratio_mul = 1e6,
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static __u64 profile_total_count;
 | 
					static __u64 profile_total_count;
 | 
				
			||||||
| 
						 | 
					@ -2109,7 +2137,7 @@ static int do_help(int argc, char **argv)
 | 
				
			||||||
		"                 struct_ops | fentry | fexit | freplace | sk_lookup }\n"
 | 
							"                 struct_ops | fentry | fexit | freplace | sk_lookup }\n"
 | 
				
			||||||
		"       ATTACH_TYPE := { msg_verdict | stream_verdict | stream_parser |\n"
 | 
							"       ATTACH_TYPE := { msg_verdict | stream_verdict | stream_parser |\n"
 | 
				
			||||||
		"                        flow_dissector }\n"
 | 
							"                        flow_dissector }\n"
 | 
				
			||||||
		"       METRIC := { cycles | instructions | l1d_loads | llc_misses }\n"
 | 
							"       METRIC := { cycles | instructions | l1d_loads | llc_misses | itlb_misses | dtlb_misses }\n"
 | 
				
			||||||
		"       " HELP_SPEC_OPTIONS "\n"
 | 
							"       " HELP_SPEC_OPTIONS "\n"
 | 
				
			||||||
		"",
 | 
							"",
 | 
				
			||||||
		bin_name, argv[-2]);
 | 
							bin_name, argv[-2]);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue