CPU性能优化--skylake 微架构事件编码示例
Event 事件 编码 Umask 掩码值 事件掩码助记符 形貌C0H00H INST_RETIRED.ANY_P 退休的指令数量
C4H 00H BR_INST_RETIRED 退休的分支跳转指令
linux perf提供常用性能计数器的映射,可以通过映射的事件名称来访问,而不是指定Event 和Umask十六进制值。例如,branches只是BR_INST_RETIRED.ALL_BRANCHES的同义词,可以测量相同的东西,可以通过perf list查看可用的映射名称列表。
perf list
然而,linux perf 并没有为每个CPU架构的所有性能计数器提供映射,如果要找的PMC没有映射,则可以使用如下语法来收罗它。
perf stat -e cpu
此外,围绕linux perf另有一些封装工具,可以用来处理映射工作,例如oprofile和ocperf.py 下面是用法
ocperf -e uops_retired ./a.exe
性能计数器并不是在每个环境中都可以,由于访问PMC必要root权限,
5.3.3 事件多路复用和缩放
在某些情况下,我们想同事统计很多差别的事件,但是一个计数器一次只能统计一个事件。这就是为什么PMU中有多个计数器,即便云云,固定计数器和可编程技术起的数量也总是不敷用的。显然,CPU没有那么多计数器这时多路复用技术可以发挥作用了。
如果事件多余计数器,则分析工具使用时间多路复用技术使每个事件都有机会访问监控硬件。
性能事件1 第一组 PMC1 PMC2 PMC3 PMC$
性能事件2
性能事件3
性能事件4 第二组
性能事件5
性能事件6
使用多路复用技术时,一个事件不会被一直测量,只有一部分能被测量,运行竣事时,剖析工具必要根据运动时间和启动事件比来换算原始计数。
5.4 采样
接纳时最常见的分析方法,a 在调试器下运行程序 b 每10s停息一次程序 c 记录程序停止的位置。 每次捕捉新样本时,所分析程序实行都会被停止,在停止时,剖析器收集程序状态的快照,并用快照构成一个样本。针对每个样本收集的信息可能包罗在停止时实行的指令地点,寄存器状态,调用栈等,收集的样本数据存储在数据文件中,这些可以进一步用于显示调用图,程序中最耗时的部分和统计意义上重要的代码段控制流。
5.4.1 用户模式采样和基于硬件事件的采样。
即用户模式采样的基于硬件事件的采样EBS,用户模式采样是一种纯软件的方法,将代理库嵌入被分析的应用程序中。代理库为应用程序中的每个线程设置OS计时器,在计时器计时完成时,应用程序会担当到SIGPROF信号。用户模式下只能识别热点,二EBS可以用于涉及PMC的其他分析,例如对缓存未掷中的采样,TMA等。
用户模式采样的EBS产生更多的运行时开销,当使用10ms 的默认采样隔断时,用户模式采样的平均开销约为5%,采样1ms的采样隔断时,EBS的平均开销约为2%. 由于可以以更高的频率收集样本,所以通常EBS更准确。
5.4.2 寻找热点
我们可以对任何想要查看性能事件进行采样,好比想知道程序那里发生的L3缓存未掷中最多。可以对应的事件(MEM_LOAD_RETIRED.L3_MISS)进行采样。
准备工作完成后,我们开始计数并运行基准测试。必要设置统计时钟周期的PMC,计数器每个时钟周期递增一次,终极会溢出。当计数器溢出时,硬件将发起PMI,剖析工具被设置成捕捉PMI。 记录计数器溢出时CPU实行的指令,然后,将计数器重置为N并且规复基准测试实行。如今,我们会到值N,使用该值可以控制获取新终端的频率。
多次重复古城,以获取足够的样本,接下来汇总这些样本可以构成程序中热点位置的直方图,就像下面的Linux Perf record 输出所显示的那样。
用linux perf工具收集调用栈有三种可能的方法。
1 帧指针 perf record--call-graph fp 必要二进制文件在编译构建时带上 --fnoomit-frame-pointer参数。由于帧指针RBP 无须从栈中弹出所有参数就能获取调用栈,所以从前常用于调试。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]