RacerX: Effective, Static Detection of Race Conditions and Deadlocks调研笔记

作者:Dawson Engler and Ken Ashcraft

RacerX介绍:

这是一种静态工具,它使用流敏感的过程间分析来检测竞争条件和死锁。它可以有效地推断检查信息,例如哪些锁保护哪些操作,哪些代码上下文是多线程的,以及哪些共享访问是危险的。它可以跟踪一组代码的特征,用于将错误从最严重到最不严重排序。它使用新技术来应对分析错误产生的影响——例如,通过选择最值得相信的路径,以多种方式交叉检查推断,并推断哪些信号量用于互斥而不是单方面同步.该工具速度很快,只需要 2-14 分钟来分析1.8百万行代码的系统

RacerX涉及的五个阶段:(其中第一阶段和第五阶段是用户做的,二三四是RacerX工作的阶段)

(1) retargeting it to system-specific lock-ing functions,

(2) extracting a control flow graph from the checked system,

(3) running the deadlock and race checkers over this flow graph,

(4) post-processing and ranking the results,

(5) inspection.

用户提供一张函数表,用来记录设置和释放锁以及开关中断的函数。每个函数都附带一组属性,表示他们锁的类型(spin,block,try_lock,recursive,semaphore,read/write),通过这些属性,RacerX来确定取得锁和释放锁后效果。

用户也可以提供一个annotator routine,用来标记程序是单线程,多线程或者中断处理程序。数据竞争检测器根据这些注释来判断访问这些历程是否需要加锁以及加什么锁。

总体来说,RacerX产生的注释规模不大,几百万行代码注释小于100行,

第一个阶段,遍历系统中的所有文件,提取存储在文件中的控制流图(CFG)为了支持流敏感分析,每个语句将带上一组指针,用来指向它的后继。

第二个阶段,这个阶段将分析整个系统的CFG,遍历之后检查死锁或者数据竞争,(CFG中可能存在多个root,因为有些函数没有callers,例如操作系统中的系统调用),给定一组root,分析阶段将对每个root进行迭代遍历,对CFG进行流敏感分析,深度优先遍历,过程间遍历,以及跟踪任意点持有的锁集,检查每个语句时,检测器都会传递当前语句的锁集和其他信息,为了降低复杂度,使用缓存技术(缓存使用相同锁集到达的CFG)

最后一个阶段:对分析结果进行后置处理,计算错误信息的rank,然后将这些信息展现给用户进行手动检测,rank基于一下两种规则:

1,误报的可能性,2检查的难度(排名所花费开销加大,大于分析的开销)

RacerX结果验证:

检测了三个系统Linux(2.5.62),FreeBSD(5.1),SystemX(一个更加普遍的大型商用操作系统)

对于SystemX,使用RacerX中的free checks 和lock checks进行检测,free checks中的错误率为0.25%(4 in 1600),lock checks错误率为0.4%(2 in 500)。

对于Linux分别为0.3%和0.46%

对于静态分析检测,在大型未知的系统中,要检测出非法访问(数据竞争)是否真的发生了,是非常困难的,需要对代码不变量和实际的代码交互进行推理,而这两者往往都不会进行记录,因此一个单一的竞争条件报告往往需要几十分钟进行诊断,并且最后也不一定能确认是否真的发生了错误。

RacerX Effective, Static Detection of Race Conditions and Deadlocks调研笔记相关推荐

  1. eclipse运行go test_在 Go 中发现竞态条件 (Race Conditions)

    当我意识到我一直在处理和解决的问题有一个专有名词描述的时候,我总会觉得这事十分有趣.这次出现这种情况的是竞争条件(Race Conditions).当你处理多个 routine 共享某类资源的时候,不 ...

  2. 检测并发程序Bug:[PLDI2021] Canary: Practical Static Detection of Inter-thread Value-Flow Bugs

    最近得研究下多任务并发程序的静态分析,于是看了这篇文章 总体来说,看是看懂了,但是- - 这篇文章所做的工作有点多啊- 实现起来不会很容易- 1. Canary: Practical Static D ...

  3. Object Detection in Foggy Conditions by Fusion of Saliency Map and YOLO

    参考 Object Detection in Foggy Conditions by Fusion of Saliency Map and YOLO - 云+社区 - 腾讯云 1.摘要 在有雾的情况下 ...

  4. 论文阅读DefectNet: Toward Fast and Effective Defect Detection缺陷网:走向快速有效的缺陷检测

    DefectNet: Toward Fast and Effective Defect Detection缺陷网:走向快速有效的缺陷检测 期刊:IEEE Transactions on Instrum ...

  5. Lane Detection in Low-light Conditions Using an Efficient DataEnhancement : Light Conditions Style

    目录 I. INTRODUCTION III. PROPOSED METHOD A. SIM-CycleGAN Generator Network Discriminator Network B. L ...

  6. Concurrency and Race Conditions

    1.当多个线程访问共享硬件或软件资源的任何时候,由于线程之间可能产生对资源的不一致观察,所以必须显式管理对资源的访问. 2.内核中的并发管理设施: (1). 信号量: P操作将信号量的值减 1 ,判断 ...

  7. Race Conditions/条件竞争

    最近,做题总是碰到条件竞争,总结一波,菜鸡一只,大佬自行忽视. 原理 条件竞争漏洞是一种服务器端的漏洞,由于服务器端在处理不同用户的请求时是并发进行的,因此,如果并发处理不当或相关操作逻辑顺序设计的不 ...

  8. 《C++ Concurrency in Action》笔记6 Avoiding problematic race conditions

    阻止竞争问题的几种办法: 1.保证每一个时刻只有一个线程在修改数据.C++标准提供了若干机制. 2.无锁编程(lock-free programming),本书第七章介绍. 3.software tr ...

  9. Effective C++ 中文版(第三版)读书笔记 更新ing~

    Effective C++ 中文版(第三版)持续更新ing 让自己习惯C++ 条款1 视c++为一个联邦 条款2 尽量以const,enum,inline替换#define 条款3 尽可能使用cons ...

最新文章

  1. 沈向洋回答吴恩达:我预见的2021
  2. Holt-Winters模型原理分析
  3. 信息系统项目管理师-项目采购管理考点笔记
  4. LINUX常见小问题汇总
  5. oracle EXP-00028
  6. 累计收益是我的收益吗?
  7. 集合交集,并集,差集运算
  8. Unity Inspector 给组件自动关联引用
  9. E - 权势二进制 哈尔滨理工大学软件学院大一个人赛训练
  10. 教你下载BarTender 2016
  11. 关于java中method.invoked 传入类型不一样的问题
  12. SQL-2008函数大全
  13. 绘制花朵Flower
  14. 会计计算机功能,会计软件具有什么功能
  15. CAD图纸转换TIFF格式时修改背景颜色
  16. Oh My ZSH让你的终端美如画
  17. Rust GUI 编程漫谈:超越 Web 与原生 GUI
  18. 数字实现千分位分隔符
  19. 可逆矩阵的秩等于矩阵的阶数_为什么矩阵的秩等于其行阶梯行矩阵非零行的行数?详细一点哈?谢了。...
  20. javaEE的13个规范

热门文章

  1. Android开发-CardView卡片View的详解,头条三面技术四面HR
  2. Android Studio动态调试smail代码----环境配置
  3. 灵魂之问:机器人编程学习的是什么?/机器人课与科学课/机器人课和编程课/乐高机器人学的是什么?
  4. [Atcoder SoundHound Contest 2018]E.+ Graph
  5. Android RxBus
  6. python开发的运维工具_8种常用的Python工具
  7. JavaJSP调用JavaScript方法
  8. omv检查硬盘坏道_关于怎么用MHDD修复硬盘坏道
  9. 用Python爬取历年基金数据
  10. Unity Animation -- 改进动画效果