利用Oprofile对多核多线程进行性能分析.docx
文本预览下载声明
利用Oprofile对多核多线程进行性能分析
在对应用程序不断调优的过程中,除了制定完备的测试基准(Benchmark)外,还需要一把直中要害的利器——性能分析工具。
?
根据工具的复杂度和所提供的功能,可以将性能工具分为两个层次:
?
基本的计时工具
在普通生活中,秒表是最简单的计时工具。根据该思想,可以将计时函数放在代码的任意位置并多次调用,这样就可以测量出整个应用或者某一部分的运行时间。这种分析方法不够精细,误差大。
?
软件分析工具
目前,主要有两种不同类型的软件分析工具:采样和插桩。
?
?? 采样型分析工具
主要通过周期性中断,来纪录相关的性能信息,如处理器指令指针、线程id、处理器id和事件计数器等。这种方法开销小,精确度高。在Linux系统中,比较常见的有Oprofile和Intel VTune性能分析器等。
?
?? 插桩型分析工具
即可以使用直接的二进制插桩,也可以通过编译器在应用中插入分析代码。这种方式与自己在应用中增加计时函数类似,同时带来的开销大,但提供了更多的功能,如调用树,调用次数和函数开销等。在Linux系统中,比较常见的有gprof和Intel VTune性能分析器等。
?
本文将利用采样型工具Oprofile,对多核多线程程序进行性能分析,起一个抛砖引玉的作用。
衡量性能收益的方法
随着科学技术的不断发展,计算机系统结构朝着多核的方向发展,从而将并发编程推到了聚光灯下,但如何去衡量并行程序设计所带来的性能收益呢?
?
不得不想起1967年Gene Amdahl所做出的杰出贡献,他提出的Amdahl定律能够计算出并行程序相对于最优串行算法在性能提升上的理论最大值。
?
Amdahl定律
1
加速比=————————
S+(1-S)/n+H(n)
?
其中, S 表示执行程序中串行部分的比例, n 表示处理器核的数量, H(n)表示系统开销。
?
由于Amdahl定律本身做出了几个假设,但这些假设在现实世界中又不一定是正确的,因此使计算机界心灰意冷了很多年,认为根据Amdahl定律,开发更大的并行性所带来的性能收益可能是微不足道的,一直到Gustafson定律的出现,才改变了现状。
?
在Sandia实验室工作的基础上,E.Barsis提出了Gustafson定律:
?
扩展加速比=N+(1-N)*S
?
其中, S 表示执行程序中串行部分的比例,N 表示处理器核的数量。
?
幸运的是,Shi于1996年证明Gustafson定律和Amdahl定律是等效的。
Oprofile工作原理简介
根据CPU系统结构的不同, Oprofile支持两种采样方式:基于事件(Event Based)的采样和基于时间(Time Based)的采样。
?
如果CPU内部存在性能计数寄存器,则Oprofile基于事件采样,记录特定事件(如分支预测事件)发生的次数,当达到设定的定值时就采样一次。反之,则基于时间采样,主要是借助于操作系统的时钟中断机制,每当时钟中断发生时就采样一次。不难看出,基于时间的采样方式,要求被测程序不能屏蔽中断,其精度也低于事件采样。
?
对于x86体系结构,不同型号的CPU,采样方式也不同,具体细节如下表所示:
?
处理器
CPU_TYPE
采样方式
Athlon
i386/athlon
Event Based
Pentium Pro
i386/ppro
Event Based
Pentium II
i386/pii
Event Based
Pentium III
i386/piii
Event Based
Pentium M (P6 core)
i386/p6_mobile
Event Based
Pentium 4 (non-HT)
i386/p4
Event Based
Pentium 4 (HT)
i386/p4-ht
Event Based
Dual Core
timer
Time Based
Core 2 Duo
timer
Time Based
表一 x86各处理器采样方式
Oprofile主要分为两部分,其中一部分是内核模块(oprofile.ko),另外一部分是用户空间的守护进程(oprofiled)。前者主要负责访问性能计数寄存器或者注册基于时间采样的函数,并将采样结果置于内核的缓冲区中。后者在后台运行,负责从内核空间
显示全部