摘要 | 第12-14页 |
Abstract | 第14-15页 |
第一章 绪论 | 第16-32页 |
1.1 多核与并发错误 | 第16-18页 |
1.2 确定性重放技术及其用途 | 第18-19页 |
1.3 确定性重放技术原理 | 第19-22页 |
1.3.1 确定性重放的要求 | 第19-20页 |
1.3.2 确定性重放与状态机 | 第20-22页 |
1.3.3 不确定性的来源 | 第22页 |
1.4 确定性重放相关研究工作 | 第22-28页 |
1.4.1 全系统确定性重放 | 第23-24页 |
1.4.2 应用程序确定性重放 | 第24-27页 |
1.4.3 非确定性重放 | 第27页 |
1.4.4 确定性执行 | 第27-28页 |
1.5 本文主要贡献 | 第28-29页 |
1.5.1 之前研究工作的不足 | 第28页 |
1.5.2 本文主要贡献 | 第28-29页 |
1.6 本文结构安排 | 第29-32页 |
第二章 可伸缩的访存顺序记录算法 | 第32-48页 |
2.1 共享访存带来的不确定性 | 第32-33页 |
2.2 基于全局时钟记录访存指令全序 | 第33-34页 |
2.3 基于CREW协议记录访存指令偏序 | 第34-35页 |
2.4 InstantReplay的算法 | 第35-36页 |
2.5 SMP-ReVirt的算法 | 第36-41页 |
2.5.1 SMP-ReVirt记录方法不可伸缩的原因 | 第38-40页 |
2.5.2 SMP-ReVirt可能的改进方法 | 第40-41页 |
2.6 可伸缩的访存顺序记录算法 | 第41-47页 |
2.6.1 从日志还原访存顺序 | 第44-47页 |
2.7 本章小结 | 第47-48页 |
第三章 可伸缩的全系统确定性重放 | 第48-86页 |
3.1 引言 | 第48-50页 |
3.2 全系统模拟器简介 | 第50-52页 |
3.3 全系统模拟器中不确定性的来源 | 第52-53页 |
3.4 ReEmu的实现 | 第53-60页 |
3.4.1 系统检查点的创建 | 第54页 |
3.4.2 定位系统执行点 | 第54-55页 |
3.4.3 中断的记录和重放 | 第55-56页 |
3.4.4 DMA的记录和重放 | 第56-57页 |
3.4.5 走页表顺序的记录 | 第57-59页 |
3.4.6 不确定性指令的记录与重放 | 第59页 |
3.4.7 避免COREMU自身的不确定性 | 第59-60页 |
3.5 共享访存顺序记录的实现 | 第60-70页 |
3.5.1 共享对象的划分 | 第60-61页 |
3.5.2 锁的选择 | 第61-63页 |
3.5.3 高效的日志记录 | 第63-64页 |
3.5.4 ReEmu记录访存顺序的完整实现 | 第64-66页 |
3.5.5 处理器指令重排对算法实现的影响 | 第66-67页 |
3.5.6 志处理 | 第67-68页 |
3.5.7 重放算法的实现 | 第68-69页 |
3.5.8 拦截COREMU中所有的访存操作 | 第69-70页 |
3.6 使用锁聚集优化减少访存记录开销 | 第70-73页 |
3.6.1 冲突访问通知机制的实现 | 第72页 |
3.6.2 对程序行为的影响 | 第72-73页 |
3.7 确定性重放正确性的验证 | 第73-74页 |
3.8 ARM客户系统的支持 | 第74-75页 |
3.9 系统性能测试 | 第75-84页 |
3.9.1 并行基准程序 | 第76页 |
3.9.2 ReEmu性能开销 | 第76-78页 |
3.9.3 可伸缩性 | 第78-80页 |
3.9.4 性能优化带来的好处 | 第80-82页 |
3.9.5 共享对象大小对性能的影响 | 第82页 |
3.9.6 日志大小 | 第82-83页 |
3.9.7 ARM系统的性能 | 第83-84页 |
3.10 系统局限性 | 第84页 |
3.11 本章小结 | 第84-86页 |
第四章 可伸缩的应用程序确定性重放 | 第86-122页 |
4.1 引言 | 第86-89页 |
4.1.1 相关工作存在问题 | 第86-88页 |
4.1.2 研究目标 | 第88-89页 |
4.2 二进制翻译工具介绍与比较 | 第89-91页 |
4.2.1 DynamoRIO简介 | 第90-91页 |
4.3 应用程序不确定性的来源 | 第91-93页 |
4.4 Dr.Replay的实现 | 第93-108页 |
4.4.1 地址空间的处理 | 第93页 |
4.4.2 信号的记录和重放 | 第93-95页 |
4.4.3 系统调用的记录和重放 | 第95-99页 |
4.4 4 文件读写的记录和重放 | 第99-103页 |
4.4.5 Futex的记录与重放 | 第103-108页 |
4.4.6 读取未初始化内存的处理 | 第108页 |
4.5 访存顺序的记录 | 第108-111页 |
4.5.1 访存指令前后插桩 | 第108-111页 |
4.6 系统正确性的验证 | 第111页 |
4.7 性能测试 | 第111-119页 |
4.7.1 性能开销 | 第112-116页 |
4.7.2 可伸缩性 | 第116-118页 |
4.7.3 日志大小 | 第118页 |
4.7.4 与PinPlay的比较 | 第118-119页 |
4.8 系统局限性 | 第119-120页 |
4.9 本章小结 | 第120-122页 |
第五章 探索利用硬件事务内存记录访存顺序 | 第122-136页 |
5.1 TSX编程模型以及指令性能测试 | 第123-126页 |
5.1.1 HLE简介 | 第123页 |
5.1.2 RTM简介 | 第123-124页 |
5.1.3 TSX性能测试 | 第124-126页 |
5.2 探索在VCREW算法中使用TSX | 第126-128页 |
5.3 程序行为与访存记录算法影响的分析 | 第128-129页 |
5.4 基于事务提交顺序的访存顺序记录算法 | 第129-134页 |
5.4.1 事务提交算法的问题 | 第131-132页 |
5.4.2 性能测试 | 第132-133页 |
5.4.3 日志大小 | 第133-134页 |
5.4.4 修改硬件的类似算法 | 第134页 |
5.5 本章小结 | 第134-136页 |
第六章 总结与展望 | 第136-140页 |
6.1 工作总结 | 第136-137页 |
6.2 工作展望 | 第137-140页 |
6.2.1 基于局部指令分析优化Dr.Replay性能 | 第137-138页 |
6.2.2 应用传递规约算法减少日志 | 第138页 |
6.2.3 与调试工具的结合 | 第138页 |
6.2.4 完善基于事务提交顺序的访存记录算法 | 第138-140页 |
参考文献 | 第140-152页 |
发表文章目录 | 第152-154页 |
致谢 | 第154-155页 |