内容提要
作者介绍研究项目Investigator,利用Arm硬件ETM追踪控制流,结合轻量级事件捕获构建数据流,以低开销诊断并发错误。通过时间戳、PMU中断和系统调用分类,实现约4%开销,能定位多种并发错误根因。
延伸解读
硬件辅助追踪如何降低开销
Investigator 利用 Arm ETM 硬件记录控制流,将指令地址编码为小流存入 ETR 缓冲区,避免频繁暂停程序。同时,使用 PMU 计数指令并在超过阈值时中断提取跟踪,进一步减少性能影响。这种硬件辅助方案相比内核插桩(约200%开销)大幅降低了开销,在 Unixbench 上仅约4%,Nginx 上约1.3%。
数据流构建的取舍与优化
由于 ETM 追踪内核和共享库效率低,Investigator 忽略其内部流,专注用户空间程序,并实现轻量级事件捕获器记录系统调用、异常等。系统调用按读写状态和内容分类,仅详细记录影响数据流的调用。此外,通过 glibc 钩子和开发者自定义钩子,进一步降低记录成本,从而减小 ETM 输出大小,提升性能。
多处理器时间戳的精度挑战
在多处理器上,ETM 时间戳可能不够精确,导致执行顺序重叠,丢失数据竞争信息。Investigator 使用 Counter 硬件生成尽可能多的时间戳,以提高精度。测试表明,在最坏情况下,99.34%的指令能按正确顺序记录。但该问题仍是研究难题,时间戳精度限制可能影响诊断准确性。
根因定位方法与评估结果
Investigator 结合混合分析、模式匹配和自适应收集来定位根因。混合分析建立内存地址间的传递关系;模式匹配搜索原子性违规和顺序违规模式;自适应收集重新执行指令以提高数据恢复准确性。评估显示,它能找到许多著名并发错误甚至非并发错误的根因,且开销较低,但可能受限于模式覆盖和重执行成本。
Q&A
Investigator 是什么?它主要用来解决什么问题?
Investigator 是一个利用 Arm 硬件特性(如 ETM)来诊断并发错误的研究项目。它通过追踪控制流和构建数据流,以低开销定位并发错误的根本原因。
Investigator 如何实现低开销的控制流追踪?
Investigator 使用 Arm Embedded Trace Macrocell (ETM) 硬件来记录执行指令的内存地址,并利用 Counter 硬件生成细粒度时间戳,同时将 ETM 输出直接存入专用物理内存(ETR 缓冲区),再通过 PMU 中断按阈值提取跟踪数据,从而避免频繁暂停程序,实现低开销。
Investigator 如何构建数据流?
Investigator 通过轻量级事件捕获器记录系统调用、异常、信号和中断,并将系统调用分为四类(读取状态、写入状态、读取内容、写入内容),对影响数据流的系统调用详细记录,同时利用 glibc 库钩子和开发者自定义钩子来重建数据流。
Investigator 在诊断并发错误时,如何找到根本原因?
Investigator 使用混合分析(包含点集分析,建立内存地址间的传递关系)、模式匹配(搜索原子性违规和顺序违规模式)以及自适应收集(重新执行指令以提高数据恢复准确性)来定位根本原因。
Investigator 的性能开销如何?
在 Unixbench 上总体开销约为 4%,在 Nginx 上开销约为 1.3%。
Investigator 如何处理多处理器程序中的时间戳精度问题?
Investigator 使用 Counter 硬件生成尽可能多的时间戳以提高精度。在测试中,最坏情况下 99.34% 的指令可以按正确顺序记录。