什么时候在linux perf中过滤函数详细信息



使用linuxperf使用intel_pt事件记录跟踪时,可以过滤特定函数(func1(跟踪。

perf record -e intel_pt/branch_type=call/u --filter ' filter func1 @ a.out ' -- ./a.out

另一种方法可能是:

perf record -e intel_pt/branch_type=call/u -T --switch-events -- ./a.out

然后是

perf script --itrace -c | grep 'func1'

CCD_ 3以仅选择作为函数调用的那些分支。

我的问题是,第一种方法记录的时间戳的准确性是否比第二种方法更好?

第一种方法专门过滤并记录特定的函数跟踪,而第二种方法则记录所有跟踪。

这是不可能的,因为第一种方法在记录跟踪时需要更多的处理(在线过滤开销(,而在第二种方法中,所有的过滤都是离线的。

理论上,过滤可以在不同级别进行:在硬件、操作系统内核或用户空间代码中。对于最新版本的英特尔处理器跟踪(Intel_pt(,过滤由硬件跟踪PMU单元完成:

性能记录的手册

--filter=<filter>
Event filter. This option should follow an event selector (-e)
which selects either tracepoint event(s) or a hardware trace PMU
(e.g. Intel PT or CoreSight).  ...
·   address filters
A hardware trace PMU advertises its ability to accept a number of
address filters by specifying a non-zero value in
/sys/bus/event_source/devices/<pmu>/nr_addr_filters.
Address filters have the format:
filter|start|stop|tracestop <start> [/ <size>] [@<file name>]
Where:
- 'filter': defines a region that will be traced.

所以,第一种方法在跟踪日志大小方面更好。它只为func1函数的EIP地址范围生成跟踪输出,硬件不会为其他地址生成跟踪日志包。第二种方法是完全跟踪,它应该为执行的每个调用每秒生成数百兆字节。

滤波器处理是在硬件中完成的,因此没有巨大的开销。我认为跟踪硬件不会为执行过滤地址范围之外的代码产生任何开销,并且会为执行过滤(必需(范围内的代码产生1-5%的开销。

http://halobates.de/blog/p/406给出了硬件描述的链接intel sdm vol 3第35章intel处理器跟踪";35.2.4.3"IP过滤";(表35-6中有4个硬件滤波范围寄存器。IA32_RTIT_CTL MSR,因此最多可以定义4个地址范围(

如果CPUID,则支持通过IP可配置筛选生成跟踪数据包。(EAX=14H,ECX=0(:EBX[位2]=1。Intel PT可以配置为仅当处理器在特定IP范围内执行代码时,才允许生成包含体系结构状态的数据包。如果IP在这些范围之外,则会阻止某些数据包的生成。。。当ADDRn_CFG设置为启用IP筛选时(请参阅第35.3.1节(,当看到目标地址在ADDRn范围内的已采取分支或事件时,将开始跟踪。。。注意,一些分组,例如MTC(第35.3.7节(和其他定时分组,不依赖于FilterEn。

35.2.5.5 Filter Enable(FilterEn(Filter Enable表示指令指针(IP(在Intel PT配置为监视的IP范围内。。。当FilterEn为0时,不生成控制流数据包(例如,TNT、TIP(。然而,在FilterEn被清除时,仍然可以生成一些分组,例如PIP、MTC和PSB。

对于确切的时间戳,您应该正确配置intel_pt选项。intel_pt跟踪模式下的时间戳由硬件生成,如在perfrecord intel_pt选项中配置的那样。perf intel pt的Manpage表示,有tsc、mtc、cyc选项可以获得时间戳

tsc Always supported. Produces TSC timestamp packets to provide
timing information.  ...

mtc Produces MTC timing packets.
MTC packets provide finer grain timestamp information than TSC
packets.  MTC packets record time using the hardware crystal
clock (CTC) which is related to TSC packets using a TMA packet.
Support for this feature is indicated by:
/sys/bus/event_source/devices/intel_pt/caps/mtc
which contains "1" if the feature is supported and
"0" otherwise.
The frequency of MTC packets can also be specified - see
mtc_period below.

cyc Produces CYC timing packets.
CYC packets provide even finer grain timestamp information than
MTC and TSC packets.  A CYC packet contains the number of CPU
cycles since the last CYC packet. Unlike MTC and TSC packets,
CYC packets are only sent when another packet is also sent.

最新更新