replay n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
二进制翻译下的多线程 Replay 系统 PowerPoint Presentation
Download Presentation
二进制翻译下的多线程 Replay 系统

Loading in 2 Seconds...

play fullscreen
1 / 45

二进制翻译下的多线程 Replay 系统 - PowerPoint PPT Presentation


  • 234 Views
  • Uploaded on

二进制翻译下的多线程 Replay 系统. 报告人:刘泽善 导师: 武成岗 时间: 2011 年 3 月. 论文贡献. 动态二进制翻译器平台下源输入程序的确定性 Replay 系统 记录 2.9/3.4/4.3X ,重放 1.9/3.8/7.9X 基于位标识的记录共享内存交互的算法 整数位标识读者集合 时间优势。无需合并向量。 空间优势 。 每个内存块一个向量。 8Thrd 512B 块: 120B/ 内存块,平均 <2M ,最大 14.6M 基于访存指令插桩的纯软件的 Replay 系统的 优化. 目录. 研究意义 背景知识和相关研究工作

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '二进制翻译下的多线程 Replay 系统' - simon-moreno


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
replay

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

报告人:刘泽善

导师: 武成岗

时间: 2011年3月

slide2
论文贡献
  • 动态二进制翻译器平台下源输入程序的确定性Replay系统
    • 记录2.9/3.4/4.3X,重放1.9/3.8/7.9X
  • 基于位标识的记录共享内存交互的算法
    • 整数位标识读者集合
    • 时间优势。无需合并向量。
    • 空间优势。每个内存块一个向量。8Thrd512B块:120B/内存块,平均<2M,最大14.6M
  • 基于访存指令插桩的纯软件的Replay系统的优化
slide3
目录
  • 研究意义
  • 背景知识和相关研究工作
  • 研究内容与贡献
  • 系统评测与分析
slide4
研究意义
  • Replay系统的应用广泛
    • 程序调试。多线程程序的调试
    • 反向调试。Time-Travel:reverse step/breakpoints/watchpoints
    • 并行化程序分析。在线Replay分离程序的执行和分析过程降低开销

cpu0

cpu1

cpu2

cpu3

cpu4

A

Speculate!

B

C

D

slide5
研究意义
  • 入侵检测。重现入侵前、入侵时及之后整个系统的状态
  • 错误容忍。ExtraVirt比较原执行和复制执行的输出来容忍处理器硬件的暂时性错误;发生灾难性错误而不能继续时由等价的重放执行重建最新的程序状态
  • 计算机系统结构研究。ReTrace重放时生成Trace,实现Trace的有效收集和存储
slide6
目录
  • 研究意义
  • 背景知识和相关研究工作
  • 研究内容与贡献
  • 系统评测与分析
slide7

Thread 1

S1: if(thd->proc_info){

S2: fputs(thd->proc_info, …);

}

MySQL hd_innodb.cc

Thread 2

S3: thd->proc_info = NULL;

Buggy interleaving

背景知识和相关研究工作
  • 本文Replay系统应用需求:辅助二进制翻译器的多线程错误调试
  • 多线程错误
    • Data race, atomicity violation, order violation
slide8
多线程程序调试

% gdba.out

gdb> run

Program received SIGSEGV.

In get() at hash.c:45

45 a = bucket->d;

  • % gcchash.c
  • % a.out
  • Segmentation fault
  • %

% gccpara-hash.c

% a.out

Segmentation fault

%

% gdb a.out

gdb> run

Program exited normally.

gdb>

% gccpara-hash.c

% a.out

Segmentation fault

Race recorded in “log”

%

% gdba.out log

gdb> run

Program received SIGSEGV.

In get() at para-hash.c:67

67 a = bucket->d;

slide9
背景知识和相关研究工作
  • 二进制翻译的下多线程错误调试更加困难
    • 源输入程序
    • 二进制翻译系统
  • 对源输入程序确定性记录和重放
replay1
多线程Replay系统关键问题
  • 单线程程序
    • 输入,中断(信号)
  • 多线程程序
    • 共享内存访问顺序
    • 单核执行:记录线程之间的调度顺序
    • 多核执行:?每一条访存指令都可能与其他线程竞争
  • 关键问题:如何高效的记录线程之间的共享内存交互
replay2
具有代表性的Replay系统-硬件
  • FDR(ISCA’03)
    • Cache一致性协议的的一致性消息(coherence message)上附加额外信息来检测多核之间的访存依赖
  • BugNet(ISCA’05)
    • 重放单个线程:每条读指令的结果一致
    • Cache的每个字上增加了一个FLL (First Load Log)位
    • 内存访问顺序:同FDR
replay3
具有代表性的Replay系统-硬件
  • Lee等(MICRO’09)
    • 不需要检测和记录共享内存依赖,离线重构
    • 修改BugNet的记录读指令结果的方法,Cache Miss时记录Cache Block的数据和指令计数
    • Satisfiability Modulo Theory, SMT solver离线求解出每个内存事件的全局序及部分序
replay4
具有代表性的Replay系统-硬件
  • LReplay(ISCA’10)
    • 多核处理器能够提供全局时钟
    • 记录访存指令的pending period信息
    • pending period不相交的两条指令存在物理时间序
    • pending period相交的访存指令——直接记录下他们执行序
replay5
具有代表性的Replay系统-软件
  • InstantReplay(IEEE Tras.’87)
    • 记录共享对象的访问顺序
    • 假设没有数据竞争
  • PinPlay(CGO’10)
    • 记录文件self-contained,记录重放跨操作系统
    • 实现了GDB的调试接口
    • 共享内存:FDR的软件实现——记录80~146X,重放26~36X
replay6
具有代表性的Replay系统-软件
  • PRES和ODR(SOSP’09)
    • 只要求错误重现,并不要求的数据竞争情况一致
    • 正式运行中只记录部分信息
    • 重放:启发式的搜索算法不断的尝试
  • SMP-ReVirt(VEE’08)
    • 多处理器虚拟机的记录和重放系统
    • 硬件页保护机制检测共享内存的读写
replay7
具有代表性的Replay系统-软件
  • Respec(ASPLOS’10)
    • Online replay, 2 Thrd 18%,4 Thrd 55%
    • external determinism:系统输出和最终机器状态一致
    • speculative execution: 只记录共享内存交互的少量信息,重放不一致则回滚
    • 修改内核和glibc
replay8
具有代表性的Replay系统-软件

Thread-parallel execution

REPLAY

Epoch-parallel execution

RECORD (uniparallelism)

CPU 0

CPU 1

CPU 2

CPU 3

CPU 4

CPU 5

CPU 6

CPU 7

  • DoublePlay(ASPLOS’11)

CPU 0

Ep 1

Initial

Process

State

Ep 1

Ep 2

Ep 2

Syscalls

Sync ops

Signals

Ep 3

Ep 3

Syscalls

Sync ops

Signals

Ep 4

Ep 4

slide18
目录
  • 研究意义
  • 背景知识和相关研究工作
  • 研究内容与贡献
  • 系统评测与分析
slide19
研究内容与贡献
  • 二进制翻译下多线程程序不确定性
  • 基于位标识的记录共享内存交互的算法
  • 基于访存指令插桩的纯软件的Replay系统的优化方法
slide20
不确定性的记录
  • PinPlay(CGO’10)详尽的分析了影响多线程的不确定性因素
    • 1. 起始栈位置的改变
    • 2. 代码和数据位置的改变
    • 3. 程序二进制码以及共享库代码的改变
    • 4. 处理器特定指令行为的改变
    • 5. 信号
    • 6. 未初始化内存的读
    • 7. 系统调用行为的改变
    • 8. 共享内存访问顺序

DBT下不存在

静态编译避免

SPLASH2不存在

slide21
访存依赖

遵循依赖关系

访存依赖

Thread I

Thread J

Thread I

Thread J

ld A

add

ld A

add

st B

st B

st C

st C

st C

Log

st C

ld B

ld B

ld D

ld D

st A

st A

sub

sub

st C

st C

ld B

ld B

st D

st D

Recording

Replay

Transitive Reduction消除了ld A  st A

slide22

B.writer = (I, 2)

C.writer =(J, 2)

if (C.writer != I)

log(WAW)

foreachC.readers

if (reader != I)

log(WAR)

C.readers.clear( )

C.writer = (I, 3)

if (B.writer != J)

log(RAW)

B.readers.add(J,3)

访存依赖关系的检测

A.readers

A.writer

Thread I

Thread J

A.readers.add(I, 1)

1

ld A

add

1

st B

st C

2

2

st C

ld B

3

3

st A

4

Recording

slide23

B.writer = (I, 2)

C.writer =(J, 2)

if (C.writer != I)

log(WAW)

foreachC.readers

if (reader != I)

log(WAR)

C.readers.clear( )

C.writer = (I, 3)

if (B.writer != J)

log(RAW)

B.readers.add(J,3)

FDR的方法

A.readers

A.writer

Thread I

Thread J

A.readers.add(I, 1)

1

ld A

add

1

st B

st C

2

2

st C

ld B

3

3

st A

4

Recording

VIC

VIC

VIC

VIC

VIC

VIC

3

0

4

1

3

2

0

2

0

2

0

2

0

2

0

0

0

2

3

2

2

0

1

4

slide24
FDR方法的不足
  • 原因:减少硬件复杂性

Thread i Thread j Thread k

1: st A

2: ld B

1: st B

2: ld A

1: st B

2: st A

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

slide25
TR算法的不足
  • FDR的设计者徐旻的博士论文中提到的Transitive Reduction算法可以消除上述冗余
  • 不足:每个内存块需要最多P+1个P维向量,P为线程数,内存开销大

VIC

slide26
TR算法的不足
  • 依赖关系无论是否需要记录都有对两个向量的合并操作,时间开销大
slide27
基于位标识的方法

Data Structures:

timestamp_t : array {int t1, int t2, ..., inttP};//P是线程数

block_history_t : structure {intwtid, intwic, intrmask, timestamp_trics}

//内存块最近的写者wtid及其访存计数wic,最近的读者访存计数rics,有效读者标识rmask

Variables:

线程i私有的:

int IC;//访存指令计数

timestamp_t VIC;//VIC[j]线程传递依赖的线程j的最大IC, j != i

每个内存块关联的数据结构:

block_history_t block;

  • 每个内存块只需一个向量
slide28
基于位标识的方法

ANALYSE(t, addr)//访存类型t: r, w, rw;访存地址addr

1 IC  IC + 1

2 找到addr的关联数据结构block

3 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.wic

7 record dependence block.wtid:block.wic i:IC

8 elsetid 0

9 whileblock.rmask != 0//遍历所有的读者,记录WAR依赖

10 do if (block.rmask & 1) && (tid != i)

11 then ifblock.rics[tid] > VIC[tid]

12 then VIC[tid] block.rics[tid]

13 record dependence tid:block.rics[tid]  i:IC

14 block.rmaskblock.rmask >> 1

15 tidtid + 1

16 block.wtidi

17 block.wic  IC

18 block.rmask 0

19 else //记录RAW依赖

20 if (block.wtid != i) && (block.wic > VIC[block.wtid])

21 then VIC[block.wtid]  block.wic

22 record dependence block.wtid:block.wic i:IC

23 rmask |= (1 << i)

24 block.rics[i]  IC

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

无需合并向量

Thread i Thread j Thread k

1: st A

2: ld B

1: st B

2: ld A

1: st B

2: st A

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

slide29
基于位标识的方法
  • 基于访存指令插桩的方法,原因
    • 硬件方法:还没有在实际的处理器采用
    • 需要内核支持以及修改glibc的方法:工作量太大
    • 页保护的方法:假共享(false sharing)及页竞争的影响,线程数量多时性能不好
    • 只记录少量信息,离线重构:重构算法复杂,可以做为将来的工作
replay9
基于访存指令插桩的Replay系统的优化方法
  • 栈内存访问无需插桩
    • 平均37%
    • 最高84%
replay10
基于访存指令插桩的Replay系统的优化方法
  • 充分利用目标平台的寄存器资源
    • 龙芯的寄存器资源相对于X86-32要充足得多
    • caller-saved:18个,上下文切换开销大
    • 翻译时利用富余寄存器手工编写插桩函数
    • 专用的访存指令计数的寄存器
slide32
访存指令计数
  • DoublePlay采用记录指令PC以及分支计数的方法记录线程调度序,分支计数硬件PMU提供
  • PMU的计数并不区分线程
  • 二进制翻译的影响很难做到精确的计数
  • 龙芯寄存器资源充裕——专用寄存器计数
replay11
基于访存指令插桩的Replay系统的优化方法
  • 访存地址关联数据结构优化查找
    • 只需要~10指令
    • 选择合适大小的内存块,空间开销不大
replay12
基于访存指令插桩的Replay系统的优化方法
  • 访存依赖关系记录的优化
    • 保存在线程私有缓存中,满时输出
    • 减少文件竞争及I/O输出的开销
  • 内存访问局部性优化
    • 当前使用的关联数据结构很可能被下次内存访问使用
    • 每个线程缓存当前指令访问的关联数据结构地址
slide35
目录
  • 研究意义
  • 背景知识和相关研究工作
  • 研究内容与贡献
  • 系统评测与分析
slide36
系统评测与分析

二进制翻译系统DigitalBridge

slide38
系统评测与分析
  • 测试集SPLASH-2
slide39
系统评测与分析
  • Baseline:无Replay系统功能
  • 记录运行
    • 2.9/3.4/4.3
    • 最大10.4
    • <<PinPlay(80~146),但比较的意义不大
slide40
系统评测与分析
  • 重放
    • 1.9/3.8/7.9
slide41
系统评测与分析
  • 空间开销
  • 映射表项数
    • 66/77/95
    • 最大1047
    • 512B内存块时0.39/0.68/1.39M
    • 最大14.6M
slide42

Thread i Thread j

1: ld A

2: ld B

1:st B

2:st A

Thread i Thread j

1: ld A

2: ld B

1:st A

2:st B

Thread i Thread j

2: ld A

1:st B

1. 记录数据大小无变化

2. 记录数据大小减少

3. 记录数据大小增多

Thread i

A

B

i:2j:1

Thread j

A

B

系统评测与分析
  • 内存块的影响
    • 记录数据量
    • 内存
    • 竞争开销
slide43
系统评测与分析
  • 不同内存块大小对记录运行的影响,8 Thrd
  • 512B块大小性能较好
slide44
总结
  • 动态二进制翻译器平台下源输入程序的确定性Replay系统
    • 记录2.9/3.4/4.3X,重放1.9/3.8/7.9X
  • 基于位标识的记录共享内存交互的算法
    • 时间优势。无需合并向量。
    • 空间优势。每个内存块一个向量。
  • 基于访存指令插桩的纯软件的Replay系统的优化