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

24
中中中中 中中中中中中中中中中 Replay 中中中中 中中中 中中 中中中 中中2011 中 1 中

description

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

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

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

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

报告人:刘泽善导师: 武成岗时间: 2011 年 1 月

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

目录 研究意义 研究背景 二进制翻译下的 Replay 系统

共享内存访问依赖 系统调用的处理 环境变量的处理

项目及课程完成情况

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

研究意义 二进制翻译( BT )

在龙芯上兼容执行 X86 程序,丰富龙芯上的应用软件 e.g. flashplayer

多线程程序 flashplayer, firefox, mysql, apache, splash 具有不确定性,调试困难,尤其在 DBT 下

Replay 对二进制翻译器的意义 研究表明,调试一个并发错误所花费的时间取决于

错误重现的速度 Replay 是重现错误的有效方法 对提高 DBT 的健壮性具有重要意义

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

研究意义 降低 Replay 系统开销的意义

学术界和工业界关注的重点 时间敏感的程序的需求

研究现状 PinPlay 实现了本地的记录重放系统,但开销巨大 就调研所知目前尚无二进制翻译下的记录重放系统

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

目录 研究意义 研究背景 二进制翻译下的 Replay 系统

共享内存访问依赖 系统调用的处理 环境变量的处理

项目及课程完成情况

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

背景介绍 PinPlay(CGO’10) 详尽的分析了影响多线程的

不确定性因素 起始栈位置的改变 代码和数据位置的改变 程序二进制码以及共享库代码的改变 处理器特定指令行为的改变 信号 未初始化内存的读 系统调用行为的改变 共享内存访问依赖

DBT 下不存在DBT 下不存在

静态编译避免静态编译避免

SPLASH2 不存在SPLASH2 不存在

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

背景介绍 -Transitive Reduction

ji

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

31 Flag := 1

32 Share1 := 5

33 Share2 := 6

34 Flag := 0

35 Local1 := 3

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

目录 研究意义 研究背景 二进制翻译下的 Replay 系统

共享内存访问依赖 系统调用的处理 环境变量的处理

项目及课程完成情况

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

共享内存访问依赖

i:31j:15 和 i:34j:18 为 W/R 依赖, j:15i:34 为 R/W 依赖

ji

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

31 Flag := 1

32 Share1 := 5

33 Share2 := 6

34 Flag := 0

35 Local1 := 3

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

共享内存访问依赖 -记录

FDR(ISCA’03) 的软件实现,结合了 Transitive Reduction tid1:pc1:ic1tid2:pc2:ic2 上图中记录的结果:

i:pc{flag := 1}:31j:pc{$r1 := flag}:15 j:pc{$r1 := flag}:15i:pc{flag := 0}:34 i:pc{flag := 0}:34j:pc{$r1 := flag}:18

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

共享内存访问依赖 -重放 每个依赖关联一把锁,初始化成锁闭状态,弧

头 spin_lock ,弧尾 spin_unlock

spin_lock(lock1)spin_unlock(lock2)

spin_lock(lock3)

spin_lock(lock2)spin_unlock(lock3)

lock2

lock3

lock1

ji

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

31 Flag := 1

32 Share1 := 5

33 Share2 := 6

34 Flag := 0

35 Local1 := 3

spin_unlock(lock1)

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

共享内存访问依赖 -重放 每条访存指令有两个队列(弧尾队列、弧头队

列),按指令计数从低到高排序,避免查找

访存指令访存指令

IC1 IC2 IC3 … ICm

IC1’ IC2’ IC3’ … ICn

依赖弧尾队列, IC递增

依赖弧头队列, IC递增

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

共享内存访问依赖 -优化措施 栈内存访问无需插桩 利用龙芯富余的临时寄存器,手工编写了插桩

函数,几乎无上下文切换 内存地址关联数据结构的优化组织

查找约 20 条 <= 64M 实验选择 x = 6

16bits (16-x)bitsaddr xbits

第一层映射

CIC[P]

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

共享内存访问依赖 -优化措施

写 log 文件的优化 线程写入自己的缓存区,程序结束时再写入统一的

log 文件,避免竞争 尚未实现,但有价值的优化措施

访存地址关联数据结构的缓存优化(减少近 20 条指令)

根据程序的特点进行特定的优化 Linux 多线程程序多用 pthread 库编写 粗细粒度结合重放方法(同步点插桩、指令级插桩结合)

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

共享内存访问依赖 -优化措施

重放插桩函数的手工编写 访存依赖的静态分析冗余消除

方法:求依赖图所有点对最长路径,只保留路径上的访存依赖减少约1~10% 的依赖

T0 T1 T2 T3

10:read(x)

21:write(x)

32:write(x)

43:write(x)

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

系统调用

gettimeofday 记录运行时保存,重放运行时恢复

futex 唤醒序问题 join子线程问题

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

系统调用 -futex解决方法:记录wakewait序重放时:不执行 wait/wake ,重用访存依赖的方法记录恢复返回值

T0 T1 T2 T3

wait wait wait wake(1)

wake(1)wake(1)wake(0)

futex 的唤醒序问题, wake(i) 的 i 是唤醒的线程数目

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

系统调用 -futex

父线程 join子线程 存在 exitwait 序 父线程只有在发现子线程没有退出时才 wait 给定父子线程,序是否存在不确定

解决方法 等待机制保证该唤醒序一定存在

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

环境变量

如 $OLDPWD 不同 影响 getenv() 的执行行为 解决方法:

记录运行:程序启动时记录下所有的环境变量 重放运行:清空所有的环境变量 clearenv() ,再恢复成记录的环境变量状态 putenv()

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

待完成的内容 降低记录重放的开销

实现已经想到的优化措施 阅读相关文献和调试系统的过程中发掘其他的有效

优化措施 控制其他的不确定性因素

代码和数据位置的改变 信号

二进制翻译下多线程重放系统对实际调试的作用

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

实验结果splash2 (8-threaded) logger slowdown replayer slowdown log size

barnes 26.9042332 82.7578071 142.35Mfmm 12.4791017 27.9332502 4.56Mocean 12.2781908 26.9330855 8.66M

raytrace 6.94710744 4.06446281 211.63Kvolrend 1.00451286 1.00848349 288.23K

water-nsquared 11.8494152 18.1461988 1.29Mwater-spatial 9.94125874 22.0937063 1.84M

cholesky 23.3670525 41.6800381 575.43Kfft 2.09278351 2.46391753 38.41Klu 7.01724138 3.4204244 189.94K

radix 8.27692308 2.36615385 97.59K平均值 11.10526 21.16978 14.55M

logger slown replayer slowdown log sizeSPECOMP2001(4-threaded) 117 25 91M

McBench(4-threaded) 146 36 146M

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

目录 研究意义 研究背景 二进制翻译下的 Replay 系统

共享内存访问依赖 系统调用的处理 环境变量的处理

项目及课程完成情况

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

项目及课程完成情况

时间 科研项目 承担任务2008/03-2010/07

参 与 开 发 调 试Loongson/Linux上针对 X86-32 体系结构的动态和静态的二进制翻译器

负责了部分指令的优化翻译,设计实现了符号扩展优化、库包装优 化 、 Shadow Stack 优化、静态翻译代码布局优化等优化措施,调试系统的实际应 用 ( Adobe Reader, Flashplayer)

2010/07-2011/01

独立开发二进制翻 译 系 统 下 的Replay系统

研究二进制翻译系统下 Replay 系统的记录重放优化措施

参加项目

课程 分数 学分 是否学位课

自然辩证法与科技革命 89 3 是通识案例必修课 0 否硕士学位英语(免修) 66 3 是组合数学 93 3 否高性能计算机系统 78 3 是编译程序高级教程 86 3 是并行处理 99 3 是科技文献和网络资源实用

技巧 93 1 否

体育类公共选修课 通过 0.5 否中国特色社会主义理论与

实践 81 1 是

通识案例必修课 通过 1 否音乐素养与合唱艺术 87 0.5 否科技法概论 74 1 否组合优化 86 3 否人机交互界面理论与技术 87 3 是高性能并行计算 83 2 否高性能计算机体系结构与

设计 88 1 否

软件测试 82 1 否先进计算机和软件技术系

列讲座 通过 0.5 否

Web 2.0技术系列讲座 通过 0.5 否学分总计 : 34 学位课学分总计 : 19

课程学习

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