vim ./arch/x86/kernel/hw_breakpoint.c
perf如何控制采样的频率
perf采样不同的事件,得到的不是一样
cycles:
向PMU中增加不同的函数,增加不同
使用perf默认的事件,抓不到我的用户态进程,
cpu-cycles会抓到这个事件
相同的事件,不同的采样频率采样到的内容也不是一样的。
sudo perf top -c 99 -C 1 能够抓到我的loop进程
sudo perf top -C 1 抓不到我loop进程的是
终于让我找到了pmu的处理函数:intel_pmu_handle_irq
我这里设置成了 -c 99,发现每隔4ms就会触发一个intel_pmu_handle_irq的中断
设置成-c 200的时候,发现每隔4ms会出发intel_pmu中断,但是很奇怪的是,在这个4ms之内,会yo两次设置
设置成-c 300,还是每4ms会出发一次intel——pum-handle-irq
设置成 -c 400/500,都是每4ms会出发一次intel_pmu_handle_irq的中断,感觉这是
如果不设置的话,精度是每2us来一次中断,但是设置成-c 10,就还是4ms来进行一次了,但是
我在CPU1上跑了一个loop进程,应该说是能占满CPU的,但是这个CPU,按perf抓的话也应该是全量抓这个loop进程的CPU才对的,但是现在现在抓到了大量的native_sched_lock/ nmi_handler/ do_nmi /nmi / sched_lockzhe,记得之前是有大量抓到我loop进程中的函数的呢。。。。
native_write_msr_safe
把事件设置成cycles就能抓到了,默认的事件是cycles:pp