perf uncore PEBS

About perf

从2.6.31版本开始,linux内核开始提供了一个正式接口来管理硬件计数器,这个接口就是通过系统调用“perf_event_open” , 同时内核还提供了一个用户层次的工具来利用这个接口,也就是perf。


perf有两种可用的模式:计数和采样。

计数简单的在整个程序执行的过程中测量发生的事件数目而不会考虑到底是哪些指令或者是哪些函数造成了这些事件的产生。


另一方面,采样通过IP指令指针给出了这个事件的发生和代码本身之间的关系。在采样的过程中,内核告诉CPU上面的PMU,如何选定的事件计数器超过阀值,CPU就发出一个中断,内核捕捉这个中断,然后把采样的数据,包括IP值,存到ring buffer中。这个buffer会由用户空间定义的perf工具来周期性的轮询,并且把它的内容写入到磁盘中。在后续处理中,IP指针会和二进制文件进行映射,从而确定是哪个函数名产生。


About pmu-tools

pmu-tools是一个在perf上面构建的能够提供很多intel特殊的采样功能的工具集。

它并不会替代传统的perf,而是对它做了一些扩展,或者做了一些wrapper从而可以更直接的使用perf。

pmu-tools的下载地址是http://github.com/andikleen/pmu-tools


## pebs-grabber:
perf并没有输出PEBS的输出,而这个PEBS的输出其实包含了很多有用的信息。

pebs-grabber从perf中提取PEBS数据,同时这里假设perf的pebs handler已经在运行。我们同时也对这些PEBS数据做trace point。

我们可能需要对内核接口做一些修改,并且在非常老的内核上可能运行的并不好。


下面的程序会创建两个新的trace point。一个是trace_pebs_v1另一个是trace_pebs_v2这会log完整的PEBS record。当CPU支持PEBSv2时【haswell微架构】会有另外的域被pebs_v2记录。

	  make [KDIR=/my/kernel/build/dir]
	  insmod pebs-grabber.ko 
	  # needs to record as root
	  perf record -e cycles:p,pebs_v1,pebs_v2 [command, -a for all etc.]
	  perf report
	  perf script to display pebs data
	  # alternatively trace-cmd and kernelshark can be also used to dump
   	  # the pebs data


引用:

【1】The overhead of profiling using PMU hardware counters

【2】 http://lwn.net/Articles/556983/



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值