perf 统计缺页中断 和TLB miss

perf 统计 内存相关event

perf 可探测 的所有 event ,均可以使用命令perf list获得。

本文举几个和内存相关的性能的几个event例子

探测 进程 的缺页中断数(page fault)

perf stat -e faults ./mem
能够统计 ./mem 执行 周期内,引发的 缺页中断数。

Performance counter stats for './mem':

           100,126      faults                                                      

       0.203315268 seconds time elapsed

探测正在运行的进程,则使用
perf stat -e faults -p $PID运行,命令掐断后,打印出命令开始到命令结束时,目标进程的缺页中断数。

可以 使用 perf record来探测 指定 event 的热点函数,例如
perf record -e faults ./mem

使用
perf report
输出结果。

Samples: 655  of event 'faults', Event count (approx.): 100151                                                                               
Overhead  Command  Shared Object     Symbol                                                                                                  
  99.57%  mem      mem               [.] func
   0.35%  mem      ld-2.17.so        [.] _dl_lookup_symbol_x
   0.06%  mem      ld-2.17.so        [.] _dl_important_hwcaps
   0.01%  mem      ld-2.17.so        [.] _dl_start
   0.00%  mem      ld-2.17.so        [.] _start
   0.00%  mem      [kernel.vmlinux]  [k] __clear_user
   0.00%  mem      [kernel.vmlinux]  [k] copy_user_enhanced_fast_string

原理
在内核缺页中断处,有perf的钩子,用于统计缺页中断的次数:

perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);

内核源码中搜索 PERF_COUNT_SW_PAGE_FAULTS即可。

探测 进程 TLB相关event

perf stat -e dTLB-loads,dTLB-load-misses,iTLB-loads,iTLB-load-misses,L1-icache-load-misses ./mem
或者指定进程id进行探测
perf stat -e dTLB-loads,dTLB-load-misses,iTLB-loads,iTLB-load-misses,L1-icache-load-misses -p $PID

$perf stat -e dTLB-loads,dTLB-load-misses,iTLB-loads,iTLB-load-misses,L1-icache-load-misses ./mem

 Performance counter stats for './mem':

        89,946,326      dTLB-loads                                                    (80.09%)
            17,030      dTLB-load-misses          #    0.02% of all dTLB cache hits   (40.47%)
                10      iTLB-loads                                                    (39.96%)
               137      iTLB-load-misses          #  1370.00% of all iTLB cache hits   (59.80%)
            98,113      L1-icache-load-misses                                         (79.65%)

       0.201743107 seconds time elapsed

因为是 硬件event,所以不同的CPU架构,这些值代表的不一样。一样的是,dTLB代表了数据的TLB统计,iTLB代表的是指令的TLB统计。

相关 参考文档:http://web.eece.maine.edu/~vweaver/projects/perf_events/perf_event_open.html

你可能感兴趣的:(Liunx内核)