1、基于 QEMU 的高效指令追踪技术王涛,秦宵宵,徐学政,王璐,方健(军事科学院国防科技创新研究院,北京100071)通信作者:徐学政,E-mail:摘要:系统模拟器通过模拟处理器、内存、外设等硬件资源创建一个完整的虚拟计算机环境,支持运行和调试不同架构的软件,可大大缩短跨架构的软件开发周期.模拟器的调试模块通常具有指令追踪功能,可记录程序运行的指令序列以用于进一步分析,如程序运行时间评估、程序行为模式分析、软硬件联合仿真等.支持 RISC-V 架构的主流模拟器 QEMU 和 Spike 均具有指令追踪功能,但其时间和空间开销过大,在应对规模较大的应用时效率低下.本文提出了一种基于 QEMU 的
2、指令追踪技术,将程序中的基本块、控制流图等静态信息与分支选择等动态信息解耦,在保证指令序列不失真的同时高效追踪执行序列.相比 QEMU 原生实现的指令追踪,本文提出的指令追踪技术的时间开销平均降低了 80%以上,空间开销平均降低了 95%以上.此外,本文面向 RISC-V 架构,实现了多种场景下的指令序列离线分析,包括指令分类统计、程序热点标记、行为模式分析等.关键词:QEMU;RISC-V;指令追踪;模拟器;处理器引用格式:王涛,秦宵宵,徐学政,王璐,方健.基于 QEMU 的高效指令追踪技术.计算机系统应用,2023,32(11):310.http:/www.c-s- Instruction
3、 Tracing Based on QEMUWANGTao,QINXiao-Xiao,XUXue-Zheng,WANGLu,FANGJian(DefenseInnovationInstitute,AcademyofMilitarySciences,Beijing100071,China)Abstract:Thesystememulatorcreatesavirtualenvironmentbyemulatinghardwareresourcessuchasprocessor,memory,andperipherals,whichcansupportsoftwarerunninganddebug
4、gingofdifferentarchitecturesandgreatlyshortenthecross-architecturesoftwaredevelopmentcycle.Theemulatorusuallysupportsinstructiontracingandcanbeemployedforanalysisbyrecordingtheinstructionsequenceofprogramrunning,suchasrunningtimeevaluationandbehaviorpatternanalysisrelatedtotheprogram,andjointemulati
5、onofsoftwareandhardware.AsthemainstreamemulatorssupportingRISC-Varchitecture,bothQEMUandSpikesupportinstructiontracing.However,theyaretime-andspace-expensiveandinefficientwhendealingwithlarge-scaleapplications.Thus,thisstudyproposesaninstructiontracingtechnologywithQEMU.Wheninstructionsaretracedwith
6、outdistortion,staticinformationsuchasbasicblocksandcontrolflowchartsintheprogramisdecoupledfrombranchselectionandotherdynamicinformation.ComparedwiththenativeinstructiontracingimplementedbyQEMU,theproposedtechnologyreducesthetimeoverheadbymorethan80%andthespaceoverheadbymorethan95%.Additionally,base
7、donRISC-Varchitecture,thisstudyrealizesoff-lineanalysisofinstructionsequencesinvariousscenarios,suchasinstructionclassificationstatistics,programhotspotmarking,andprogrambehavioranalysis.Key words:QEMU;RISC-V;instructiontracing;emulator;processor计算机系统应用ISSN1003-3254,CODENCSAOBNE-mail:ComputerSystems
8、&Applications,2023,32(11):310doi:10.15888/ki.csa.009330http:/www.c-s-中国科学院软件研究所版权所有.Tel:+86-10-62661041基金项目:国家自然科学基金(62102439)本文由“RISC-V技术及生态”专题特约编辑邢明杰高级工程师、宋威副研究员、张科正高级工程师以及易秋萍副教授推荐.收稿时间:2023-03-29;修改时间:2023-06-27;采用时间:2023-07-21;csa 在线出版时间:2023-09-15CNKI 网络首发时间:2023-09-18SpecialIssue专论综述31引言 1.1 研
9、究背景以 QEMU1为代表的系统模拟器通过模拟 CPU、内存、外设等硬件资源创建一个完整的虚拟计算机环境,支持运行和调试不同架构的软件.模拟器在芯片设计和验证阶段被广泛使用,相比各类硬件仿真平台具有明显的速度优势,这主要得益于其高度抽象的实现方式:在模拟一个目标设备时,模拟器可以根据需要对其行为进行抽象建模并实现.例如,QEMU 忽略了 CPU的部分微架构实现,仅对指令集的语义进行建模,大大加快模拟速度的同时保证了上层软件的跨架构运行,能够显著缩短跨架构的软件开发周期2,3.模拟器的调试模块通常具有指令追踪功能,可记录程序运行的指令序列以用于进一步分析.例如:(1)通过统计指令序列中各类型指令
10、的数目粗略评估程序的实际运行时间;(2)通过程序各时间段的基本块采样分析程序的行为模式4,5;(3)通过对程序热点片段的标记和提取进行软硬件的联合仿真等.利用模拟器准确和高效地对目标程序进行指令追踪,是进行各类分析的基础.在硬件层面,芯片通常会提供硬件性能计数器、追踪和调试模块等机制帮助用户进行性能分析6,模拟器的调试和追踪模块是对相应硬件抽象模拟,从而实现跨架构的性能分析.在软件层面,可利用插桩技术(如IntelPin7和 DynamoRIO8,9等)实现指令追踪和性能分析,相比之下,模拟器的指令追踪无需修改程序,不受硬件平台的限制,可在芯片设计初期实现跨指令集架构的模拟运行.本文拟研究基于
11、模拟器的程序指令级的追踪和分析.在系统层面,用户可利用 OpenTracing10,OpenTelemetry11等技术对分布式系统中的各组件进行追踪和性能监测.近年来,RISC-V 架构12凭借其精简、开放、模块化的设计和高可定制的特点在工业界和教育界广受欢迎.面向 RISC-V 的处理器接连问世,支持 RISC-V 的系统模拟器也被广泛使用,如 Spike13,QEMU1等.本研究实现了基于 QEMU 的高效指令追踪,并面向 RISC-V架构实现了多种基于指令序列的分析.1.2 研究现状支持 RISC-V 架构的模拟器 QEMU 和 Spike 均具备指令追踪功能.Spike 是专门面向
12、RISC-V 架构的模拟器,能够模拟一个或多个硬件线程.相较于其他模拟器,Spike 更专注于对 RISC-V 指令集的准确模拟,而非对多架构以及各类设备的虚拟化,常作为参考模型用于芯片的测试和验证.Spike 支持追踪程序执行的指令信息,它会将模拟的硬件线程号、指令地址、指令编码及反汇编信息按照指令执行的顺序记录下来,以供用户分析.QEMU 是一个面向多种架构的开源模拟器和虚拟机管理工具,通过动态二进制翻译机制模拟不同的指令集架构.QEMU 会按块翻译、缓存和执行目标架构的代码,并支持将翻译和执行过程中处理的指令地址、编码和反汇编信息以日志的形式输出.Spike 受限于自身的模拟速度和日志记
13、录方式,其指令追踪功能相比 QEMU 的要慢很多.图 1 对比了在模拟 NPB 基准套件中的 bt.S.x 时二者的时间(详细实验配置见第 5.1 节).可以看出,在该目标应用下 Spike的模拟效率仅为 QEMU 的 30%,开启指令追踪后效率更是不足 QEMU 的 3%.600500400300200100关闭指令追踪运行时间(s)13.8501.64.411.2开启指令追踪0SpikeQEMU图 1比较 QEMU 和 Spike 的指令追踪效率虽然 QEMU 的指令追踪效率优于 Spike,但仍然无法应对较长的指令序列,如某些大型软件或循环次数较多的基准测试程序.仍以 bt.S.x 为例
14、,在数据规模仅为 S(数组大小仅为 121212)的情况下,QEMU 在开启指令追踪后的模拟时间变为 2.5 倍,记录的日志文件高达 300MB,这并不利于后续基于指令序列的各类分析.1.3 需求与挑战通过分析和实践,我们认为用户对于模拟器的指令追踪功能有至少以下 3 点需求:(1)序列完整.指令序列的正确性和完整性是后续分析的基础,指令追踪应支持记录程序从开始到结束的完整指令序列;(2)信息多元.用户对于指令序列分析的需求是多样的,但所需的信息各不相同.例如,指令分类统计需要记录指令计 算 机 系 统 应 用http:/www.c-s-2023年第32卷第11期4专论综述SpecialIss
15、ue的类型和频次,程序热点分析需要记录指令的地址和频次,而程序的行为分析需要记录不同执行阶段的指令序列;(3)执行高效.指令追踪的时间开销和空间开销要在可接受的范围内,尤其是空间开销,如果指令序列占用空间过大将不利于后续的分析.开发满足需求的指令追踪功能面临的主要挑战是:难以在保证指令序列完整性和信息多元性的同时降低时间和空间开销.按需进行指令追踪能够一定程度降低开销,例如,当用户只需统计指令数目时,模拟器无需为其提供完整的指令序列,只需要统计指令频次,这将大大降低空间开销.然而,指令追踪应按需提供多种信息而无需为各类应用单独开发不同的指令追踪程序.为特定的应用场景开发特定的指令追踪方法难以适
16、应用户多样化的分析需求.1.4 基于 QEMU 的高效指令追踪技术本研究提出了一种基于 QEMU 模拟器的指令追踪技术,将程序中的基本块、控制流图等静态信息与分支选择等动态信息解耦,在保证指令序列不失真的同时高效追踪执行序列.相比 QEMU 原生实现的指令追踪,本文提出的指令追踪技术的时间开销平均降低了 80%以上,空间开销平均降低了 95%以上.此外,本文面向 RISC-V 架构,实现了多种场景下的指令序列离线分析,包括指令分类统计、程序热点标记、行为模式分析等.对于不同的序列分析,可按需还原指令序列,降低分析开销.本文第 2 节简要介绍了 QEMU 原生的指令追踪实现,包括块翻译机制、日志
17、系统和插件机制.第 3 节介绍了一种基于信息解耦的高效指令追踪技术.第4 节介绍了技术的具体实现.第 5 节介绍了实验设计、结果以及案例分析.第 6 节进行了总结.2QEMU 指令追踪QEMU 原生的指令追踪14可以基于块翻译和日志系统实现.例如,通过开启“in_asm,exec,nochain”调试选项,可以翻译块为单位记录指令信息以及目标程序的 PC 序列,经过处理可还原出完整的指令序列.2.1 块翻译机制QEMU 的高效模拟得益于其块翻译机制,它以程序的基本块为单位,通过在两种架构之间建立 TCG(tinycodegenerator)翻译层,将目标架构的指令翻译成宿主机指令.TCG 可分
18、为前端和后端,前端将目标架构的指令翻译成中间表示(TCGIR),后端再将 TCGIR 翻译成宿主机的指令.图 2 展示了 TCG 翻译的流程示意.与编译器类似,将翻译过程分成前后端的优势在于:(1)服务于目标架构的前端翻译和面向宿主机架构的后端翻译可以独立实现,避免前后架构的组合爆炸;(2)TCGIR 不与任何指令集架构相关,将通用的优化技术应用于 TCGIR,各个架构都将从中受益.movi_i64 tmp3,$08add_64 tmp2,r10,tmp3mov_i64 r10,tmp2TCG IR目标架构x86,RISC-V,ARM,PPCRISC-VTCG IRx86宿主机架构x86,RI
19、SC-V,ARM,PPCaddi a0,a1,8addq$8,%rbxmovq%rbx,060(%rbp)图 2TCG 代码翻译示意QEMU 以基本块为单位翻译代码.当 QEMU 第1 次翻译一段代码时,会将连续的目标指令翻译成宿主机指令,直到遇见跳转指令才停止翻译.翻译得到的代码块被称作翻译块(translationblock,TB).QEMU 将翻译好的 TB 缓存并用哈希表进行维护.在每次执行完一个 TB 时,QEMU 根据需要执行的下一个 PC 值在哈希表中查找对应的 TB 并加载运行.为了降低查表的开销,QEMU 在 TB 之间建立链接,使得一个 TB 执行后,直接跳转并执行下一个
20、TB,而无需查找 TB.这些链接在一起的 TB 被称为扩展的翻译块.TB的缓存技术和链接技术大大提高了 QEMU 的模拟性能.2.2 日志系统QEMU 内部具有功能强大的日志系统,支持记录TB 的执行顺序、指令反汇编、中断等.通过分析 QEMU产生的日志信息,开发人员可以了解应用程序的运行行为,快速定位缺陷.表 1给出了 QEMU 支持的常用日志类型.QEMU 的日志信息由各自独自的开关管理,在启动时通过调试选项开启一个或多个日志类型.2.3 插件机制QEMU 提供了插件机制以观察记录目标程序的运行,可在启动时通过动态链接库的形式加载运行一个或多个插件.通过插件,用户可在 QEMU 模拟运行目
21、标程序的多个阶段(如 CPU 实例化、执行、TB 翻译、系统调用等)注册回调函数,分析提取感兴趣的信息.例如,可在 TB 执行阶段注册插件函数,根据作为参数2023年第32卷第11期http:/www.c-s-计 算 机 系 统 应 用SpecialIssue专论综述5传入的 TB 信息分析记录 TB 包含的指令数目、指令类型、TB 的执行次数等.该函数会在 TB 的执行阶段被调用,伴随 TB 的每次执行而执行.利用 QEMU 的插件机制可以实现指令级别的观测记录.表 1QEMU 常用日志类型选项日志类型out_asmTB对应的宿主机汇编指令in_asmTB对应的目标程序汇编指令int中断和异
22、常exec执行的每个TB信息cpu进入TB时的CPU寄存器fpu进入TB时的FPU寄存器mmuMMU相关状态plugin插件信息nochain禁用TB链接(打印完整TB序列)strace用户态系统调用插件的实现独立于 QEMU 内部的模拟执行,并且只能观测、分析和记录 QEMU 暴露的信息(如 TB),无法修改机器状态,保证了程序的模拟执行不受影响.3基于信息解耦的指令追踪方法 3.1 解耦静态基本块信息和动态指令序列程序中的基本块15指的是一段连续的代码,程序的执行只能从基本块的第 1 条语句进入,从基本块的最后一条语句离开.图 3 展示了一个简单的基于基本块的控制流图.如果基本块的第 1
23、条指令被执行,则后续的指令必然被执行,换言之,程序运行结束后,一个基本块内所有指令的执行次数是相同的.基于以上性质,指令追踪只需记录基本块的 ID,后续根据每个基本块的指令信息即可还原完整的指令序列.例如,通过记录序列“B0-B1-B4”并通过后续解析这 3 个基本块内部的指令序列即可按需还原完整的指令序列.该方法的核心思想是:解耦静态的基本块信息和动态的指令序列,加快指令追踪的过程,后续按需还原指令序列,可大大降低指令追踪的时间和空间开销.3.2 解耦静态控制流图和动态分支选择通过分析发现,在控制流图15中存在部分基本块仅有一个出边(即指向其他基本块的边),例如图 3 中的 B1,B2 和
24、B3.对于仅有一个出边的基本块,当其被执行时,其唯一后继的基本块一定被执行,记录其后继的基本块信息是冗余的.例如,对于执行序列“B0-B2-B3-B4”,B2 的执行必然伴随着 B3 和 B4 的执行.此外,B0 作为入口基本块也必然被执行.因此,序列“B0-B2-B3-B4”可压缩为“B2”.ld t0,0(a0)beq t0,t1,L0slli t0,t0,2j L2L2:sd t0,0(a0)L1:addi t0,t0,1addi t0,t0,1B0B1B4B2B3L0:j L1图 3基于基本块的控制流图示意上述方法的核心思想是:将静态的控制流图与动态的分支选择解耦,仅记录程序在运行至分
25、支点时的选择(即具有一个以上出边的基本块),后续通过遍历控制流图对序列进行还原.3.3 面向需求的指令序列还原通过前文介绍的两种信息解耦技术,指令序列分为静态和动态两部分信息分别记录.静态信息包括程序的控制流图、各个基本块的指令信息等;动态信息包括程序执行的分支选择.通过遍历控制流图并根据记录的分支选择序列恢复完整的基本块序列,并可进一步通过检索基本块信息还原完整的指令序列.然而,并非所有的后续分析都需要完整的指令序列,为了提高序列分析的效率,可按需对指令序列进行还原.图 4展示了上述流程的示意图.热点提取行为分析动态信息指令序列追踪目标程序指令序列还原静态信息指令统计代价估计图 4指令序列的
26、追踪与分析流程示意图以热点片段提取为例,用户希望将程序中执行频率较高的片段提取出来,图 5 展示了如何通过记录的序列计 算 机 系 统 应 用http:/www.c-s-2023年第32卷第11期6专论综述SpecialIssue还原提取需要的信息.首先,根据记录的仅包含分支信息的序列“B1-B1”以及左侧的控制流图对基本块序列进行还原.自起始基本块 B0 开始,沿着图中的边依次搜索,当遇到具有一个以上出边的基本块时(如 B3),在记录的分支选择序列中依次选择对应的基本块(如 B1),直至还原出基本块序列.实际上,该应用无需维护基本块的执行顺序,仅记录执行频率即可,尤其无需对基本块包含的指令信
27、息进行展开.经过简单统计,可以得出各基本块的执行频次,之后可根据需要筛选出热点片段.B0B1B2B3B4B0B1B2B3B41ID频次3331分析的结果:还原的序列:B0-B1-B2-B3-B1-B2-B3-B1-B2-B3-B4记录的序列:B1-B1图 5热点片段提取分析流程示意可见,该过程是按需对指令序列进行还原,一次指令追踪的结果可支持多种离线的指令序列分析.4基于 QEMU 的指令追踪实现实现上述指令追踪技术有两个关键点:(1)控制流图和基本块等静态信息的生成;(2)动态分支选择序列的记录.在本研究中,上述操作均基于 QEMU 的插件机制实现.4.1 控制流图生成QEMU 的块翻译和块
28、链接机制自然构成了程序的控制流图.依托于 QEMU 的插件机制,在 TB 翻译时注册函数记录控制图的节点信息,在 TB 执行时注册函数记录 TB 的跳转信息作为控制流图的边信息.当程序运行结束时,通过记录的节点信息和边信息构造出程序的控制流图.此外,为了方便频次统计,在输出控制流图时将各个基本块的执行频次也一并输出.与传统的控制流图的不同之处在于:(1)QEMU 建立的 TB 及其链接是动态建立的,相当于在静态控制流图的基础上进行了动态切片.由于用户对于未被运行的代码并不感兴趣,该特性并不妨碍指令序列的跟踪;(2)TB 有别于传统基本块的定义.传统的基本块是静态建立的,能够确定程序不会跳转到基
29、本块中间,而TB 的建立是动态的,一般是从第 1 条语句一直到分支或跳转语句,此刻无法确定程序之后不会跳转到基本块中间.图 6展示一个简单的循环体建立 TB 的过程,涉及的 3 条指令中第 1 条为变量初始化(PC 为 0 x10),后两条为循环的主体(PC 为 0 x14 和 0 x18).当第 1 次块翻译时,TB1 被建立,3 条指令均被包含在内.当执行到 0 x18 时,程序产生分支跳转,目标地址为 0 x14,此时并不存在起始位置为 0 x14 的基本块,QEMU 新建了TB2,包含 0 x14 和 0 x18 两条指令,之后再次跳转到0 x14 时,存在起始位置为 0 x14 的基
30、本块 TB2,并不会新建 TB.可见,TB 的概念与基本块并不完全一致,TB 之间可能存在重叠的区域(如 TB1 和 TB2).然而,含有重叠的 TB 并不会影响控制流图的建立和指令追踪的正确性.例如,序列“TB0-TB1-TB2”记录的是真实的指令序列.需要注意的是,当统计程序热点区域时,需要对重叠的部分重复计数,例如 0 x140 x18 这一区域的执行频次应该由 TB1 和 TB2 的频次相加.10:li a0,1014:addi a0,a0,118:bnez a0,410:li a0,1014:addi a0,a0,118:bnez a0,410:li a0,1014:addi a0,
31、a0,118:bnez a0,414:addi a0,a0,118:bnez a0,414:addi a0,a0,118:bnez a0,4TB0TB1TB2TB0TB1TB0TB1TB2图 6循环体建立 TB 的过程示意 4.2 基本块信息提取通过在 TB 翻译阶段注册插件函数,可记录 TB 的ID、PC、指令条数、指令反汇编等信息.该过程仅在TB 的首次翻译时进行,每个 TB 只执行一次,不受动态执行次数的影响.4.3 序列记录程序的执行序列指的是 TB 的执行序列.虽然静态控制流图已经包含了所有的 TB 节点和 TB 间的跳转信2023年第32卷第11期http:/www.c-s-计 算
32、 机 系 统 应 用SpecialIssue专论综述7息,但是缺少了程序执行的动态分支选择.当 TB 可跳转至多个 TB 时,需要按顺序记录其每一次的分支选择.由于控制流图是动态建立的,在程序运行结束之前无法确定 TB 是否存在一个以上的跳转目标,因此需要暂时记录完整的 TB 序列,待程序运行完毕后,只需线性扫描控制流图中的 TB,输出分支处选择的 TB 而忽略其他 TB.5实验与结果 5.1 实验环境本研究中的代码基于 QEMUv7.2,采用插件的形式实现.实验基于 RISC-V 用户态 QEMU 开展,实验平台采用 IntelCorei7-9750H 处理器,内存 16GB,运行Ubunt
33、u20.04.图表绘制基于 gnuplot16实现.实验测试程序选取自常用的基准测试,包括Dhrystone17、whetstone18以及 NPB19.其中,Dhrystone的循环次数为 106,whetstone 循环次数为 105,NPB 采取串行版本中的 S 和 W 规模.程序均由 RISC-V 的 gcc工具链编译,目标指令为 RV64GC.5.2 实验结果表 2给出了基于常用基准测试的指令追踪实验结果.其中,本研究所生成的日志文件包括静态和动态信息两部分,其中静态控制流图输出为 JSON 格式,动态指令序列输出为二进制文件,每个基本块 ID 由 32 位整型表示,表 2 中所列日
34、志大小是二者相加的结果.表 2基于常用基准测试的指令追踪实验结果测试程序执行指令数时间(s)开启原生的指令追踪使用本研究的指令追踪时间开销比率(%)空间开销比率(%)时间(s)日志(MB)时间(s)日志(MB)Dhrystone3.31080.7137.559006.899.05.01.7whetstone1.710917.7379.21600037.6343.09.92.1bt.S.x4.01084.411.23135.010.444.03.3cg.S.x4.01081.194.241008.8174.29.34.2dc.S.x2.01080.478.636005.486.96.92.4ep
35、.S.x1.810927.3243.8980044.6309.218.33.2ft.S.x5.51084.564.430009.9112.215.43.7is.S.x3.11070.26.32630.812.412.74.7lu.S.x1.51081.55.21512.06.038.44.0mg.S.x3.81070.34.71810.88.817.04.9sp.S.x1.81081.610.94172.614.523.93.5ua.S.x2.710916.0323.91400042.6591.013.24.2bt.W.x1.31010138.1365.09000147.4269.440.43
36、.0cg.W.x2.61096.4670.72900023.91163.03.64.0dc.W.x2.01011503.82262.1160000.0ep.W.x3.710955.3511.62000069.8616.213.63.1ft.W.x1.21099.3160.0740014.2277.28.93.7is.W.x5.11082.9101.741006.2179.06.14.4lu.W.x2.51010241.5710.419000251.1738.435.33.9mg.W.x2.210914.9223.4880020.0410.38.94.7sp.W.x2.51010211.8143
37、1.053000247.02050.017.33.9ua.W.x1.6101095.91857.079000148.43400.08.04.3对比 QEMU 原生的指令追踪实现,本研究提出的指令追踪技术在运行时间和日志空间占用上均有明显的提升,其中运行时间平均仅为 QEMU 原生实现的17.0%(3.6%44.0%),日志空间占用平均仅为 3.7%(1.7%4.9%).值得注意的是,在本实验环境下程序dc.W.x 未在可接受的时间内基于原生实现完成指令追踪,手动结束运行时其日志大小超过 2TB,运行时间超过 10h.为了预估在给定时间/空间限制下指令追踪的最大长度,实验选取了部分耗时较长的测试
38、统计了时间/空间开销和指令序列长度的关系.图 7 给出了指令序列长度与运行时间的关系.整体上,二者为线性正相关,各用例的时间增长率因其热点片段的指令特点不同而有所差异.例如,对于 ep.S.x 每记录 108条指令耗时约计 算 机 系 统 应 用http:/www.c-s-2023年第32卷第11期8专论综述SpecialIssue2s,而 ua.S.x 耗时约 1s.图 8 给出了指令序列长度与日志空间的关系.类似地,二者为线性正相关,各用例的日志空间增长率因其热点片段的基本块大小等因素而有所差异(见第 3.1 节).例如,对于 ep.S.x 每记录108条指令占用 25MB,而 cg.S.
39、x 需要 50MB.此外,由于程序起始和结束阶段的行为区别于热点区域(见第5.5 节),时间和空间开销的规律可能也有所不同.0024681012123指令序列长度(108)运行时间(s)456bt.S.xcg.S.xdc.S.xep.S.xft.S.xua.S.x图 7指令序列长度与运行时间的关系0050100150bt.S.xcg.S.xdc.S.xep.S.xft.S.xua.S.x200123456指令序列长度(108)日志空间(MB)图 8指令序列长度与日志空间的关系 5.3 热点标记基于 bt.S.x 的指令追踪结果进行热点基本块的提取(方法参见图 5),可根据基本块执行频率迅速定位
40、程序的热点区域.经分析,函数 binvchr 包含了执行频次最高的几个基本块(执行频次 20000 以上).图 9展示了 bt.S.x 的热点区域的汇编代码.由于该应用无需对完整的指令序列进行分析,仅统计基本块频次即可,分析过程仅耗时 1s.5.4 指令统计基于 bt.S.x 的指令追踪结果进行指令统计并绘制直方图(图 10).其中,横轴是指令的频次,纵轴是高频指令的名称(由 RV64GC 组成).经统计,该程序以浮点运算为主,使用频次最高的指令是双精度乘减取反指令(fnmsub.d).该应用与热点片段提取类似(参见图 5),无需考虑指令的相对顺序,可通过先统计基本块频次和基本块中各指令的频次
41、,二者相乘即可得到指令统计信息.由于该应用可按需恢复指令序列,无需对完整的指令序列进行分析,分析和绘制过程仅耗时 1s.a5,068ft8,40(a0)fa6,80(a0)fa5,fa4,fa5ft1,8(a0)fs0,fs9,ft1,fs0fs4,fs8,ft1,fs4fs3,fs7,ft1,fs3fs2,fs6,ft1,fs2fs1,fs5,ft1,fs1ft1,fa5,ft1,fs100006879702853e07050538071af777d300853087421cf44ba21c7a4b9a1bf9cb921b794b4a1af4cbd217f0cb18ecc:18eda:18e
42、de:18ee2:18ee6:18fdc:18fe0:18fe4:18fe8:18fec:18ff0:0000000000018ecc:auipcfldfldfdiv.dfldfnmsub.dfnmsub.dfnmsub.dfnmsub.dfnmsub.dfnmsub.d图 9bt.S.x 热点区域汇编代码fnmsub.dfldfmv.d.xfmul.dfsdfmv.x.dc.fldspc.fldsdc.fsdspc.fsdc.sdspfmsub.dldfmadd.daddifnmadd.dfadd.dfsub.daddc.mvc.ldspfsgnjn.dc.addfsgnj.dbnefdiv
43、.dc.addi16spc.addic.ldauipc012345678指令频次(107)高频指令名称图 10基于 bt.S.x 指令序列的指令统计 5.5 行为分析按照指令序列的先后顺序,标记执行的基本块,有助于分析程序运行过程中的行为模式.该过程可通过区间采样和聚类算法进一步分析4,5.进行基本块序列恢复过程仅耗时 2s,图表绘制需要额外 40s.图 11 给出了程序在执行各个阶段的基本块分布,其中横轴为程序执行的指令数(截取了前 3.5107条指令),纵轴为基本块 ID(按照频次选取前 300 个基本块).经过分析可见,程序运行起始阶段的行为与后续有所不同,起始阶段可能在进行程序的初始化
44、,后续阶段是有规律的循环运行某一任务.5.6 问题与不足本研究存在 4 点问题需要进一步改进:(1)虽然本研究所提技术相比 QEMU 原生实现在时间和空间效率上均有明显提升,但对于超大型应用程序依旧无能为力,未来可通过限定跟踪范围(通过目标程序前后插入全局符号或限定 PC 值)对部分程序片段进行指令跟2023年第32卷第11期http:/www.c-s-计 算 机 系 统 应 用SpecialIssue专论综述9踪;(2)暂未实现多核处理器的指令序列跟踪,该功能未来可通过增加线程 ID 将指令序列按线程记录;(3)暂未考虑指令动态更新.如果在程序运行中代码段被修改(如 LinuxKernel
45、中的动态指令注入),目前的实现无法对前后的 TB 进行区分.未来可通过保存更新前后的 TB 进行优化;(4)实验基于 QEMU 用户态模拟器,并未跟踪系统调用的指令序列.通常,用户仅对系统调用号感兴趣,未来可通过补充系统调用号进一步完善指令序列追踪.追踪系统调用的具体指令序列,可使用 QEMU 全系统模拟器.30025020015010050000.51.01.52.02.53.03.5指令数(107)基本块 ID图 11基于 bt.S.x 指令序列的程序行为分析6总结本研究提出了一种基于 QEMU 的高效指令追踪技术,通过动态和静态信息解耦的方式对指令序列进行高效的记录.实验表明,本研究提出
46、的指令追踪技术相比 QEMU 的原生实现,时间开销平均降低了 80%以上,空间开销平均降低了 95%以上.此外,本研究面向RISC-V 实现了多种指令序列分析应用.实验表明,基于生成的静态和动态信息可高效地按需还原指令序列满足不同分析的需求.参考文献Bellard F.QEMU,a fast and portable dynamic translator.Proceedings of the 2005 Annual Conference on USENIXAnnualTechnicalConference.Anaheim:USENIXAssociation,2005.41.1徐学政,王涛,方健
47、,等.面向 RISC-V 的汇编程序语义等价性自动化测试系统.计算机系统应用,2021,30(11):3340.doi:10.15888/ki.csa.0083482刘阳,汪丹,方林伟,等.基于 RISC-V 的数据安全指令.计算机系统应用,2023,32(1):392398.doi:10.15888/ki.csa.0088963WeaverVM,McKeeSA.Usingdynamicbinaryinstrumentationtogeneratemulti-platformsimpoints:4Methodology and accuracy.Proceedings of the 3rdIn
48、ternational Conference on High Performance EmbeddedArchitectures and Compilers.Gteborg:Springer,2008.305319.SherwoodT,PerelmanE,HamerlyG,et al.Automaticallycharacterizinglargescaleprogrambehavior.ACMSIGPLANNotices,2002,37(10):4557.doi:10.1145/605432.6054035MatraszekM,BanaszekM,CiszewskiW,et al.Frank
49、enTrace:Low-cost,cycle-level,widely applicableprogram execution tracing for ARM cortex-M SoC.Proceedingsofthe2023Cyber-physicalSystemsandInternetofThingsWeek.SanAntonio:AssociationforComputingMachinery,2023.7277.6PatilH,CohnR,CharneyM,et al.Pinpointingrepresentativeportions of large Intel Itanium pr
50、ograms with dynamicinstrumentation.Proceedings of the 37th InternationalSymposium on Microarchitecture.Portland:IEEE,2004.8192.7Bruening DL,Amarasinghe S.Efficient,transparent,andcomprehensive runtime code manipulation Ph.D.Thesis.Cambridge:MassachusettsInstituteofTechnology,2004.8Bruening D,Amarasi
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100