CN113407447B - 一种自适应轻量级动态混合数据竞争检测方法 - Google Patents
一种自适应轻量级动态混合数据竞争检测方法 Download PDFInfo
- Publication number
- CN113407447B CN113407447B CN202110659412.6A CN202110659412A CN113407447B CN 113407447 B CN113407447 B CN 113407447B CN 202110659412 A CN202110659412 A CN 202110659412A CN 113407447 B CN113407447 B CN 113407447B
- Authority
- CN
- China
- Prior art keywords
- thread
- read
- access
- current
- timestamp
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3692—Test management for test results analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Complex Calculations (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明针对并发程序动态数据竞争检测问题,公开了一种自适应轻量级动态混合数据竞争检测方法,属于并发程序测试领域。该方法首先过滤掉线程本地数据访问和只读数据访问,进而只分析共享内存位置,然后为每个共享内存维护两个历史访问信息读写队列,针对读操作采用自适应轻量级表示方法,当共享内存为读并发状态时切换为向量时钟记录访问信息,否则只记录最后一次访问信息,使用Happpens‑before关系和LockSet算法检测数据竞争。本发明提供了一种自适应轻量级动态混合数据竞争检测方法,有助于提高数据竞争检测准确性,降低检测代价。
Description
技术领域
本发明属于软件测试技术领域,具体涉及到并发程序数据竞争检测问题,提出了一种自适应轻量级动态混合数据竞争检测方法。
背景技术
多线程程序在现代程序设计中无处不在,因其可以显著提高系统计算效率、性能等优点得到了广泛的应用,但是由于线程交错执行使得许多并发缺陷难以发现,可能会导致并发程序运行结果正确性或者直接导致系统崩溃。并发程序缺陷检测在并发程序研究中有着重要地位,尤其数据竞争问题在常见的并发缺陷中占比较大,因此如何准确高效地检测数据竞争缺陷,成为提高多线程程序可靠性和安全性急需解决的问题。
为了尽可能多检测数据竞争错误,国内外众多学者致力于数据竞争动态检测技术研究,在不影响程序运行结果正确性情况下以期能够以低检测开销方式尽可能多的检测出数据竞争。动态数据竞争缺陷检测技术主要通过收集被测程序动态执行过程中的相关访问信息,进而判断哪些访问操作构成数据竞争,但是由于线程调度具有不确定性,导致收集到的相关信息不完整,存在漏报和误报情况且该技术会消耗大量内存资源。为此本发明提出了一种自适应轻量级动态混合数据竞争检测方法,该方法以低执行开销高覆盖率的方式准确有效地检测数据竞争。
发明内容
动态数据竞争检测技术,其一主要是将收集到的各线程对共享变量的读写访问信息利用Happens-berfore去验证是否存在并发访问,其二主要是利用锁信息去验证共享变量在访问过程中是否受到锁保护,其三是综合利用这两种方法去检测数据竞争。在使用动态数据竞争检测过程中,目标是使检测准确度尽可能提高,而检测时间和内存开销尽可能降低。
本发明为一种自适应轻量级动态混合数据竞争检测方法,如图1所示,该方法的特征包括以下步骤:
步骤一:针对一个Java并发程序P,在不影响P动态执行过程中,动态数据竞争检测器为每个共享变量x分别维护两个长度为Q_LEN=6的读队列RCx和写队列WCx,RCx和WCx均采用先入先出原则以缓存机制存储各线程对x的读访问信息和写访问信息,访问信息以<epoch,LockSet>形式存放,用来表示线程t的线程编号、访问时间戳和当前线程所持有的锁集合,其中epoch表示为t@c,意为线程t的当前时间戳为c;
步骤二:当线程t对x进行访问,判断当前是否为读访问,如果不为读访问则进入步骤五;否则首先判断当前x是否已经处于读共享状态,如果是读共享状态则更新读向量时钟Rx为线程t的时钟向量VCt;否则去判断t当前读访问与RCx最后一个元素存放的读访问是否构成并发访问状态,如果是则动态数据竞争检测器自动切换为读向量时钟Rx来记录读访问历史,进入步骤三;
步骤三:遍历并分析WCx中线程u对x的历史访问信息直到最后一个元素,即如果WCx[u]中线程u的时间戳与当前线程t的时间戳VCt[u]不满足Happens-before关系,且t目前获得的锁集与WCx[u].LockSet交集为空集,则报告写-读类型数据竞争错误,进入步骤四;
步骤四:判断RCx最后一个元素的epoch值与t的epoch值是否相等,如果相等则更新最后一个元素的LockSet集合;否则判断是否为满队,如果是满队状态则删除队首元素并将当前的访问信息加入到RCx中,否则直接将当前访问信息加入到RCx;
步骤五:线程t对x进行访问,判断当前是否为写访问,如果不为写访问则返回步骤二,否则遍历并分析WCx中线程u对x的历史访问信息直到最后一个元素,即如果WCx[u]中线程u的时间戳与当前线程t的时间戳VCt[u]不满足Happens-before关系,且t目前获得的锁集与WCx[u].LockSet交集为空集,则报告写-写类型数据竞争错误,进入步骤六;
步骤六:判断x当前是否处于读共享状态,如果处于读共享状态则判断读向量时钟Rx与当前线程t是否满足Happens-before关系,如果满足则报读-写类型数据竞争错误并删除Rx,否则进入步骤七;
步骤七:遍历并分析RCx中线程u对x的历史访问信息直到最后一个元素,即如果RCx[u]中线程u的时间戳与当前线程t的时间戳VCt[u]不满足Happens-before关系,且t目前获得的锁集与RCx[u].LockSet交集为空集,则报告读-写类型数据竞争错误,进入步骤八;
步骤八:判断WCx最后一个元素的epoch与t的epoch是否相等,如果相等则更新最后一个元素的LockSet集合;否则判断是否为满队,如果是满队状态则删除队首元素并将当前的访问信息加入到WCx中,否则直接将当前访问信息加入到RCx;
步骤九:判断终止条件,程序P是否执行完毕,如果P执行完毕,则输出数据竞争检测报告;否则,返回步骤二。
附图说明
附图1为一种自适应轻量级动态混合数据竞争检测方法的流程图。
附图2为不同动态数据竞争检测方法检测出的平均数据竞争数量对比图。
附图3为不同动态数据竞争检测方法平均内存开销对比图。
具体实施方式
以经典Java基准程序“raytracer”的数据竞争检测为例,结合附图1对本发明提出的一种自适应轻量级动态混合数据竞争检测方法的具体实施方式进行说明。
步骤一:针对一个Java并发程序raytracer,在不影响raytracer动态执行过程中,动态数据竞争检测器为每个共享变量x分别维护两个长度为Q_LEN=6的读队列RCx和写队列WCx,RCx和WCx均采用先入先出原则以缓存机制存储各线程对x的读访问信息和写访问信息,访问信息以<epoch,LockSet>形式存放,用来表示线程t的线程编号、访问时间戳和当前线程所持有的锁集合,其中epoch表示为t@c,意为线程t的当前时间戳为c;
步骤二:当线程2对共享变量checksum1进行访问,判断当前是否为读访问,如果不为读访问则进入步骤五;否则首先判断当前checksum1是否已经处于读共享状态,如果是读共享状态则更新读向量时钟Rx为线程2的时钟向量VCt;否则去判断2当前读访问与RCx最后一个元素存放的读访问是否构成并发访问状态,如果是则动态数据竞争检测器自动切换为读向量时钟Rx来记录读访问历史,进入步骤三;
步骤三:遍历并分析WCx中线程u对checksum1的历史访问信息直到最后一个元素,即如果WCx[u]中线程u的时间戳与当前线程2的时间戳VCt[u]不满足Happens-before关系,且线程2目前获得的锁集与WCx[u].LockSet交集为空集,则报告写-读类型数据竞争错误,进入步骤四;
步骤四:判断RCx最后一个元素的epoch值与线程2的epoch值是否相等,如果相等则更新最后一个元素的LockSet集合;否则判断是否为满队,如果是满队状态则删除队首元素并将当前的访问信息加入到RCx中,否则直接将当前访问信息加入到RCx;
步骤五:线程2对checksum1进行访问,判断当前是否为写访问,如果不为写访问则返回步骤二,否则遍历并分析WCx中线程u对checksum1的历史访问信息直到最后一个元素,即如果WCx[u]中线程u的时间戳与当前线程2的时间戳VCt[u]不满足Happens-before关系,且线程2目前获得的锁集与WCx[u].LockSet交集为空集,则报告写-写类型数据竞争错误,进入步骤六;
步骤六:判断checksum1当前是否处于读共享状态,如果处于读共享状态则判断读向量时钟Rx与当前线程t是否满足Happens-before关系,如果满足则报读-写类型数据竞争错误并删除Rx,否则进入步骤七;
步骤七:遍历并分析RCx中线程u对x的历史访问信息直到最后一个元素,即如果RCx[u]中线程u的时间戳与当前线程2的时间戳VCt[u]不满足Happens-before关系,且线程2目前获得的锁集与RCx[u].LockSet交集为空集,则报告读-写类型数据竞争错误,进入步骤八;
步骤八:判断WCx最后一个元素的epoch值与线程2的epoch是否相等,如果相等则更新最后一个元素的LockSet集合;否则判断是否为满队,如果是满队状态则删除队首元素并将当前的访问信息加入到WCx中,否则直接将当前访问信息加入到RCx;
步骤九:判断终止条件,程序raytracer是否执行完毕,如果raytracer执行完毕,则输出数据竞争检测报告;否则,返回步骤二。例如,程序raytracer执行完毕后,输出的数据竞争检测报告为:
通过以上过程可以实现一种自适应轻量级动态混合数据竞争检测方法,检测流程图如图1所示,针对基准程序“raytracer”,使用Eraser方法、Djit+方法与本发明中的方法分别进行10次实验,图2是10次实验中检测出来的数据竞争数量平均值,图3是10次实验中各检测方法平均内存开销。从图2与图3可以看出,本方法检测出数据竞争数量与Djit+相当且平均内存开销下降了40%,相较于Eraser方法误报率降低了88.9%。本方法以低开销有效地检测数据竞争,可以作为一种动态数据竞争检测新方法。
Claims (1)
1.一种自适应轻量级动态混合数据竞争检测方法,其特征在于包括以下步骤:
步骤一:针对一个Java并发程序P,在不影响P动态执行过程中,动态数据竞争检测器为每个共享变量x分别维护两个长度为Q_LEN=6的读队列RCx和写队列WCx,RCx和WCx均采用先入先出原则以缓存机制存储各线程对x的读访问信息和写访问信息,访问信息以<epoch,LockSet>形式存放,用来表示线程t的线程编号、访问时间戳和当前线程所持有的锁集合,其中epoch表示为t@c,意为线程t的当前时间戳为c;
步骤二:当线程t对x进行访问,判断当前是否为读访问,如果不为读访问则进入步骤五;否则首先判断当前x是否已经处于读共享状态,如果是读共享状态则更新读向量时钟Rx为线程t的时钟向量VCt;否则去判断t当前读访问与RCx最后一个元素存放的读访问是否构成并发访问状态,如果是则动态数据竞争检测器自动切换为读向量时钟Rx来记录读访问历史,进入步骤三;
步骤三:遍历并分析WCx中线程u对x的历史访问信息直到最后一个元素,即如果WCx[u]中线程u的时间戳与当前线程t的时间戳VCt[u]不满足Happens-before关系,且t目前获得的锁集与WCx[u].LockSet交集为空集,则报告写-读类型数据竞争错误,进入步骤四;
步骤四:判断RCx最后一个元素的epoch值与t的epoch值是否相等,如果相等则更新最后一个元素的LockSet集合;否则判断是否为满队,如果是满队状态则删除队首元素并将当前的访问信息加入到RCx中,否则直接将当前访问信息加入到RCx;
步骤五:线程t对x进行访问,判断当前是否为写访问,如果不为写访问则返回步骤二,否则遍历并分析WCx中线程u对x的历史访问信息直到最后一个元素,即如果WCx[u]中线程u的时间戳与当前线程t的时间戳VCt[u]不满足Happens-before关系,且t目前获得的锁集与WCx[u].LockSet交集为空集,则报告写-写类型数据竞争错误,进入步骤六;
步骤六:判断x当前是否处于读共享状态,如果处于读共享状态则判断读向量时钟Rx与当前线程t是否满足Happens-before关系,如果满足则报读-写类型数据竞争错误并删除Rx,否则进入步骤七;
步骤七:遍历并分析RCx中线程u对x的历史访问信息直到最后一个元素,即如果RCx[u]中线程u的时间戳与当前线程t的时间戳VCt[u]不满足Happens-before关系,且t目前获得的锁集与RCx[u].LockSet交集为空集,则报告读-写类型数据竞争错误,进入步骤八;
步骤八:判断WCx最后一个元素的epoch值与t的epoch值是否相等,如果相等则更新最后一个元素的LockSet集合;否则判断是否为满队,如果是满队状态则删除队首元素并将当前的访问信息加入到WCx中,否则直接将当前访问信息加入到RCx;
步骤九:判断终止条件,程序P是否执行完毕,如果P执行完毕,则输出数据竞争检测报告;否则,返回步骤二。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110659412.6A CN113407447B (zh) | 2021-06-15 | 2021-06-15 | 一种自适应轻量级动态混合数据竞争检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110659412.6A CN113407447B (zh) | 2021-06-15 | 2021-06-15 | 一种自适应轻量级动态混合数据竞争检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113407447A CN113407447A (zh) | 2021-09-17 |
CN113407447B true CN113407447B (zh) | 2022-09-27 |
Family
ID=77683866
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110659412.6A Active CN113407447B (zh) | 2021-06-15 | 2021-06-15 | 一种自适应轻量级动态混合数据竞争检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113407447B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104077144A (zh) * | 2014-07-07 | 2014-10-01 | 西安交通大学 | 基于多线程程序约束构建的数据竞争检测与证据生成方法 |
CN105117369A (zh) * | 2015-08-04 | 2015-12-02 | 复旦大学 | 一种基于异构平台的多种并行错误检测体系架构 |
CN106598845A (zh) * | 2016-11-18 | 2017-04-26 | 华中科技大学 | 一种基于块偏序的动态数据竞争检测方法及系统 |
CN110059014A (zh) * | 2019-04-28 | 2019-07-26 | 西安邮电大学 | 一种并发程序数据竞争指令级定位方法 |
CN111563045A (zh) * | 2020-05-11 | 2020-08-21 | 西安邮电大学 | 基于Adaboost模型的并发程序数据竞争语句级检测方法 |
CN112765036A (zh) * | 2021-01-28 | 2021-05-07 | 北京明略昭辉科技有限公司 | 一种针对并发程序数据竞争动态检测方法及系统 |
CN112817787A (zh) * | 2021-01-28 | 2021-05-18 | 南京大学 | 中断驱动嵌入式系统数据竞争的自动检测方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8418146B2 (en) * | 2008-11-26 | 2013-04-09 | Microsoft Corporation | Sampling techniques for dynamic data-race detection |
US10241894B2 (en) * | 2010-06-25 | 2019-03-26 | Microsoft Technology Licensing, Llc | Data-scoped dynamic data race detection |
-
2021
- 2021-06-15 CN CN202110659412.6A patent/CN113407447B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104077144A (zh) * | 2014-07-07 | 2014-10-01 | 西安交通大学 | 基于多线程程序约束构建的数据竞争检测与证据生成方法 |
CN105117369A (zh) * | 2015-08-04 | 2015-12-02 | 复旦大学 | 一种基于异构平台的多种并行错误检测体系架构 |
CN106598845A (zh) * | 2016-11-18 | 2017-04-26 | 华中科技大学 | 一种基于块偏序的动态数据竞争检测方法及系统 |
CN110059014A (zh) * | 2019-04-28 | 2019-07-26 | 西安邮电大学 | 一种并发程序数据竞争指令级定位方法 |
CN111563045A (zh) * | 2020-05-11 | 2020-08-21 | 西安邮电大学 | 基于Adaboost模型的并发程序数据竞争语句级检测方法 |
CN112765036A (zh) * | 2021-01-28 | 2021-05-07 | 北京明略昭辉科技有限公司 | 一种针对并发程序数据竞争动态检测方法及系统 |
CN112817787A (zh) * | 2021-01-28 | 2021-05-18 | 南京大学 | 中断驱动嵌入式系统数据竞争的自动检测方法 |
Non-Patent Citations (7)
Title |
---|
HistLock: Efficient and Sound Hybrid Detection of Hidden Predictive Data Races with Functional Contexts;Jialin Yang;《2016 IEEE International Conference on Software Quality, Reliability and Security (QRS)》;20161013;13-23 * |
一种基于发生序和锁集的BPEL数据竞争静态检测方法;李少东等;《计算机与数字工程》;20100820(第08期);全文 * |
一种基于锁集的多线程数据竞争的动态探测算法;李克清等;《武汉大学学报(自然科学版)》;20000610(第03期);全文 * |
基于采样技术的动态混合数据竞争检测算法;李梦珂等;《计算机科学》;20201015(第10期);全文 * |
多线程程序数据竞争检测和验证方法研究综述!;禹振等;《智能计算机与应用》;20170628(第03期);全文 * |
并发程序数据竞争检测方法研究和分析;操旺根;《信息技术与信息化》;20191225(第12期);全文 * |
并发缺陷检测技术研究进展;薄莉莉等;《计算机科学》;20190515(第05期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN113407447A (zh) | 2021-09-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103154908B (zh) | 用于事务存储器的最后分支记录的装置、方法和系统 | |
US9454460B2 (en) | Methods, systems, and media for providing determinism in multithreaded programs | |
US7698690B2 (en) | Identifying code that wastes time performing redundant computation | |
US8555259B2 (en) | Verifying function performance based on predefined count ranges | |
US8713568B2 (en) | System and method for detecting deadlock in a multithread program | |
JPH07281930A (ja) | 情報処理装置動作測定解析システム | |
CN103399818B (zh) | 操作系统中的死锁检测方法 | |
Rosa et al. | Predicting and mitigating jobs failures in big data clusters | |
TWI521438B (zh) | 於多執行緒應用程式中偵測潛在存取錯誤之技術 | |
US20020188831A1 (en) | Annotations for transaction tracing | |
CN103109276B (zh) | 系统测试方法 | |
CN103488563A (zh) | 并行程序的数据竞争检测方法、装置及多核处理系统 | |
CN110059014B (zh) | 一种并发程序数据竞争指令级定位方法 | |
US8065565B2 (en) | Statistical debugging using paths and adaptive profiling | |
CN113407447B (zh) | 一种自适应轻量级动态混合数据竞争检测方法 | |
CN109885489B (zh) | 驱动程序中数据竞争检测方法及装置 | |
CN112035461B (zh) | 数据库的表数据文件的迁移方法和系统 | |
CN108021495B (zh) | 基于回放的代码调试方法 | |
EP0352462A2 (en) | Method and apparatus for calculating disk-access footprints | |
CN116244072A (zh) | 一种针对栅栏同步的gpgpu微架构系统 | |
CN115098314A (zh) | 慢盘检测方法、装置、电子设备和可读存储介质 | |
WO2020061765A1 (zh) | 一种处理器性能的监测方法及装置 | |
CN111858361B (zh) | 一种基于预测和并行验证策略的原子性违例缺陷检测方法 | |
CN115687131A (zh) | 一种程序调试方法 | |
CN112765036A (zh) | 一种针对并发程序数据竞争动态检测方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |