430 likes | 574 Views
二进制翻译下的优化进程框架. 报告人: 龚 军 导师: 武成岗 时间: 2012 年 3 月. 内容. 研究意义 研究背景 优化进程框架 非对齐优化在优化框架下的应用 总结与展望. 内容. 研究意义 研究背景 优化进程框架 非对齐优化在优化框架下的应用 总结与展望. 研究意义. 二进制翻译( Binary Translation ) 解决遗产代码的问题 性能优化 指令模拟与仿真 优化进程框架
E N D
二进制翻译下的优化进程框架 报告人: 龚 军 导师: 武成岗 时间: 2012年3月
内容 • 研究意义 • 研究背景 • 优化进程框架 • 非对齐优化在优化框架下的应用 • 总结与展望
内容 • 研究意义 • 研究背景 • 优化进程框架 • 非对齐优化在优化框架下的应用 • 总结与展望
研究意义 • 二进制翻译(Binary Translation) • 解决遗产代码的问题 • 性能优化 • 指令模拟与仿真 • 优化进程框架 • 充分利用多核(如:龙芯3A/3B)的优势,让主程序和优化进程并发地执行,降低优化进程的优化开销,同时还能产生高质量的本地码,从而提高程序运行效率
内容 • 研究意义 • 研究背景 • 优化进程框架 • 非对齐优化在优化框架下的应用 • 总结与展望
研究背景 • 直接在主程序中做优化 • 在做优化的同时,主程序必须停下来,直到优化完成,这样就导致了会有一定的优化开销 • 如Dynamo(PLDI’00)、DynamoRIO(CGO’03)
研究背景 • 多线程优化框架 • ADORE(JILP’04) • 在执行原有程序的基础上另起一个线程Profile和优化热的Trace • Trident(PACT’05) • 在ADORE的基础上做了一定的改进,它主要是充分利用了硬件的特性,将Profile热Trace的工作交给硬件去完成 • ARCSIM(PLDI’11) • 利用多线程进行并行编译,同时采用了一个有效的任务分配方法有效地把优化任务分配给多个线程
研究背景 • 动态翻译系统DigitalBridge • 源机器为IA-32体系结构,目标机器为MIPS体系结构 • DigitalBridge进程空间的布局(用户空间只有2G) • 更适合使用优化进程框架
内容 • 研究意义 • 研究背景 • 优化进程框架 • 非对齐优化在优化框架下的应用 • 总结与展望
优化进程框架 • 通信机制 • 优化进程加载X86代码 • 翻译单位 • 本地码链接
通信机制 • 采用共享存储区进行通信 优化进程 执行进程 执行进程的 Code Cache 优化进程的 Code Cache 共享存储区 共享存储区 tb_phys_hash tbs及nb_tbs 函数地址队列 共享存储区
共享资源的访问 • 如何保证共享资源的访问是不冲突的 • 通过互斥信号量保证不会有两个进程同时访问(读写、写读、写写)同一个共享资源 • 能保证tbs、tb_phys_hash、nb_tbs和函数地址队列的访问不冲突。 • 通过具有原子语义的本地码链接机制保证了不会出现两个进程同时操作同一块Code Cache的情况 • Code Cache地址区除了可被读和写,还可以执行,可能出现某一块内存在被一个进程修改时,另一个进程在此执行。
共享资源的访问 • X86程序是多进程程序时 • 共享存储区会被子进程继承,共享存储区中的内容会被共享,这样就会有多个进程对同一块共享存储区进行操作,导致要访问的数据在不同的进程空间
共享资源的访问 • 分析 fork/vfork/clone 父进程 子进程 X86程序 释放该共享存储区,重新mmap 子进程 clone(clone_func, …) 父进程 DBT系统
共享资源的访问 • 对于新的共享存储区的处理 • 方案一:不保留父进程中共享存储区中的旧本地码,我们将新mmap的共享存储区全部置为0 • 方案二:将父进程中共享存储区中的旧本地码拷贝到新的共享存储区
优化进程加载X86代码 • X86程序主程序体 • 在执行进程加载完X86程序主程序体后再fork出优化进程 • 动态加载共享库 • 在程序运行的过程中,可能会利用dlopen来动态加载共享库。 优化进程 执行进程 内存块1 libm.so f ??? dlopen
优化进程加载X86代码 • 解决方案 • 截获dlopen • 通过截获系统调用open和mmap来判断执行进程是否装载了库文件 ①fd =open(libm.so), 记录(fd, libm.so) 优化进程 执行进程 libm.so ②ret = mmap(fd, …), 记录(fd, ret) ④ret = mmap(…) ③传递libm.so和ret信息
翻译单位 • 以函数为单位进行翻译 • 在优化进程中的以函数为单位进行翻译,减少不必要的本地码指令
翻译单位 • 以基本块为单位进行翻译(执行进程中的翻译方法) • Block A: • … • bne &zf, label_for_success • nop • b native_addr_of_block_b • nop • nop • lui a7, x86_addr_of_block_b >> 16 • ori a7, x86_addr_of_block_b • jrra • nop • label_for_success: b native_addr_of_block_c • nop • nop • nop • lui a7, x86_addr_of_block_c >> 16 • ori a7, x86_addr_of_block_c • jrra • nop
翻译单位 • 以函数为单位进行翻译(优化进程中的翻译方法) • Block A: • … • bne &zf, ??? • nop • Block B: ….
翻译单位 • 以函数为单位进行翻译(优化进程中的翻译方法) • Block A: • … • bne &zf, native_addr_of_block_c • nop • Block B: …. 超过跳转范围,怎么办?
翻译单位 • Block A: • … • j label_for_jmp • nop • Block B: … • … • //该函数本地码结尾 • label_for_jmp: bne &zf, label_success • nop • j native_addr_of_block_b • nop • label_success: j native_addr_of_block_c • nop
本地码链接 • 作用 • 将在执行进程产生的本地码中运行的线程引导到优化进程产生的本地码中运行 • 优化进程产生的本地码链接到执行进程产生的本地码 • 避免程序中上下文切换,以及减小本地码查找的开销,这些开销对于程序性能有很大的影响 • 优化进程产生的本地码链接到优化进程产生的本地码 • 执行进程产生的本地码链接到执行进程产生的本地码 • 优化进程产生的本地码链接到执行进程产生的本地码
本地码链接 • 作用 • 将在执行进程产生的本地码中运行的线程引导到优化进程产生的本地码中运行 • 优化进程产生的本地码链接到执行进程产生的本地码 • 避免程序中上下文切换,以及减小本地码查找的开销,这些开销对于程序性能有很大的影响 • 优化进程产生的本地码链接到优化进程产生的本地码 • 执行进程产生的本地码链接到执行进程产生的本地码 • 优化进程产生的本地码链接到执行进程产生的本地码
本地码链接 • 优化进程产生的本地码链接到执行进程产生的本地码 • 要避免在有线程在某段本地码区间执行的情况下,由于本地码链接导致出错。
本地码链接 • 优化进程产生的本地码链接到执行进程产生的本地码
本地码链接 • 优化进程产生的本地码链接到执行进程产生的本地码
本地码链接 • 执行进程产生的本地码链接到优化进程产生的本地码 通过上下文切换中记住RA寄存器的值,然后得到待链接的地址
本地码链接 • 执行进程产生的本地码链接到优化进程产生的本地码
内容 • 研究意义 • 研究背景 • 优化进程框架 • 非对齐优化在优化框架下的应用 • 总结与展望
非对齐优化在优化框架下的应用 • 非对齐优化介绍 • 非对齐优化应用到优化框架 • 实验数据与分析
非对齐优化介绍 • 非对齐访问 • 内存的访问分为对齐访问和非对齐访问 • 内存的地址是否是要访问的内容大小的整数倍 • 处理非对齐可以从硬件和软件两个层次解决 • 从硬件层次解决,非对齐的开销相对较小 • 从软件层次解决,MIPS、Alpha等系统里只能进行对齐的访问,当发生非对齐访问时,会发生异常,然后由操作系统处理
非对齐优化介绍 • 非对齐优化 • 直接处理(ATEC’05) • 静态剖析(Micro’98) • 动态剖析(Micro’03) • 异常处理机制(CGO’09) • 动态剖析 + 异常处理机制 (CGO’09) • 持续剖析(CGO’09)
非对齐优化应用到优化框架 • 动态剖析 + 异常处理机制 • 在执行进程中,在动态剖析阶段统计指令发生非对齐的信息,然后利用这些信息指导给优化进程的翻译;在动态剖析阶段没有发现的非对齐由非对齐异常处理函数处理 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
非对齐优化应用到优化框架 • 应用到框架中会遇到以下问题 • 非对齐的信息在执行进程空间,因此优化进程不能直接得到非对齐信息 • 非对齐信息传递的时机 • 解决方案 • 非对齐信息的传递 • 用位图传递,每个位代表一条指令是否发生过非对齐 • 非对齐信息传递的时机 • 方案一:控制执行进程传递函数地址到优化进程的时机。设置一个阈值,当执行进程中函数的执行次数超过阈值时,将该函数地址传递给优化进程 • 方案二:控制优化进程翻译函数的时机,当优化进程得到待翻译的函数地址后,等待一定的时间,然后进行翻译
实验数据与分析 EH:异常处理的机制 DPEH:动态剖析+异常处理机制 TH:解释执行次数的阈值 TW: 优化进程等待的时间
实验数据与分析 • 非对齐信息的传递数量的统计 • 非对齐的指令的数量
内容 • 研究意义 • 研究背景 • 优化进程框架 • 非对齐优化在优化框架下的应用 • 总结与展望
总结与展望 • 总结 • 设计并实现了优化进程框架 • 优化进程框架中的模块:通信机制、优化进程加载X86代码、翻译单位、翻译顺序、本地码链接、优化进程的退出机制 • 将非对齐优化应用到优化进程框架 • 非对齐信息的传递方式 • 非对齐信息的传递时机 • 下一步工作 • 进一步优化该框架,如:以 Trace为单位进行翻译 • 在该优化框架上做更多的优化