1 / 24

中期报告:二进制翻译下的多线程 Replay 系统

中期报告:二进制翻译下的多线程 Replay 系统. 报告人:刘泽善 导师: 武成岗 时间: 2011 年 1 月. 目录. 研究意义 研究背景 二进制翻译下的 Replay 系统 共享内存访问依赖 系统调用的处理 环境变量的处理 项目及课程完成情况. 研究意义. 二进制翻译( BT ) 在龙芯上兼容执行 X86 程序,丰富龙芯上的应用软件 e.g. flashplayer 多线程程序 flashplayer, firefox, mysql, apache, splash 具有不确定性,调试困难,尤其在 DBT 下

deidra
Download Presentation

中期报告:二进制翻译下的多线程 Replay 系统

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 中期报告:二进制翻译下的多线程Replay系统 报告人:刘泽善 导师: 武成岗 时间: 2011年1月

  2. 目录 • 研究意义 • 研究背景 • 二进制翻译下的Replay系统 • 共享内存访问依赖 • 系统调用的处理 • 环境变量的处理 • 项目及课程完成情况

  3. 研究意义 • 二进制翻译(BT) • 在龙芯上兼容执行X86程序,丰富龙芯上的应用软件e.g. flashplayer • 多线程程序 • flashplayer, firefox, mysql, apache, splash • 具有不确定性,调试困难,尤其在DBT下 • Replay对二进制翻译器的意义 • 研究表明,调试一个并发错误所花费的时间取决于错误重现的速度 • Replay是重现错误的有效方法 • 对提高DBT的健壮性具有重要意义

  4. 研究意义 • 降低Replay系统开销的意义 • 学术界和工业界关注的重点 • 时间敏感的程序的需求 • 研究现状 • PinPlay实现了本地的记录重放系统,但开销巨大 • 就调研所知目前尚无二进制翻译下的记录重放系统

  5. 目录 • 研究意义 • 研究背景 • 二进制翻译下的Replay系统 • 共享内存访问依赖 • 系统调用的处理 • 环境变量的处理 • 项目及课程完成情况

  6. 背景介绍 • PinPlay(CGO’10)详尽的分析了影响多线程的不确定性因素 • 起始栈位置的改变 • 代码和数据位置的改变 • 程序二进制码以及共享库代码的改变 • 处理器特定指令行为的改变 • 信号 • 未初始化内存的读 • 系统调用行为的改变 • 共享内存访问依赖 DBT下不存在 静态编译避免 SPLASH2不存在

  7. 14 Local2 := 2 15 $r1 := Flag 16 Bneq $r1, $r0, -1 17 Nop 18 $r1 := Flag 19 Bneq $r1, $r0, -1 20 Nop 21 Y := Share1 22 Z := Share2 背景介绍-Transitive Reduction i j 31 Flag := 1 32 Share1 := 5 33 Share2 := 6 34 Flag := 0 35 Local1 := 3

  8. 目录 • 研究意义 • 研究背景 • 二进制翻译下的Replay系统 • 共享内存访问依赖 • 系统调用的处理 • 环境变量的处理 • 项目及课程完成情况

  9. i j 31 Flag := 1 14 Local2 := 2 15 $r1 := Flag 32 Share1 := 5 16 Bneq $r1, $r0, -1 33 Share2 := 6 34 Flag := 0 17 Nop 18 $r1 := Flag 35 Local1 := 3 19 Bneq $r1, $r0, -1 20 Nop 21 Y := Share1 22 Z := Share2 共享内存访问依赖 • i:31j:15和i:34j:18为W/R依赖,j:15i:34为R/W依赖

  10. 共享内存访问依赖-记录 • FDR(ISCA’03)的软件实现,结合了Transitive Reduction • tid1:pc1:ic1tid2:pc2:ic2 • 上图中记录的结果: • i:pc{flag := 1}:31j:pc{$r1 := flag}:15 • j:pc{$r1 := flag}:15i:pc{flag := 0}:34 • i:pc{flag := 0}:34j:pc{$r1 := flag}:18

  11. i j spin_unlock(lock1) 31 Flag := 1 lock1 14 Local2 := 2 spin_lock(lock1) spin_unlock(lock2) 15 $r1 := Flag 32 Share1 := 5 lock2 16 Bneq $r1, $r0, -1 33 Share2 := 6 spin_lock(lock2) spin_unlock(lock3) 34 Flag := 0 17 Nop lock3 18 $r1 := Flag spin_lock(lock3) 35 Local1 := 3 19 Bneq $r1, $r0, -1 20 Nop 21 Y := Share1 22 Z := Share2 共享内存访问依赖-重放 • 每个依赖关联一把锁,初始化成锁闭状态,弧头spin_lock,弧尾spin_unlock

  12. IC1 IC2 IC3 … ICm 依赖弧尾队列,IC递增 访存指令 IC1’ IC2’ IC3’ … ICn 依赖弧头队列,IC递增 共享内存访问依赖-重放 • 每条访存指令有两个队列(弧尾队列、弧头队列),按指令计数从低到高排序,避免查找

  13. addr 16bits (16-x)bits xbits 第一层映射 CIC[P] 共享内存访问依赖-优化措施 • 栈内存访问无需插桩 • 利用龙芯富余的临时寄存器,手工编写了插桩函数,几乎无上下文切换 • 内存地址关联数据结构的优化组织 • 查找约20条 • <= 64M • 实验选择x = 6

  14. 共享内存访问依赖-优化措施 • 写log文件的优化 • 线程写入自己的缓存区,程序结束时再写入统一的log文件,避免竞争 • 尚未实现,但有价值的优化措施 • 访存地址关联数据结构的缓存优化(减少近20条指令) • 根据程序的特点进行特定的优化 • Linux多线程程序多用pthread库编写 • 粗细粒度结合重放方法(同步点插桩、指令级插桩结合)

  15. 共享内存访问依赖-优化措施 • 重放插桩函数的手工编写 • 访存依赖的静态分析冗余消除 T0 T1 T2 T3 • 方法:求依赖图所有点对最长路径,只保留路径上的访存依赖 • 减少约1~10%的依赖 10:read(x) 21:write(x) 32:write(x) 43:write(x)

  16. 系统调用 • gettimeofday • 记录运行时保存,重放运行时恢复 • futex • 唤醒序问题 • join子线程问题

  17. T0 T1 T2 T3 wait wait wait wake(1) wake(1) wake(1) wake(0) 系统调用-futex • 解决方法: • 记录wakewait序 • 重放时:不执行wait/wake,重用访存依赖的方法 • 记录恢复返回值 futex的唤醒序问题,wake(i)的i是唤醒的线程数目

  18. 系统调用-futex • 父线程join子线程 • 存在exitwait序 • 父线程只有在发现子线程没有退出时才wait • 给定父子线程,序是否存在不确定 • 解决方法 • 等待机制保证该唤醒序一定存在

  19. 环境变量 • 如$OLDPWD不同 • 影响getenv()的执行行为 • 解决方法: • 记录运行:程序启动时记录下所有的环境变量 • 重放运行:清空所有的环境变量clearenv(),再恢复成记录的环境变量状态putenv()

  20. 待完成的内容 • 降低记录重放的开销 • 实现已经想到的优化措施 • 阅读相关文献和调试系统的过程中发掘其他的有效优化措施 • 控制其他的不确定性因素 • 代码和数据位置的改变 • 信号 • 二进制翻译下多线程重放系统对实际调试的作用

  21. 实验结果

  22. 目录 • 研究意义 • 研究背景 • 二进制翻译下的Replay系统 • 共享内存访问依赖 • 系统调用的处理 • 环境变量的处理 • 项目及课程完成情况

  23. 项目及课程完成情况 • 参加项目 • 课程学习

  24. 谢谢各位老师和同学

More Related