二进制翻译下的多线程 Replay 系统

38
二二二二二二二二二二 Replay 二二二二 二二二 二二 二二二 二二2011 二 5 二

description

二进制翻译下的多线程 Replay 系统. 报告人:刘泽善 导师: 武成岗 时间: 2011 年 5 月. 目录. 研究意义 背景知识和相关研究工作 研究内容与贡献 系统评测与分析. 研究意义. Replay 系统的应用广泛 程序调试。多线程程序的调试 [CGO’10,ISCA’05] 并行化程序分析。在线 Replay 分离程序的执行和分析过程降低开销 [ASPLOS’08, USENIX’08] 入侵检测 [OSDI’02] 错误容忍 [SOSP’05] 计算机系统结构研究 [MoBS’07,SIGMETRICS’06]. 研究意义. - PowerPoint PPT Presentation

Transcript of 二进制翻译下的多线程 Replay 系统

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

二进制翻译下的多线程Replay 系统

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

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

目录 研究意义 背景知识和相关研究工作 研究内容与贡献 系统评测与分析

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

研究意义 Replay 系统的应用广泛

程序调试。多线程程序的调试[CGO’10,ISCA’05]

并行化程序分析。在线 Replay 分离程序的执行和分析过程降低开销 [ASPLOS’08, USENIX’08]

入侵检测 [OSDI’02] 错误容忍 [SOSP’05] 计算机系统结构研究

[MoBS’07,SIGMETRICS’06]

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

研究意义

Replay 系统对二进制翻译系统( DBT )的意义 DBT 支持多线程程序,难以调试 重现错误的有效方法,调试多线程程序的有效工具 对提高 DBT 的健壮性具有重要意义

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

目录 研究意义 背景知识和相关研究工作 研究内容与贡献 系统评测与分析

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

背景知识和相关研究工作

本文 Replay 系统应用需求:辅助二进制翻译器的多线程错误调试

多线程错误 数据竞争 , 原子性违反 , 顺序性违反

Thread 1S1: if(thd->proc_info){S2: fputs(thd->proc_info, …);}

MySQL hd_innodb.cc

Thread 2 …

S3: thd->proc_info = NULL; …

Buggy interleaving

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

7

多线程程序调试% gcc hash.c% a.outSegmentation fault%

% gdb a.outgdb> runProgram received SIGSEGV.In get() at hash.c:4545 a = bucket->d;

% gdb a.outgdb> runProgram exited normally.gdb>

% gcc para-hash.c% a.outSegmentation fault%

% gdb a.out loggdb> runProgram received SIGSEGV.In get() at para-hash.c:6767 a = bucket->d;

% gcc para-hash.c% a.outSegmentation faultRace recorded in “log”%

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

背景知识和相关研究工作

二进制翻译的下多线程错误调试更加困难 源输入程序 二进制翻译系统

对源输入程序记录和重放 翻译器的错误 => 翻译后程序的随机错误 本地码的错误 => 相应翻译器模块的错误

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

Buggy Translation

S0: g_data -1

Parent

Child

S1: g_data 1

S3: if (0 == g_data ) error(…);

S1’: g_data 0

S1’: g_data 0

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

多线程 Replay 系统关键问题 PinPlay(CGO’10) 详尽的分析了影响多线程的

不确定性因素 1. 起始栈位置的改变 2. 代码和数据位置的改变 3. 程序二进制码以及共享库代码的改变 4. 处理器特定指令行为的改变 5. 信号 6. 未初始化内存的读 7. 系统调用行为的改变 8. 共享内存访问顺序(关键问题)

DBT 下不存在

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

具有代表性的 Replay 系统 - 硬件

FDR(ISCA’03) , BugNet(ISCA’05) 缓存一致性协议的的一致性消息( coherence

message )上附加额外信息来检测多核之间的访存依赖

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

具有代表性的 Replay 系统 - 软件 InstantReplay(IEEE Tras.’87)

记录共享对象的访问顺序 假设没有数据竞争

PinPlay(CGO’10) 共享内存: FDR 的软件实现——记录 80~146X ,

重放 26~36X PRES 和 ODR(SOSP’09)

只要求错误重现,并不要求的数据竞争情况一致 正式运行中只记录部分信息 重放:启发式的搜索算法不断的尝试

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

具有代表性的 Replay 系统 - 软件

SMP-ReVirt(VEE’08) 多处理器虚拟机的记录和重放系统 硬件页保护机制检测共享内存的读写

DoublePlay(ASPLOS’11) 记录每个区间中线程的调度,不需要记录共享内存

的访问 需要修改内核及源代码

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

相关工作总结

基于访存指令插桩的方法,原因 硬件方法:还没有在实际的处理器采用 只记录少量信息,离线重构:重构算法复杂 页保护的方法:假共享( false sharing )及页竞争

的影响,线程数量多时性能不好 需要内核支持以及修改源码的方法:需要源码

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

目录 研究意义 背景知识和相关研究工作 研究内容与贡献 系统评测与分析

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

16

访存依赖

ld A

Thread I Thread J

Recording

st B

st C

sub

ld B

add

st C

ld B

st A

st C

Thread I Thread J

Replay

Log

ld D

st D

ld A

st B

st C

sub

ld B

add

st C

ld B

st A

st C

ld D

st D

访存依赖 遵循依赖关系

应用了传递简约优化 (Transitive Reduction)[PADD’93,ISCA’03]

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

17

访存依赖关系的检测

1

2

3

1

2

3

4

ld A

Thread I Thread J

Recording

st B

st C

add

st C

ld B

st A

A.readers.add(I, 1)

if (C.writer != I) log(WAW)foreach C.readers if (reader != I) log(WAR)C.readers.clear( )C.writer = (I, 3)

B.writer = (I, 2) C.writer =(J, 2)

if (B.writer != J) log(RAW)B.readers.add(J,3)

A.readers

A.writer

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

VIC 0 0 0 0VIC 1 0 0 1VIC 2 0 0 2

FDR 的方法

1

2

3

1

2

3

4

ld A

Thread I Thread J

Recording

st B

st C

add

st C

ld B

st A

A.readers.add(I, 1)

if (C.writer != I) log(WAW)foreach C.readers if (reader != I) log(WAR)C.readers.clear( )C.writer = (I, 3)

B.writer = (I, 2) C.writer =(J, 2)

if (B.writer != J) log(RAW)B.readers.add(J,3)

A.readers

A.writer

VIC 3 2 0 2VIC 3 2 2 3VIC 4 2 2 4

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

FDR 方法的不足

原因: 1. 基于一致性协议 2. 减少硬件复杂性

Thread i Thread j Thread k1: st A2: ld B 1: st B 2: ld A 1: st B 2: st A

FDR方法不能消除的访存依赖

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

TR 算法的不足 FDR 的设计者徐旻的博士论文中提到的 TR 算

法可以消除上述冗余 不足:每个内存块需要最多 P+1 个 P维向

量, P 为线程数,内存开销大Data Structures:timestamp_t := array {int t1, int t2, …, int tn}; //n是线程数readers_t := map {<int thread_i, timestamp_t read_ts>, …}// 读者集合block_history_t := structure {int writer, timestamp_t w_ts, readers_t readers}Variables:线程 i私有的:timestamp_t VIC;// j != i 时 VIC[j] 为线程 i 传递依赖于线程 j 的最大IC , VIC[i] 为访存指令计数。初始化成 {0, 0, …, 0}每个内存块关联的数据结构 :block_history_t block;

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

TR 算法的不足 依赖关系无论是否需要记录都有对两个向量的合并操作,时间开销大

ANALYSE(t, addr)// 访存类型 t: r, w, rw, 访存地址 addr2 if t & w……3 then foreach <j, ts> in block.readers……6 VIC merge_vector_timestamp(VIC, ts)// 更新 VIC……9 VIC merge_vector_timestamp(VIC, block.w_ts)13 else …………15 VIC merge_vector_timestamp(VIC, block.w_ts)

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

基于位标识的方法

Data Structures:timestamp_t : array {int t1, int t2, ..., int tP};//P是线程数block_history_t : structure {int wtid, int wic, int rmask, timestamp_t rics}// 内存块最近的写者 wtid 及其访存计数 wic ,最近的读者访存计数 rics ,有效读者标识 rmaskVariables:线程 i私有的 :int IC;// 访存指令计数timestamp_t VIC;//VIC[j] 线程传递依赖的线程 j 的最大IC , j != i每个内存块关联的数据结构 :block_history_t block;

每个内存块只需一个向量

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

基于位标识的方法ANALYSE(t, addr)// 访存类型 t: r, w, rw; 访存地址 addr1 IC IC + 12 找到 addr 的关联数据结构 block3 if t & w 4 then if 0 == rmask//查看写者,记录 WAW 依赖5 then if (block.wtid != i) && (block.wic > VIC[block.wtid])6 then VIC[block.wtid] block.wic7 record dependence block.wtid:block.wic i:IC8 else tid 09 while block.rmask != 0//遍历所有的读者,记录 WAR 依赖10 do if (block.rmask & 1) && (tid != i)11 then if block.rics[tid] > VIC[tid]12 then VIC[tid] block.rics[tid]13 record dependence tid:block.rics[tid] i:IC14 block.rmask block.rmask >> 115 tid tid + 116 block.wtid i17 block.wic IC18 block.rmask 019 else // 记录 RAW 依赖20 if (block.wtid != i) && (block.wic > VIC[block.wtid])21 then VIC[block.wtid] block.wic22 record dependence block.wtid:block.wic i:IC23 rmask |= (1 << i)24 block.rics[i] IC

Thread i Thread j Thread k1: st A2: ld B 1: st B 2: ld A 1: st B 2: st A

FDR方法不能消除的访存依赖

1. 检测位标识整数的值,消除FDR 不能消除的访存依赖

2. 无需合并向量

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

Thread i Thread j Thread k 1: ld B 2: ld A 1: st A 1: st A 2: st B

本文及 FDR均不能消除的访存依赖

平均 3.5 依赖 /1万访存操作

Page 25: 二进制翻译下的多线程 Replay 系统

Replay 系统降低开销的方法 -1

栈内存访问无需插桩 平均 37% 最高 84%

Page 26: 二进制翻译下的多线程 Replay 系统

Replay 系统降低开销的方法 -2

充分利用目标平台的寄存器资源 龙芯的寄存器资源相对于 X86-32 要充足得多 调用者保存: 18 个,上下文切换开销大 翻译时利用富余寄存器手工编写插桩函数 专用的访存指令计数的寄存器

Page 27: 二进制翻译下的多线程 Replay 系统

访存指令计数

DoublePlay 采用记录指令 PC 以及分支计数的方法记录线程调度序,分支计数硬件 PMU提供

PMU 的计数并不区分线程 二进制翻译的影响很难做到精确的计数 龙芯寄存器资源充裕——专用寄存器计数

Page 28: 二进制翻译下的多线程 Replay 系统

Replay 系统降低开销的方法 -3

访存地址关联数据结构优化查找 只需要 ~10 指令 选择合适大小的内存块,空间开销不大

16bits (16-x)bits addr xbits

映射表

关联数据结构

Page 29: 二进制翻译下的多线程 Replay 系统

Replay 系统降低开销的方法 -其他

访存依赖关系记录的优化 保存在线程私有缓存中,满时输出 减少文件竞争及 I/O 输出的开销

内存访问局部性优化 当前使用的关联数据结构很可能被下次内存访问使

用 每个线程缓存当前指令访问的关联数据结构地址

Page 30: 二进制翻译下的多线程 Replay 系统

目录 研究意义 背景知识和相关研究工作 研究内容与贡献 系统评测与分析

Page 31: 二进制翻译下的多线程 Replay 系统

系统评测与分析

优化器

BT控制器

本地码执行器

解释器

翻译器

装载器

X86二进制文件映像

中间表示

Code Cache

X86二进制程序

Memory

Code Cache管理器

反汇编器

二进制翻译系统 DigitalBridge

Page 32: 二进制翻译下的多线程 Replay 系统

系统评测与分析 机器环境

龙芯 2F 单核 @800MHz 1G 内存

Benchmark : Stanford 的多线程测试包 SPLASH-2 :

复杂应用: barnes、 fmm、 ocean、 raytrace、 water-nsquared、 water-spatial、

核心程序: cholesky、 fft、 lu、 radix

Page 33: 二进制翻译下的多线程 Replay 系统

系统评测与分析

相对 FDR 记录性能提高 :平均: 1.49%最高: 9.92%

相对 TR 记录性能提高 :平均: 18.4%大多数: 30+%

Page 34: 二进制翻译下的多线程 Replay 系统

系统评测与分析Baseline:无 Replay功能

记录运行 2.9/3.4/4.3 X最大 10.4X

重放 1.9/3.8/7.9X

Page 35: 二进制翻译下的多线程 Replay 系统

系统评测与分析

空间开销 映射表项数

66/77/95 最大 1047 512B

内存块时0.39/0.68/1.39M

最大 14.6M

Page 36: 二进制翻译下的多线程 Replay 系统

系统评测与分析 不同内存块大小对记录运行的影响 (8Thrd) 512B 块大小性能较好

Page 37: 二进制翻译下的多线程 Replay 系统

总结 动态二进制翻译器平台下源输入程序的确定性

Replay 系统 辅助调试二进制翻译器的并发错误 记录 2.9/3.4/4.3X ,重放 1.9/3.8/7.9X

基于位标识的记录共享内存交互的算法 相对于 FDR 方法,存在读者时不再检测写者 相对于 TR 算法

时间优势。无需合并向量。 空间优势。每个内存块一个向量。

基于指令插桩的纯软件的 Replay 系统的优化

Page 38: 二进制翻译下的多线程 Replay 系统

谢谢各位老师和同学