论文部分内容阅读
多核是当前处理器发展的重要趋势,多核的应用也日益普及。共享cache由于能充分利用容量资源等优点而被很多的多核处理器采用。但是各核竞争使用共享cache空间会出现性能干扰问题,程序的性能会受到其他核上同时运行程序的影响,甚至会导致cache资源不能有效利用。软件划分是利用操作系统的页着色技术解决性能干扰问题的方法。本文分析评价了现有软件划分方法,然后从程序行为的角度,结合程序的phase行为和cache敏感性的特点,提出了程序行为分析指导的动态划分方法,静态划分的profiling优化和可扩展的动态划分方法。
本论文的主要贡献如下:
●提出了利用程序行为phase信息指导cache动态软件划分及其实现。动态软件划分需要在程序运行过程中从可能划分中寻找性能最优者,但是通过性能比较来判断划分优劣并不合理,因为程序行为会动态变化,即程序性能自身会有起伏,如果将性能高低都归因于划分差异就会造成对最优划分的误判。我们利用phase分析识别出的程序行为状态信息来指导动态cache划分,通过区分出程序行为转变引起的性能变化来消除误判,同时能在程序行为稳定时保持最优划分,减少不必要的划分调整,降低了动态开销。使用SPEC CPU2000程序在intel多核处理器上完成的实验表明,本文的方法在吞吐率、加权加速比和公平加速比上,比未划分时有3.7%、4.9%和4.2%的改进,和现有方法相比平均有1.7%、2.7%和2.8%的提高,个别程序组的改进高达4.3%、12%和5.6%。
●提出单遍运行程序获得性能 profiling的优化方法。该优化方法只需要运行一遍程序就可以获得程序在各种cache容量下的IPC和失效率等性能数据。在程序运行过程中我们利用程序行为具有重复性的特点,通过低开销在线的phase分析技术识别出程序重复出现的phase,以phase为单位进行profiling,对于已完成profiling的phase,当其再出现时可以停止profiling,避免了重复;同时根据程序性能对cache容量变化的敏感性程度不同,识别出各phase的容量敏感区和平坦区,对于程序不敏感的平坦区,则不进行profiling。在程序运行结束后根据各phase的性能数据和所占的程序运行比
重来估计程序整体在各cache容量下的性能,以指导静态划分。实验表明,用该方法的profiling结果指导的cache划分比未划分时有8%的性能改进。
●提出了基于程序cache敏感性识别的动态软件划分方法。该方法通过敏感性识别区分出同时运行程序中的敏感类和非敏感类,再通过限制非敏感类的cache容量来减少它们对敏感类的性能干扰。我们发现软件划分的性能效果和程序的cache敏感性相关,而基于敏感性识别的划分方法既不会丢失软件划分的优化机会,同时又实现简单而易于扩展:识别过程只是少数次地动态调整程序可用cache容量再由性能变化得出敏感性类别,而且各核独立进行识别,不需要集中式地搜索划分空间。敏感性识别也以程序行为的phase分析为指导,从而避免行为变化导致的识别误判。在intel四核处理器上的实验表明,从整体吞吐率来看平均改进达3%,最高可达8%,在一些程序组中非敏感类性能损失不到2%,而敏感类性能改进达到15%以上。
●设计并实现了一种低开销的程序行为phase分析方法。该方法利用处理器上现有硬件性能计数器采样程序执行代码地址,建立代码执行频率向量,并用来确定程序行为的相似性。通过与实际的程序代码执行频率相比,来评估分析方法中关键参数对行为相似性的影响,经实验选择适当的关键参数,使得该方法能够以软件划分可接受的开销识别程序运行中较粗粒度的phase。实验表明,所给出的phase分析结果接近离线的最佳聚类。