




已阅读5页,还剩82页未读, 继续免费阅读
(计算机系统结构专业论文)多核平台上的并行程序性能调优技术与工具.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 摘要 片上多核已经成为当今处理器设计的主流。在多核时代,为了将不断增长的 片上资源转变为程序性能提升,必须充分利用处理器硬件多线程并行执行的优 势。但是,并行程序的设计是困难的,设计不好的并行程序将不能有效利用硬件 资源。从最初的串行算法到可以充分发挥硬件平台优势的高效的并行程序是一个 不断调优的过程,必须从理解程序的算法行为和硬件行为两方面入手。 p m u ( p e r f o r m a n c em o n i t o r i n gu n i t ) ,即现代处理器里集成的硬件性能计数 器,使得在以极小的额外开销和极少的对目标程序的干扰的情况下在线记录程序 运行时的微体系级事件特征成为可能。基于p m u ,我们在l i n u x 系统中实现 s m a r t ( s a m p l i n gm o n i t o r i n ga n a l y z i n ga n dr e t u n i n g ) 性能调优工具:其功能包括 ( 1 ) 支持全系统范围或者针对特定进程以事件直接计数或者抽样的方法采集程 序运行时的硬件行为特征数据,( 2 ) 借助编译技术,将采集到的性能事件数据与 程序代码位置对应起来,( 3 ) 以命令行或图形窗口形式提供用户界面。 本文的工作作为s m a r t 项目的一部分,主要工作和成果包括以下几个方 面。( 1 ) 设计了s m a r t 的整体技术方案,划分并定义了s m a r t 软件的功能模 块:将其分为运行于用户层的前端与内核态的后端,前者负责数据后期处理与显 示,后者负责底层数据采集。其中,后端进一步细分为以系统调用方式提供底层 控制的p v i e w 内核核心扩展和负责大规模数据抽样的p e n g i n e 驱动模块。( 2 ) 对 s m a r t 的实现原理进行了探讨,总结业内同类工具的工作机制,制定了s m a r t 的技术策略。( 3 ) 实现了s m a r t 后端中的p v i e w 内核核心扩展部分;在内核核 心中,为进程扩展了用于记录性能事件数据的p v i e w 上下文,提供了针对特定进 程性能监测需要的进程控制机制,实现了一个新的系统调用p v i e w 。其中,许多 技术是同类工作中首次采用的。 关键词;p m u 硬件性能计数器多线程分析性能调优 a b s t r a c t a b s t r a c t c h i pm u l t i c o r e ( c m p ) a r c h i t e c t u r eh a sb e c o m et h em a i n s t r e a mo fp r o c e s s o r d e s i g nt o d a y i nt h ee r ao fc m p , t h ek e yo ft r a n s f o r m i n gt h ei n c r e a s i n gt r a n s i s t o r si n t o p e r f o r m a n c ei m p r o v e m e n ti st ot a k et h ea d v a n t a g eo fm u l t i t h r e a d i n gp a r a l l e l i s m w h i c hi st h en a t u r eo fm u l t i c o r e s h o w e v e r , a ss h o w ni nt h ep a s td e c a d e s ,p a r a l l e l p r o g r a m m i n gi sd i f f i c u l t ,a n db a di m p l e m e n t e dp r o g r a m sc a n n o te x p l o i tt h ep o t e n t i a l o fh a r d w a r er e s o u r c e s t od e v e l o pa i lo r i g i n a ls e r i a la l g o r i t h mi n t oap a r a l l e l p r o g r a mh i g h l yc o u p l e dw i t ht h em i c r o a r c h i t e c t u r a lc h a r a c t e r i s t i c so fc m ph a r d w a r e i s a c t u a l l yap r o c e s so fp e r f o r m a n c et t m i n g ,w h i c hn e e d st ob ed o n ew i t ht h e e x p e r i e n c eo fb o t hp r o g r a mf l o wa n da c c o m p a n y i n gh a r d w a r eb e h a v i o r s p e r f o r m a n c em o n i t o r i n gu n i t ( p m u ) ,s p e c i a lu n i t sw i d e l yi n t e g r a t e di nm o d e m p r o c e s s o r sf o ra c c o u n t i n gm i c r o a r c h i t e c t u r a le v e n t s ,m a k e si tp o s s i b l et oe x t r a c tt h e d a t ao fm i c r o a r c h i t e c t u r a lc h a r a c t e r i s t i c si nt h er u n t i m eo fa p p l i c a t i o n sw i t ht r i v i a l o v e r h e a da n di n t e r f e r e n c e b a s e do np m u ,w e d e s i g n e dan e ws o f t w a r et o o ls m a r t ( s a m p l i n gm o n i t o r i n ga n a l y z i n ga n dr e t u n i n g ) f o rp r o g r a mt u n i n g i t sf u n c t i o n s i n c l u d e s ( 1 ) s u p p o r t i n ge v e n tc o u n t i n ga n ds a m p l i n gi nt h es c o p eo fb o t hs y s t e mw i d e a n df o rs p e c i f i e dp r o c e s s e s ,( 2 ) w i t ht h eh e l po fc o m p i l a t i o nt e c h n o l o g y , c o r r e l a t i n g t h ec o l l e c t e dp e r f o r m a n c ep r o f i l ed a t at ot h ep o s i t i o ni nt h ec o d e so f a p p l i c a t i o n ,a n d ( 3 ) p r o v i d i n gt h eu s e ri n t e r f a c eo fc o m m a n d l i n eo rg r a p h i c a lw i n d o wo fc o n t r o la n d d i s p l a y a sp a r to ft h es m a r t p r o j e e t ,t h ew o r ka n dc o n t r i b u t i o n so ft h i st h e s i sa r ea s f o l l o w f i r s t ,w ed e s i g n e dt h es o f t w a r ea r c h i t e c t u r eo fs m a r t , a n dd e f i n e d f u n c t i o nm o d u l e s s m a r ti sd i v i d e di n t ot w op a r t si n c l u d i n gt h eu s e r - l e v e lf r o n te n d a n dk e r n e l l e v e lb a c ke n d ,a m o n gw h i c ht h ef o r m e ri si nc h a r g eo f p o s t p r o f i l i n g d a t ap r o c e s s i n g ,i n t e r a c t i n gw i t hu s e ra n dd i s p l a yw h i l et h el a t e rc o l l e c t sd a t af r o m s y s t e ma n dh a r d w a r e f u r t h e r , t h eb a c ke n di n c l u d e sp v i e wk e m e le x t e n s i o nw h i c h p r o v i d e sa l li n t e r f a c eo fs y s t e mc a l lt oc o n t r o lt h el o w - l e v e lp m ur e l a t e da c t i o n s ,a n d p e n g i n ed r i v e rm o d u l ed e s i g n e df o rs a m p l i n gf u n c t i o na n dd u m p i n ge n o r m o u s s a m p l ed a t ai n t ou s e rs p a c e s e c o n d ,w ee l a b o r a t et h ei n t e r n a lm e c h a n i s mo fs m a r t , w h i c hi sd e c i d e db a s e do nat h o r o u g hi n v e s t i g a t i o nt oc u r r e n tr e l a t e dw o r k s ,a n d p r e s e n ts e v e r a ls i g n i f i c a n ti n n o v a t i o n s t h i r d ,t h i sw o r ki m p l e m e n t e da l lo ft h ep v i e w k e m e le x t e n s i o ni nt h es m a r tb a c ke n d i nt h el i n u xk e r n e l ,m yw o r ke x t e n d s l a b s t r a c t p r o c e s sc o n t e x t 嘶t hn e w - a d d e dp v i e wa r e a sr e c o r d i n gs t a t i s t i c a li n f o r m a t i o no fp m u , p r o v i d e sap r o c e s sc o n t r o l l i n gm e c h a n i s mf o rm o n i t o r i n gs p e c i f i e dp r o c e s s e s ,a n d a d d san e w s y s t e mc a l l :p v i e w k e yw o r d s :p e r f o r m a n c em o n i t o r i n g ,p m u ,m u l t i t h r e a d e dp r o g r a ma n a l y s i s , p e r f o r m a n c et u n i n g i v 图片目录 图片目录 图1 1i n t e l 的处理器发展历史与摩尔定律1 图1 22 0 0 5 年i n t e l 的多核处理器发展路线图2 图1 3 两种典型的c m p 结构示意图2 图2 1e b s 抽样分析的全过程示意图1 图3 1s m a r t 软件架构1 5 图3 2 系统进程视图1 8 图3 3 指定进程的线程视图1 9 图3 4 指定进程的模块视图1 9 图3 5s a m p l e s 在时间轴上的分布视图1 9 图3 6s a m l e s 在多处理器核上的分布视图2 0 图3 7 源代码视图2 0 图3 8 源代码与反汇编指令混合视图2 1 图4 1p v i e w 内核扩展部分示意图2 6 图4 2p v i e w _ c t x 数据结构1 图4 3p v i e w _ s t a t 数据结构1 图4 4 针对特定进程分析时的v i e w e r v i e w e e 关系示意图1 图4 5p v i e w 内核扩展数据结构3 l 图4 6p v i e w _ c p u c t x 数据结构3 2 图4 7p v i e w 上下文切换函数的调用链3 3 图4 8 进程底层标志位取值扩展1 图4 9 进程创建时的p v i e w 上下文继承函数链1 图4 1 0 全系统分析中的内核核心部分数据结构1 图4 1 1p v i e w 系统调用函数处理流程4 0 图4 1 2p v i e w 中的m m a p 机制4 5 图5 1 利用p v i e w 进行性能监测的流程图4 7 图5 2 全系统抽样模式下p v i e w 的调用示例l 图5 3v i e w e r 创建一个进程并对它进行性能监测的代码示例1 图5 4s e l f v i e w 模式下的p v i e w 伪代码1 图6 1 矩阵乘法原始代码5 3 v i 图片目录 图6 2 改进空间局部性后的矩阵乘法代码5 4 图6 3 改进时间和空间局部性后的矩阵乘法代码5 4 图6 4 用o p e n m p 并行化后的矩阵乘法代码5 5 图7 1 基于事件抽样的数据收集流程5 9 图7 2 抽样过程中的数据流6 0 图b 1 龙芯2 f 的性能计数相关寄存器7 0 图b 2c p u i d 机制的部分数据结构定义1 图b 3i a 3 2 一p e r f e v t s e l x 寄存器位域图7 4 图b 4i a 3 2 一f i x e d _ c t r c t r lm s r 寄存器位域7 5 图b 5m s r _ p e r fg l o b a l c t r l 寄存器位域7 6 图b 6m s r p e r fg l o b a l s t a t u s 寄存器位域一7 6 图b m s r p e r f g l o b a l o v f _ c t r l 寄存器位域7 7 表目录 表目录 表2 1 龙芯2 处理器c p o 传输指令1 0 表4 1p v i e w 系统调用中r e u q e s t 参数及其功能3 8 表b 1 龙芯2 f 性能计数器2 4 号控制域格式7 0 表b 2 龙芯2 f 性能计数器2 4 号计数使能位定义7 1 表b 3 龙芯2 f 性能计数器0 性能事件7 1 表b 4 龙芯2 f 性能计数器l 性能事件7 1 表b 5f i x e d f u n c t i o np m c o u n t e r 及其对应体系性能事件7 5 表b 6 预定义a r c h i t e c t u r a l 性能事件内部编码7 8 表b 7p e b s 事件内部编码7 8 表b 8a t r e t i r 鲫e n t 事件内部编码7 9 x 中国科学技术大学学位论文原创性声明 本人声明所呈交的学位论文,是本人在导师指导下进行研究工作所取得的成 果。除已特别加以标注和致谢的地方外,论文中不包含任何他人已经发表或撰写 过的研究成果。与我一同工作的同志对本研究所做的贡献均已在论文中作了明确 的说明。 作者签名: ! 至3 j 兰 中国科学技术大学学位论文授权使用声明 作为申请学位的条件之一,学位论文著作权拥有者授权中国科学技术大学拥 有学位论文的部分使用权,即:学校有权按有关规定向国家有关部门或机构送交 论文的复印件和电子版,允许论文被查阅和借阅,可以将学位论文编入有关数据 库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编学位论文。本人 提交的电子文档的内容和纸质论文的内容相一致。 保密的学位论文在解密后也遵守此规定。 日公开口保密( 年) 作者签名:! 习至量导师签名: 签字日期:垫! ! :篁! 三皇签字日期:釜! 旦:! :堡 第1 章绪论 1 1 研究背景 第1 章绪论 目前,片上多核( c h i pm u r i p r o e e s s o r ,c m p ) 成为处理器设计的主流。为 了将增加的处理器核转变为实际的性能提升,多线程编程方法就变得更加重要。 在并行编程实践中,如何获得实际的高性能已经超出了传统的理论分析的能力: 通过运行程序来进行在线监测的性能剖析与调优的方法就变得尤其重要。 l11 多核处理器平台的发展 在过去4 0 多年里,v l s i 工艺以接近m o o r e 定律预测的速度发展。1 9 8 0 年 代中期以来,微处理器的时钟频率提高了超过1 0 0 倍,而片上集成的晶体管容量 则增加了1 0 ,0 0 0 多倍。这两个方面技术的不断进步,开启了通用处理器性能高 速增长的时代。一方面,主频的提高可咀直接转化成处理器的性能提升;掘统计, 2 0 世纪末时钟频率提高带来的好处占总性能提升的8 0 。另一方面,晶体管集 成度的提高有效支持了处理器的结构改进,如超标量结构、分支预测技术、大容 量c a c h e 等,可以有效挖掘指令集并行性或者很好地利用数据访问局部性原理改 善存储延迟。这段时间里,以i n t e l 的p e n t i u m4 阻i n t o n ,2 0 0 1 1 和d e c 的 a l p h a 2 1 2 6 4 ( k e s s l e r , 1 9 9 9 ) ;为代表,单个处理器核的性能达到了极致。 m o o r e sl a w“9 ;,i 。,。= = :少 0 0r 。琴歹一 * , o o o ? :, o o 彤蠢纛il o , o o o ,一j ,。,。,。j 磊5 ,薪诌9 。面:? ” 图11i n t e l 的处理器发展历史与摩尔定律 尽管这些技术获得了巨大成功,但是在2 0 0 5 年左右,上述传统的手段已经 第l 章绪论 发展到了接近极限时钟频率逼近了功耗和技术允许的上限,而受限于应用本 身的指令并行度,晶体管的集成度的提高不再能有效转换成实际性能。这种背景 下,寻求更大粒度并行性的片上多核技术被主流处理器厂商认同并广泛采用。时 至今日,片上多核已经成为微处理器的发展趋势;图1 2 所示为i n t e l 公司的多核 众核发展路线图( g e e r , 2 0 0 5 ) 。 t 伽 翘2 52 0 0 72 0 2 0 ;l2 0 i 3 图1 22 8 8 5 年i n t e l 的多该处理器发辰路线图 iiii 系统总线 j e 1 r m e m o r y 豳 辱) c 私a c 有h e l i c 私a c 有h e l l c 私a c 有h e l l c 私a c 有h e i 系统总线 3 e 1 f m e m o r y 豳 图1 3 两种典型的c m p 结构示意图 在多核时代,以处理器核为单位在单个芯片上集成更多的晶体管,而不是采 用复杂的电路设计和利用大量额外的资源来对单核性能进行各种激进的优化。 图1 3 为典型的c m p 处理器系统,其中( a ) 中各个处理器核拥有完全独立的c a c h e 2 第1 章绪论 分层,( b ) 中各处理器核共享最外层c a c h e 。无论如何,它们都是完全对称的。 在c m p 中,每个执行核都可以独立地执行自己的硬件线程,同时通过共享 存储的方式来进行各线程之间的通信。要将新增加的处理器核转换成实际的性 能,需要有足够多的可以并行执行的任务,也就是说c m p 是以硬件多线程( c h i p m u l t i t h r e a d i n g ,c m t ) 的方式来提高系统性能的。对于一个特定的应用而言, 要提高其性能,关键在于将其有效地并行化。 1 1 2 多核平台上的并行编程 早在上世纪五六十年代,随着并行计算机的诞生,并行编程就已经开始发展。 在过去的5 0 年间,计算机科学家在并行编程和并行算法方面进行了大量的研究; 并且,在超级计算机中并行的方法一直都是达到高性能的主要手段。 在单个处理器核的性能不再能够显著提高,片上多核的趋势成为主流的今 天,任务级或者线程级的并行变得前所未有的重要。在c m p 中,处理器可以支 持其执行核数目的线程( 或者单线程进程) 并行执行,这是c m p 结构的最主要 特点。而对于开发者来说,多核平台上的高效编程就是利用线程级并行( t h r e a d l e v e lp a r a l l e l i s m ,t l p ) 的方法来获得程序性能的提高。目前,适合在c m p 平台 上使用的并行编程模式包括m p i 、o p e n m p 、p t h r e a d s 等;其中m p i 实现的是进 程级并行,更多的是用于传统的s m p 和c l u s t e r 系统。 但是,并行编程本身是一件很困难的事情,这里具体到c m p 环境下的线程 级并行来讨论。 首先,为了充分利用片上资源和发挥硬件潜力,必须尽可能将任务映射到分 配给它的所有处理器核上面,并使这些硬件线程在尽可能多的时间内处于有效计 算状态;这就涉及到两个要解决的问题。第一,任务划分问题,即将一个任务分 解为多个可以并行执行的子任务。我们知道,并不是个应用的所有部分都适合 并行化,而对依赖距离很短串行特征非常明显的代码部分花很大代价进行划分和 并行,并不能显著提高程序的性能;这就要求开发者必须找到程序运行中的热点 部分,对热点部分进行并行化,从而将占整个执行时间最大比例的部分分解。第 二,负载失衡问题,即有些处理器核可能处于等待或者空闲状态。为了达到负载 平衡,任务划分时既要考虑各个子任务的计算时间要基本相等,也要做到线程间 要尽可能少地互相等待从而调度到处理器核上的线程可以同时推进。 其次,要考虑线程之间的协作问题,如同步和通信。通常线程间并不是完全 独立的,存在数据或者控制依赖,因而线程的执行步调通常需要在某些点上进行 同步,而同步会引起线程之间的相互等待。一方面,应该合理调度线程执行的顺 序,使得上述等待时间尽可能被屏蔽掉;另一方面,则要仔细分析线程之间的依 第1 章绪论 赖,保证程序的正确性,认真设计线程之间的同步操作。c m p 中,线程之间通 过共享存储的方式进行通信,因此需要引进对共享变量或存储区域的访问保护, 如互斥和临界区。对这些共享变量的访问是串行化的,这是一种通信开销:为了 尽可能减少这种开销,开发者必须仔细考虑任务的划分粒度和锁的粒度问题。 第三,多线程程序本身比单线程程序要复杂得多,实现一个可靠的可扩展的 多线程程序是非常困难的。这主要是因为多线程程序中,可能发生一些非常罕见 的情形,并且存在多条可能的执行路径,同时经常与运行环境的有关。程序中的 设计问题,如死锁、数据竞争等,往往只有运行时才能发现,而且每次运行出现 的位置可能都不一样甚至被一直隐藏,从而难以定位。 另外,一个程序要在一个平台上获得高性能,不仅依赖于其算法设计,其代 码特征还必须与硬件平台相适应。大部分在单核处理器平台需要考虑的问题在 c m p 中同样适用,如循环顺序和数据局部性等。但是,在c m p 平台上,有一些 其他的和体系特征相关特别考虑。 1 1 3 并行程序剖析与性能调优技术 上- , b 节讨论了并行编程中的困难,正是这些问题使得,在多核时代,程序 剖析与性能调优技术变得比以往更刀口重要。在c m p 中,亓发者需要更加深刻地 理解线程之间的交互行为和程序微体系性能事件( 如执行周期数,指令数,c a c h e m i s s 率和分支误预测率等) 的特征,方能设计出正确而高效的多线程程序;而这 些数据的获得需要在程序的实际运行中在线监测和收集数据。两类技术被用来对 程序运行情况进行在线采集。第一类是插桩( i n s t r u m e n t a t i o n ) ( n u a n g ,1 9 7 8 , h o l l i n g s w o r t h ,1 9 9 4 ,1 9 9 6 ) ,通过在程序中静态或者动态地插入额外的代码来观察 程序的实际行为;这种方法被广泛使用来帮助开发者理解程序执行踪迹和与系统 的交互行为。另一类是基于性能事件的剖析( a h n ,2 0 0 2 ,d u e s t e r w a l d ,2 0 0 3 , s w e e n e y , 2 0 0 4 ) ,为开发者提供目标程序运行引起的微体系结构行为的特征。同 时,借助于抽样方法和编译技术,可以将这些提取出的数据特征与其在应用程序 代码中的位置相对应,帮助开发者反思程序设计本身的问题,如性能瓶颈和并行 编程中的任务划分失衡等。与插桩的方法不同,第二类方法并不涉及任何关于算 法本身的直接信息;同时大部分这类工具都是基于硬件性能计数器( p e r f o r m a n c e m o n i t o r i n gu n i t ,p m u ) ( s p r u n t ,2 0 0 2 ) 的,因而对程序本身的执行几乎不会造 成明显干扰。 基于上述两种技术,多线程程序剖析与调优工具完成的功能如下: ( 1 ) 定位应用程序的热点( h o t s p o t ) 部分,指导程序员分析热点产生的原 因和对热点部分代码进行并行化。 4 第1 章绪论 ( 2 ) 利用基于性能事件抽样( s a m p l i n g ) 的方法,将性能事件的统计数据 与指令、汇编语句、代码语句、函数模块和进程对应起来,帮助开发者理解应用 程序的微体系行为特征,从而改进代码质量等。 ( 3 ) 在时间轴上跟踪应用程序中的多线程行为,包括每个线程的实际运行 时间、交互事件、函数调用链等,从而帮助程序员发现负载不均衡、找出关键执 行路径、评估线程个数是否合适等等,消除不必要的或者位置不合理的同步、改 进关键路径线程的性能、调整线程个数到适应c m p 硬件特点( 物理核个数、存 储吞吐量、通信延迟等) 。 ( 4 ) 通过精心设计的插桩,在实际运行中,剖析多线程程序的执行路径, 探测多线程中的数据竞争、死锁等问题。 工业界的软件产品中,v t u n e ( i n t e l ,2 0 0 9 a ) 、c o d e a n a l y s t ( a m d ,2 0 0 9 ) 和s u ns t u d i o ( s u n ,2 0 0 9 a ) 具有( 1 ) 和( 2 ) 功能;t h r e a dp r o f i l e r ( i n t e l , 2 0 0 9 b ) 和s u nt h r e a da n a l y z e r ( s u n ,2 0 0 9 b ) 完成( 3 ) ,t h r e a dc h e c k e r ( i n t e l , 2 0 0 9 c ) 可以比较精确地完成( 4 ) 。 1 2 论文的研究目标和主要工作 本义的研究目标是多核平台环境下多线程程序剖析与性能调优的技术与工 具设计,主要内容是基于性能事件的程序剖析,依托于实验室s m a r t 项目。 s m a r t ,即s a m p l i n g 、m o n i t r o i n g 、a n a l y z i n ga n dr e t u n i n g ,是我们在l i n u x 操作系统上设计的一个基于p m u 的性能剖析与调优工具集,旨在帮助开发者理 解程序运行时的硬件性能事件特征,进而开发者可以分析程序的性能瓶颈并进行 改进,如算法优化和并行化。s m a r t 项目研究和实现上节中多线程调优工具功 能中的( 1 ) 、( 2 ) 以及部分( 3 ) 。 本文的主要工作如下: ( 1 ) 设计了s m a r t 的总体技术方案。 本文将s m a r t 分为前端与后端两大部分:其中前端运行于用户态,提供用 户界面;后端主体运行于内核态,与硬件打交道,负责收集底层数据。s m a r t 后端进一步分为p v i e w 内核扩展和p e n g i e 驱动模块,前者以系统调用的方式为 用户提供对底层数据采集功能的控制,后者以设备文件系统形式提供大规模抽样 数据。这种设计参考并吸取了同类工作( 尤其是o p r o f i l e 和p e r f m o n 2 ) 的优点, 在效率、模块独立性、稳定性、可扩展性方面都非常好。 ( 2 ) 实现了s m a r t 后端中的p v i e w 内核扩展。 本文完成了p v i e w 内核扩展部分的具体实现工作,详细阐述了其中的原理、 技术策略、数据结构和算法,并对其进行了评估。p v i e w 内核扩展包括t ( 1 ) 实 5 第1 章绪论 现了一个新的系统调用p v i e w ,向用户提供基于p m u 的性能监测的统一接口, ( 2 ) 同时支持全系统范围和针对特定进程( 或线程) 的性能事件直接计数和抽 样,( 3 ) 对大规模多线程程序的分析提供特别的支持。 1 3 相关工作 程序的性台目匕p - , 口, - v 。i i 析技术,可以分为两类。一类是对算法本身进行直接分析,包 括理论分析和通过实验获取程序的实际执行路径信息。另一类是通过分析应用程 序运行时的硬件微体系事件行为特征,来反思程序的代码问题,指导开发者对程 序进行调优直到能够挖掘出硬件的最佳性能;s m a r t 的工作绝大部分属于这类 方法。本节对两种方法的一些重要工作进行介绍,其中重点是后者。 1 3 1 基于算法行为的程序性能分析 应用程序的性能从根本上来讲,取决于其使用的算法;算法复杂度决定了其 理论上的运算量,因此改进算法是提高程序性能的根本手段。 但是,程序的实际性能经常取决于编码质量和运行时的输入数据集特点;这 些问题不是单纯的理论分析能够或者说容易解决的。尤其足在多线程程序中,由 于多线程协作和运行环境导致的不确定性,程序的许多行为往往在实际运行时才 能体现出来。 对应用程序进行在线剖析,一般来说需要对执行路径、函数调用关系、线程 交互及其与系统交互行为进行跟踪记录。这些信息都是与程序执行行为本身相关 的,所以必须在程序中动态或者静态地插入额外的代码来触发对这些事件的统 计;这种插入额外代码的方法就是插桩。静态插桩包括很多编译器里自带的剖析 工具如g c c 编译器里自带的g p r o f ( f s f ,1 9 9 8 ) 等。动态插桩方面的代表性的 工作包括a t o ma p i ( s r i v a s t a v a ,1 9 9 4 ) 、d t r a c e ( c a n t r i l l ,2 0 0 4 ) 、p i n ( l u k ,2 0 0 5 ) 等。 插桩的方法有几个明显的缺点。对于静态插桩,每次在观察点加入额外的事 件记录代码,都需要重新编译整个程序,而且在统计嵌套函数的外层函数执行时 间的时候会导致失真,调整的话需要很多额外的工作;也就是说,静态插桩是非 常不方便的。对于动态插桩,为了在运行时插入代码,需要处理器调试功能的断 点支持;而调试功能的频繁使用会引起很大的额外开销。 i n s t r u m e n t a i o n 在学术界和工业界有大量的研究工作,但是要达到低额外开 销和对目标应用程序本身的执行低干扰这两个目标仍然是非常困难的。 6 第1 章绪论 1 3 2 基于运行时处理器微体系事件特征的性能分析 基于运行时处理器微体系事件特征的分析方法,是通过分析硬件的行为来反 思软件的问题;这类方法一般都是基于处理器中集成的硬件性能计数器( p 删, p e r f o r m a n c em o n i t o r i n gu n i t ) 。 基于p m u 的性能监测工具,有两种数据收集方法,即直接计数和抽样;监 测范围为全系统或者针对特定进程。 直接计数的方法记录一段代码或者一个或多个线程的一段运行时间内指定 事件的发生次数。直接计数的方法,需要在应用程序运行的特定点触发和停止, 因此仍然需要借助与上一节中的插桩方法。 抽样( s a m p l i n g ) 是一种统计学方法,分为基于时间和基于事件的抽样两种, 其中后者抽样间隔更加准确并且开销小,只有在不支持p m u 的处理器上才使用 借助于操作系统时钟中断机制实现的基于时间的抽样。抽样方法将事件与代码的 具体位置相关联,来反映程序运行时的微体系事件特征。 这里对业内基于运行时处理器微体系特征的性能分析方法的重要工作的技 术特点做一个综述。 i m e ! v t u n e 是i n t e l 公司开发的专门针对i n t e l 多核处理器平台的性能调优工 具。它的技术特点包括: ( 1 )支持全系统抽样的数据采集方法;在其l i n u x 版本中,使用模块 ( m o d u l e ) 的方法实现对底层p m u 的控制和系统信息的收集; ( 2 ) 利用编译信息,可以将样本统计数据对应到进程、线程、函数、反 汇编代码和源代码中; ( 3 ) 给出指定进程或处理器核的抽样信息在时间轴上的分布图; ( 4 )利用知识库专家系统,可以对抽样信息进行智能解读,向用户提出 程序改进的位置和方法的建议。 o p r o f i l e ( l e v o n ,2 0 0 9 ) 是l i n u x 下的一个工具,包括内核层以模块方式实 现的负责数据抽样的后端和用户层的守护进程两部分。 o p r o f i l e 支持全系统抽样,其内核驱动模块作为l i n u xk e r n e l 的m a i n l i n e 的 一部分发布。o p r o f i l e 以伪文件系统设备的方式,向用户提供p m u 设置、内核 缓冲分配参数设置以及数据的读出到用户空间的接口。用户层实现了类似v t u n e 的基本功能。 p e r f r n o n 2 ( e r a n i a n ,2 0 0 9 ) 实现了一组系统调用,来提供全系统和针对特定 进程的直接计数或者抽样的数据收集方法,同时实现了一个模块来支持多种抽样 数据格式,对l i n u x 下的同类工具如o p r o f i l e 等的抽样数据格式兼容。p e r f r n o n 2 7 第1 章绪论 还支持p m u 的虚拟化和复用( m u l t i p l e x i n g ) 。另外,p e r f m o n 2 对多种平台如i a 、 i t a n i u m 、m i p s 、p o w e r 、s p a r e 等处理器等提供了支持。 在功能和硬件平台支持上,p e r f m o r t 2 非常完备。但是p e r f m o n 内核部分太 过庞大,对l i n u x 内核核心改动过多,例如其系统调用部分使用了多达1 2 个系 统调用号。 部分是吸取了p e r f m o n 2 的一些经验,i n g om o l n a r ( 2 0 1 0 ) 等人在l i n u x 内 核核心实现了另一种p m u 支持方案,即p e f f 。p e r f 只需要一个系统调用,并且 对内核核心的其他代码几乎不造成影响。 p e r f 支持全系统抽样和事件直接计数的数据收集方法,支持p m u 和事件虚 拟化,支持性能计数器的复用,等。其功能和代码结构都是比较健壮的,目前 p e r f 还在进一步开发中,最新的l i n u x 内核包已经开始将其收入m a i n l i n e 。p e r f 的缺点是,其设计主要考虑的是i n t e l 处理器支持的可供监测的事件和寄存器设 置方式,即便是体系无关的代码部分也很难被其他体系结构( 如m 口s ) 复用。 1 4 论文的结构 本文的剩余部分按如下方式组织。 第二章介绍p m u 的硬件特征和基于p m u 进行件能分析的原珥与方法。 第三章详细叙述s m a r t 的整个软件架构和功能模块划分。 第四章阐述s m a r t 后端中的p v i e w 内核扩展机制及其实现细节,以及p v i e w 系统调用接口的细节。 第五章介绍s m a r t 后端中p v i e w 系统调用接口的使用模式。 第六章实现了一个用户层的简单工具,来对基于p v i e w 用户接口的部分功能 进行验证。 第七章介绍s m a r t 后端中的p e n g i n c 驱动模块的工作原理和功能。 第八章对整个论文工作进行总结,包括对本文工作的回顾和对未来工作的展 望。 8 第2 章基于硬件性能计数器的性能分析技术 第2 章基于硬件性能计数器的性能分析技术 2 。1p m u 概述 现代处理器都集成了一种特殊的硬件性能监测电路,即p e r f o r m a n c e m o n i t o r i n gu n i t ( p m u ) ,来监测和统计处理器中的底层硬件操作相关的事件。例 如,如果发生一次d c a c h em i s s 事件,则相应的寄存器可以通过加一来记录这一 事件。p m u 有助于揭示芯片中发生的情况,通过对这些影响性能的事件进行统 计和分析,我们可以知道不同的程序编码会有怎样的底层硬件行为,根据这些行 为迸一步分析是什么硬件事件影响了程序的性能,从而指导程序员进行算法级的 程序改进。 目前的主流处理器中,双核i t a n i u m2 有1 2 个4 8 位的性能计数单元,a m d 6 4 有4 个4 0 位的m s r ( m o d e ls p e c i f i cr e g i t s t e r ) 性能计数器,i n t e lc o r 有5 个m s r 性能计数器( 包括两个通用事件计数器和三个固定事件计数器) ,mp o w e r6 则 有4 个3 2 位的s p r n 性能计数器。另外,最新的i n t e lc o r ei 7 有4 个通用事件性 能计数器和3 个固定事件计数器。 一般来说,p m u 由成对的p m c o u n t e r ( p e r f o r m a n c em o n i t o r i n gc o u n t e r ) 和 p m c o n t r o l ( p e r f o r m a n c em o n i t o r i n gc o n t r 0 1 ) 寄存器组成。其中,p m c o n t r o l 用 来对要监测的事件和条件进行配置;p m c o u n t e r 则是事件计数器,当指定的性能 事件发生时自增。典型的p m c o n t r o l 寄存器的控制域包括e v e n t ( 事件类型) 、 k e m e l ( k e n r e l 态计数) 、u s r ( 用户态计数) 、c o u n t i n ge n a b l e ( 激活计数) 和 i n t e r r u p te n a b l e ( 计数器溢出中断使能) 等。 关于龙芯2 f 和i n t e l 系列处理器的p m u 细节请参照附录b 。 2 2 p m u 底层操作 2 2 1 龙芯2 f 龙芯2 f 中的p m u 寄存器属于c p 0 控制寄存器,对其读写需要用到龙芯2 专门定义的c p 0 传输指令,其中写c p 0 寄存器的指令只能运行于核心态。表2 1 列出了读写c p 0 寄存器的指令,这些指令都是寄存器寄存器形式的,其中g p r 代表通用寄存器,c p r 代表c p 0 类型寄存器。 9 第2 章基于硬件性能计数器的性能分析技术 表2 1 龙芯2 处理器c p 0 传输指令 指令c p 0 寄存器位数 操作 m f c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高校产学研合作2025年技术转移与成果转化的融资渠道拓展与风险控制
- 聚焦2025年:私募股权投资基金热点投资领域及退出策略深度报告
- 疫情期间问题活动方案策划
- 兽用生物制品安全管理规范
- 焊剂烧结熔炼工内部技能考核试卷及答案
- 烫呢(光)挡车工专业知识考核试卷及答案
- 木结构房屋地板施工方案
- 幼儿园春季户外活动安全管理措施
- 广告法考试题库及答案
- 类文阅读:纪念白求恩同志
- 蜂鸟众包培训知识课件
- 新转型九年一贯制学校三年发展规划(2025年-2028年)
- 维护秩序靠规则(课件) 2025-2026学年八年级道德与法治上册(统编版2024)
- 期神丁鹏期货交易课件
- (2025秋新版)苏教版科学三年级上册全册教案
- 单侧双通道UBE手术
- 【川教版】《生命 生态 安全》二年级上册第3课 我的鸡蛋宝宝 课件
- 脊柱解剖图(颈胸腰椎)医学课件医学课件
- 处方及处方调配管理制度.doc
- 柴油安全储存管理制度
- 《文山州城镇规划管理技术规定》
评论
0/150
提交评论