490 likes | 686 Views
二进制翻译下的优化进程框架. 报告人: 龚 军 导师: 武成岗 时间: 2012 年 5 月. 内容. 研究意义 研究背景 优化进程框架 翻译策略 实验数据与分析 总结与展望. 内容. 研究意义 研究背景 优化进程框架 翻译策略 实验数据与分析 总结与展望. 研究意义. 二进制翻译( Binary Translation ) 解决遗产代码的问题 还可应用于 性能优 化、 指令模拟与仿真 等 优化进程框架 利用多核环境将优化 进程 和主进程 的 运行分离开,减小了优化对主进程的影响
E N D
二进制翻译下的优化进程框架 报告人: 龚 军 导师: 武成岗 时间: 2012年5月
内容 • 研究意义 • 研究背景 • 优化进程框架 • 翻译策略 • 实验数据与分析 • 总结与展望
内容 • 研究意义 • 研究背景 • 优化进程框架 • 翻译策略 • 实验数据与分析 • 总结与展望
研究意义 • 二进制翻译(Binary Translation) • 解决遗产代码的问题 • 还可应用于性能优化、指令模拟与仿真等 • 优化进程框架 • 利用多核环境将优化进程和主进程的运行分离开,减小了优化对主进程的影响 • 使优化进程有更多的虚存空间,从而能较好地解决某些程序空间需求较大的问题,有利于优化进程做一些复杂的优化
内容 • 研究意义 • 研究背景 • 优化进程框架 • 翻译策略 • 实验数据与分析 • 总结与展望
研究背景 • 串行的动态优化 • 直接在主进程中进行优化 • 在进行优化的同时,主进程必须停下来,直到优化完成,这样会导致一定的优化开销 • 如Dynamo(PLDI’00)、DynamoRIO(CGO’03)
研究背景 • 多线程优化框架 • ADORE(JILP’04) • 在执行原有程序的基础上另起一个线程Profile和优化热的Trace • Trident(PACT’05) • 在ADORE的基础上做了一定的改进:利用了硬件的特性,将Profile热Trace的工作交给硬件去完成 • ARCSIM(PLDI’11) • 利用多线程进行并行编译,同时采用了一个有效的任务分配方法有效地把优化任务分配给多个线程 • HQEMU(CGO’12) • 在优化线程上利用硬件性能监视器提供的信息指导合并Trace
研究背景 • 某些应用程序所需的内存空间较大 • CPU2006测试用例中, GCC编译的434.zeusmp占用的空间至少为1G • 导致没有足够的内存空间进行复杂的优化
研究背景 • 动态翻译系统DigitalBridge • 源机器为IA-32体系结构,目标机器为MIPS体系结构 • DigitalBridge进程空间的布局(用户空间只有2G)
内容 • 研究意义 • 研究背景 • 优化进程框架 • 翻译策略 • 实验数据与分析 • 总结与展望
优化进程框架 DBT主进程 优化进程
优化进程框架 • 通信机制 • 优化进程加载源二进制代码 • 本地码链接 • 优化进程的退出机制
通信机制 • 采用共享存储区进行通信 优化进程 执行进程 执行进程的 Code Cache 优化进程的 Code Cache 共享存储区 共享存储区 tb_phys_hash tbs及nb_tbs 函数地址队列 共享存储区
共享资源的访问 • 如何保证共享资源的访问是不冲突的 • 互斥信号量 • 通过互斥信号量保证不会有两个进程同时访问(读写、写读、写写)同一个共享资源 • 能保证tbs、tb_phys_hash、nb_tbs和函数地址队列的访问不冲突 • 具有原子语义的本地码链接机制 • Code Cache地址区除了可被读和写,还可以执行,可能出现某一块内存在被一个进程修改时,另一个进程在此执行 • 通过具有原子语义的本地码链接机制保证了不会出现两个进程同时操作同一块Code Cache的情况
共享资源的访问 • X86程序是多进程程序时 优化进程 子进程 执行进程 共享存储区 共享存储区 共享存储区 共享存储区
共享资源的访问 • X86程序是多进程程序时 优化进程 执行进程 共享存储区 共享存储区 共享存储区 子进程 共享存储区
共享资源的访问 • 分析 fork/vfork/clone 父进程 子进程 X86程序 释放该共享存储区,重新mmap 子进程 clone(clone_func, …) 父进程 DBT系统
优化进程加载X86代码 • 加载X86可执行文件 • 执行进程通过解释/翻译执行ld-linux.so.2加载X86代码 • 优化进程加载X86代码 • 方案一:解释/翻译执行ld-linux.so.2加载X86代码 • 方案二:利用写时拷贝(COW)技术 • 在执行进程加载完X86程序主程序体后再创建优化进程 • 动态加载共享库 • 在程序运行的过程中,可以调用dlopen来动态加载共享库
优化进程加载X86代码 • 动态加载共享库 优化进程 执行进程 内存块1 libm.so f ??? dlopen
优化进程加载X86代码 • 解决方案 • 截获dlopen • 通过截获系统调用open和mmap来判断执行进程是否装载了库文件 ①fd =open(libm.so) 记录(fd, libm.so) 优化进程 执行进程 libm.so ②ret = mmap(fd, …), ④ret = mmap(…) 记录(fd, ret) ③传递libm.so和ret信息
本地码链接 • 作用 • 将线程引导到优化进程产生的本地码中运行 • 避免程序中上下文切换,以及减小本地码查找的开销 • 这些开销对程序性能有较大的影响
本地码链接 • 优化进程产生的本地码链接到执行进程产生的本地码 • 如果有线程在某段本地码区间执行,非原子地修改本地码指令将导致程序出错
本地码链接 • 优化进程产生的本地码链接到执行进程产生的本地码
本地码链接 • 优化进程产生的本地码链接到执行进程产生的本地码
本地码链接 • 执行进程产生的本地码链接到优化进程产生的本地码 通过上下文切换中记住RA寄存器的值,然后得到待链接的地址
本地码链接 • 执行进程产生的本地码链接到优化进程产生的本地码
优化进程的退出机制 • 退出 • 如果程序结束时,优化进程不退出,就会成为僵尸进程,一直在系统中运行,占用系统资源 • 解决思路 • 执行进程退出时通知优化进程退出 • 优化进程隔一段时间检查执行进程是否已退出
非对齐优化在优化框架下的应用 • 非对齐访问 • 内存的访问分为对齐访问和非对齐访问 • 内存的地址是否是要访问的内容大小的整数倍 • 处理非对齐可以从硬件和软件两个层次解决
非对齐优化在优化框架下的应用 • 动态剖析 + 异常处理机制 ld t0, 0(t1) 动态剖析 ldr t0, 0(t1) ldl t0, 7(t1)
code fragment 1 code fragment 1 异常处理机制 pc1:ld t0, 0(t1) pc1: J pc2 code fragment 2 code fragment 2 pc2: ldr t0, 0(t1) ldl t0, 7(t1) J pc1 + 4
非对齐优化在优化框架下的应用 • 应用到框架中会遇到以下问题 • 非对齐的信息在执行进程空间,因此优化进程不能直接得到非对齐信息 • 解决方案:用位图传递,每个位代表一条指令是否发生过非对齐 • 非对齐信息传递的时机 • 方案一:控制执行进程传递函数地址到优化进程的时机 • 方案二:控制优化进程翻译函数的时机
内容 • 研究意义 • 研究背景 • 优化进程框架 • 翻译策略 • 实验数据与分析 • 总结与展望
翻译策略 • 翻译单位 • 影响本地码的质量 • 翻译顺序 • 影响本地码生成的先后次序以及代码布局
翻译单位 • 以函数为单位进行翻译 • 在优化进程中的以函数为单位进行翻译,减少不必要的本地码指令
翻译单位 • 以基本块为单位进行翻译(执行进程中的翻译方法) • Block A: • … • bne &zf, label_for_success • nop • nop • nop • nop • lui a7, x86_addr_of_block_b >> 16 • ori a7, x86_addr_of_block_b • jrra • nop • label_for_success: nop • nop • nop • nop • lui a7, x86_addr_of_block_c >> 16 • ori a7, x86_addr_of_block_c • jrra • nop 跳转到Block B 跳转到Block C
翻译单位 • 以函数为单位进行翻译(优化进程中的翻译方法) • Block A: • … • bne &zf, ??? • nop • Block B: ….
翻译单位 • 以函数为单位进行翻译(优化进程中的翻译方法) • Block A: • … • bne &zf, native_addr_of_block_c • nop • Block B: ….
翻译顺序 • 按照代码的地址顺序进行翻译 • 优化进程从X86可执行文件的符号表中读取所有函数的地址,按照地址升序依次翻译 • 最近执行的代码最先翻译 • 按照执行进程传来的函数地址的相反顺序对这些地址进行翻译
内容 • 研究意义 • 研究背景 • 优化进程框架 • 翻译策略 • 实验数据与分析 • 总结与展望
内容 • 研究意义 • 研究背景 • 优化进程框架 • 翻译策略 • 实验数据与分析 • 总结与展望
总结与展望 • 总结 • 设计并实现了优化进程框架 • 对其中的关键技术,如通信机制、优化进程加载源二进制代码、本地码链接、优化进程退出机制进行了研究 • 将非对齐优化应用到优化进程框架 • 探讨了翻译策略对优化进程框架的性能的影响 • 探讨了“按照代码的地址顺序进行翻译”和“最近执行的代码最先翻译” 两种翻译顺序对系统性能的影响 • 相对于以基本块为单位的翻译执行方法,以函数为单位的方法减少了翻译分支指令时生成的本地码指令数量,改善了系统的性能
总结与展望 • 下一步工作 • 进一步优化该框架 • 优化进程内启动多个线程做优化,这样可以更好地利用多核资源 • 在优化进程生成的本地码插桩,搜集程序运行时信息,为下一阶段的优化提供信息 • 在该优化框架上做更多的优化 • 结合静态编译中的一些优化方法和动态优化方法,并利用程序动态执行的一些信息,更好地对DBT系统生成的中间表示进行优化,生成更高质量的本地码
附录1:非对齐优化的性能 EH:异常处理的机制 DPEH:动态剖析+异常处理机制 TH:解释执行次数的阈值 TW: 优化进程等待的时间
附录2:非对齐优化的性能 • 非对齐信息的传递数量的统计 • 非对齐的指令的数量