新年新气象, 发一篇读 paper 笔记吧. 其实我也不知道, 为什么我读了这篇和我研究方向完全不相干的, 虽然他写的的确很不错, 也许因为它是 best paper 吧.

OSDI’18 best paper Weidong Cui, Xinyang Ge, Baris Kasikci, Ben Niu, Upamanyu Sharma, Ruoyu Wang, and Insu Yun. 2018. REPT: reverse debugging of failures in deployed software. In Proceedings of the 12th USENIX conference on Operating Systems Design and Implementation (OSDI’18). USENIX Association, Berkeley, CA, USA, 17-32.


INTRODUCTION & BACKGROUND

问题

怎么做生产环境下的 debug?

已有工作

reverse debugging

在 REPT 中

特别注意, REPT 不要求绝对精确 – 那是不可能的. 所以有些方法其实是启发式的.

挑战

主要是执行过程中不可避免的信息丢失.

DESIGN

单个执行流, 只含不访存的可逆指令

状态被限制到有限的寄存器中. 从 \( S_n \) 一直向前, 能够精确计算任意 \( S_i \).

单个指令流, 只含不访存的指令

参见 Figure 1. 结合前向和后向分析, 最初在所有 \( S_i \) 中将所有寄存器标记为未知. 然后从 \( S_n \) 执行后向分析, 然后从 \( S_0 \) 执行前向分析, 直到达到定点.

归纳易证该过程正确, 且收敛.

包含内存访问的指令

PAPER 的重点

保守的方法是, 如果写内存指令的目标是未知的, 那么任何内存地址都可能被写 – 但是这过于保守.

REPT 的做法是, 如果写内存指令的目标是未知的, 那么不管这条指令, (当它没有执行一样) 继续如前分析. 直到发现冲突, 因为我们忽略了一个写内存操作. 发生冲突的时候, 后向分析的结果优先.

推断干涉图

处理并发

也就是有多个执行流了.

利用硬件特性: 硬件在指令序列中会插入 timestamp. 两个 timestamp 之间的 chunk 称为 subsequence, 所有的 subsequence 关于 time stamp 构成了偏序. (其中 interleaving subsequence 没有序)

将这个偏序全序化, interleaving 之间的序随便定. 如此将问题归约为单执行流的情况.

但是需要限制, interleaving subsequence 之间的写内存结点, 不参与任何 vertical edge. 因为我们认为它们的顺序事实上是不确定的.

IMPLEMENTATION

EVALUATION

也是用回答问题的方式来做

DISCUSSION

主要的限制

未来可能的方向

其他的想法

RELATED WORKS

Automatic root cause diagnosis

Record / Replay

Best Paper 分析写作

  1. Introduction
    • 问题是什么
    • 现有什么解法, 都有什么问题
    • 我们的解法是什么
    • 简要地, 我们怎么做到的
    • 我们遇到的最大 challenge 是什么
    • 简要地, 我们如何解决了这个 challenge
    • 我们实现了怎样的系统, 做了什么 measure, 效果如何
  2. Overview
    • Problem statement
    • Design Choices
    • Challanges
  3. Design
    • 先比较形式化地描述术语
    • progressively 描述系统, 先是最简单的情况, 越来越复杂 (+不可逆指令, +内存访问, +并发) 注意它这里三个增加的特点就是之前提到的三个 challenge - 前三个都给出了例子. - +内存访问是文章的重点, 包含干涉图和错误恢复的概念. 篇幅较大, 所以继续分成两个小节.
  4. Implementation
    • 系统组成部分清楚地分成 tracing 和 binary 分析, 所以实现也单独说这两个.
    • 用了什么技术, 代码量多少, configuration 怎么样
    • 实际实现和之前介绍的模型设计有什么区别? e.g. syscall 的处理
  5. Evaluation
    • 有哪些 metric
    • 每个 metric 具体是怎么计算的
    • 数字结果是什么, 如果有奇怪的数据要解释为什么系统不能很好处理
  6. Discussion
    • 指出自己方法的局限
    • 包含了一些其他的想法, 如 future works, possible applications etc
  7. Related work