嵌入式软件性能量化分析技术
2023-08-18王嘎李路野韩文俊
王嘎?李路野?韩文俊
摘要:嵌入式系统软件对实时性指标要求较高,为了尽可能提高软件的运行效率,嵌入式开发人员迫切需要能够有效辅助嵌入式软件开发的工具和性能分析的方法。本文提出了一种针对嵌入式系统软件的性能量化分析框架,该框架通过系统采样的方法采集硬件资源并利用信息,建立性能评价指标表征应用性能,通过对性能指标进行量化分析评估软件性能,定位问题并提出优化建议。为了验证该框架的有效性,在Intel服务器Linux操作系统,对通用矩阵乘法进行了性能分析和优化,计算资源利用率平均提升10%左右,软件代码性能提升65%。
关键字:嵌入式系统;量化分析;评价指标
自微处理器X86架构出现的30年里,最初阶段的性能提升主要来源于提升处理器的时钟周期。时钟周期的提升不可避免地带来了功耗的增加和散热问题,后期的处理器主要通过增加处理器的核心数量来提升性能。单个处理器的应用程序和多核处理器的应用程序在软件设计过程区别较大。嵌入式平台主要以多核处理器作为计算,由于嵌入式系统对软件性能和稳定性要求较高,同时又与硬件平台紧密耦合,因此必须充分发挥硬件资源。尤其是并行程序设计,必须对应用软件进行性能分析和调试优化,要以分析工具为辅助,对应用软件的CPU、内存、网络等资源的使用率以及高速缓存的利用率进行采样并跟踪定位,找到软件的性能瓶颈,优化关键算法,从而在资源有限的情况下,提高软件性能和可靠性。
一、相关工作
Gprof[1-3]是Linux操作系統的开源性能分析工具,可以统计函数的调用次数和耗时分析,主要采用插桩的方式,而采样会带来额外的开销且不够精确,对网络等资源没有统计在内,不是理想的性能分析工具。
Perf[4]和Oprofile[5]也是开源性能分析工具,与Gprof不同的是,Perf和Oprofile还可以获取底层的信息,并且不是插桩方式,而是非侵入式的,因此不会带来额外的开销,尤其是对高速缓存的分析能帮助快速定位热点。
CodeTEST[6]是AMC公司开发的性能分析工具,基于自动插桩的方式,与Gprof不同的是,CodeTEST的插桩是在汇编级语言,信息更准确,但是灵活性较差。
PAPI[7]是由美国田纳西大学创新计算实验室开发的,以硬件性能计数器为基础的性能分析工具,基于事件的采样从而对Cache命中率、分支预测的事件获取,能精准分析硬件利用信息,更好地定位问题。
TAU[8](Tune and Analysis Utilities)是一个针对C、C++、Java等并行程序的性能分析工具,将性能信息可视化展示,更好地实现人机交互。
Likwid[2]也是Linux的性能分析工具,包含多个工具包,主要用来分析计算机拓扑结构,获取硬件信息,性能基准测试可用性强。
2018年,国防科技大学在飞腾1500A处理器中开发了一款性能分析工具[2],主要实现了拓扑信息获取硬件性能监测等。
2019年,Intel发布了针对X86架构的并行程序性能优化分析工具Intel Parallel Studio,其中Vtune[9]能够访问处理器的硬件计数器收集、分析性能信息和定位热点。
二、性能量化分析技术
针对嵌入式软件难以充分发挥硬件资源的问题,本文主要建立了一种软件性能量化分析技术,通过全系统采样技术进行硬件信息采集,建立性能评价指标,并对性能指标针进行优化,提升嵌入式软件的性能,以支持高性能高可靠度的软件开发。主要的功能包括:
(一)软件性能量化分析框架
对于嵌入式软件硬件资源利用不高,实时性低下的问题,设计一个框架:通过硬件信息采集、获取、计算资源利用率,同时建立性能评价指标,将性能信息数据可视化,分析量化的指标,同时快速定位到软件的问题。
(二)硬件信息采集
通过插桩、时间采样和事件采样,获取软件运行过程和硬件微体系性能事件的特征,通过中断测量和函数测量的方式获取底层信息;
(三)性能评价指标
影响程序性能的因素主要包括算法、指令执行流水、高速缓存、内存读写等,依据这些因素定义关键性能评价指标,而这些关键性能指标能够确定软件是否充分发挥硬件性能。
(四)性能量化分析
根据性能信息采集获取的关键性能数据,以及最优化的指标值的区间范围完成性能量化评估。
三、软件性能量化分析框架
软件性能量化分析框架主要包括:硬件信息采集、性能评价指标、性能量化分析。如图1所示,硬件信息采集软件包含采样数据驱动程序技术、中断和采样技术,采集CPU、Cache、内存、高速缓存等硬件资源利用率;性能评价指标将关键性能指标数据可视化,包括CPU利用率、Cache命中率、CPU流水线等指标;性能量化分析对最优化的指标进行置信区间量化分析,评估是否最大限度利用计算资源并定位问题,快速进行代码优化。
(一) 硬件信息采集
硬件信息采集主要由性能分析工具完成,采集过程主要通过基于时间和事件的采样等技术途径,收集CPU、内存、高速缓存、网络、磁盘等使用信息。
大多数多核处理器集成了性能计数器,对于没有集成性能计数器,则使用基于时间的采样。这种采样方式是基于中断机制的,每次时钟中断系统就会采样一次。
(二)性能评价指标
影响程序性能的因素主要包括算法、指令执行流水、高速缓存、内存读写等,在众多性能指标中,选择关键指标:算法复杂度、CPU流水线效率、高速缓存命中率、CPI(指令周期数)、向量化效率。定义关键性能评价指标,并能够依据这些关键性能指标确定软件是否充分发挥硬件性能。
(三)性能量化分析
对关键性能评价指标的实际测试值和理想最优化值在一个区间上进行比较,确定程序的热点和瓶颈。如果在某个区间上,则可以认为该项指标不是软件性能的瓶颈;如果不在某个区间上,则说明该项指标肯定是性能的瓶颈,随后具体分析该指标所对应的硬件或者程序是否需要优化;如果只有一部分在区间上,则说明该项指标也会影响性能,但不是最最终因素,此时需要对最关键指标的影响进行排序,从影响最大的入手分析。
(四)实验测试
通用矩阵的矩阵乘法在嵌入式系统的应用软件开发领域应用最为广泛,本文就以1024×1024的方阵矩阵乘法为实验测试对象,验证软件性能量化分析技术的有效性,计算平台是Intel E5,操作系统是Centos,编译器采用gcc。
如表2所示,对性能评价指标进行分析:
①CPU流水线效率。该指标分析CPU在执行过程中的指令流水效率、指令并行能力,优化前完全流水执行的是35.4%,优化后是51.2%,提升了15.8%。
②高速缓存命中率。该指标表示程序中的数据和指令是否都在硬件的Cache中,命中率高的程序,缓存优化更好,构件性能更优,优化前命中率是92%,优化后命中率是98%,提升了6%。
③向量化效率。处理器的向量处理单元利用率影响程序的向量化效率,将可以矢量處理的计算转换为向量化,性能会更优;优化前是25%,优化后是30%,提升了5%。
④CPI。该指标表示指令并行度,优化前完全流水执行的是0.830,优化后是0.547,指令并行度提升了0.283。
⑤处理时间优化前是46ms,优化后是16ms,性能提升了65%。
四、结束语
本文在嵌入式系统软件开发领域提出了一种软件性能量化分析方法,通过建立时间采集、时间采集等硬件信息采集,将影响软件性能的因素提炼抽象,定义了CPU流水线效率、高速缓存命中率、向量化效率等性能评价指标,并对指标进行了量化分析,依据分析结果定位问题和优化代码,最终达到充分发挥计算资源,提升嵌入式软件性能的目的,实验结果显示,利用本文提出的软件性能量化分析框架,通用矩阵乘算法性能提升了65%。
作者单位:王嘎 李路野 韩文俊
南京电子技术研究所
参 考 文 献
[1] http://sourceware.org/binutils/docs/gprof
[2] 彭林,方建滨,杜其琦,等.飞腾1500A处理器性能分析工具Likwid研究,计算机工程与科学,2018,40(7),.
[3] Gprof sites[EB/OL].[2018-01-15].https://en.wikipedia.org/wiki/Gprof.
[4] Perf sites[EB/OL].[2018-01-15].https://www.brendangregg.com/perf.html
[5] Oprofile sites[EB/OL].[2018-01-15].https://oprofile.sourceforge.net.
[6] Metrowerks.CodeTEST software analysis tools introduction[M].Metrowerks Press, 2003.
[7] PAPI sites[EB/OL].[2018-01-15].https://icl.cs.utk.edu/.
[8] Tau sites[EB/OL].[2018-01-15].https://www.cs.uoregon.
[9] Intel VTune sites[EB/OL].[2018-01-15].https://software.intel.com/en-us/intel-Vtune-amplifier-xe.
[10] 徐恒阳.龙芯多核平台上性能分析工具的设计与实现[D].中国科学技术大学. 2011
[11] 张惠臻,王超,陈雁.嵌入式软件性能分析方法研究与工具设计.计算机应用与软件.