ConSeq: detecting concurrency bugs through sequential errors

Concurrency bugs are caused by non-deterministic interleavings between shared memory accesses. Their effects propagate through data and control dependences until they cause software to crash, hang, produce incorrect output, etc. The lifecycle of a bug thus consists of three phases: (1) triggering, (...

Ausführliche Beschreibung

Gespeichert in:
Bibliographische Detailangaben
Veröffentlicht in:Computer architecture news 2011-03, Vol.39 (1), p.251-264
Hauptverfasser: Zhang, Wei, Lim, Junghee, Olichandran, Ramya, Scherpelz, Joel, Jin, Guoliang, Lu, Shan, Reps, Thomas
Format: Artikel
Sprache:eng
Online-Zugang:Volltext
Tags: Tag hinzufügen
Keine Tags, Fügen Sie den ersten Tag hinzu!
container_end_page 264
container_issue 1
container_start_page 251
container_title Computer architecture news
container_volume 39
creator Zhang, Wei
Lim, Junghee
Olichandran, Ramya
Scherpelz, Joel
Jin, Guoliang
Lu, Shan
Reps, Thomas
description Concurrency bugs are caused by non-deterministic interleavings between shared memory accesses. Their effects propagate through data and control dependences until they cause software to crash, hang, produce incorrect output, etc. The lifecycle of a bug thus consists of three phases: (1) triggering, (2) propagation, and (3) failure. Traditional techniques for detecting concurrency bugs mostly focus on phase (1)--i.e., on finding certain structural patterns of interleavings that are common triggers of concurrency bugs, such as data races. This paper explores a consequence-oriented approach to improving the accuracy and coverage of state-space search and bug detection. The proposed approach first statically identifies potential failure sites in a program binary (i.e., it first considers a phase (3) issue). It then uses static slicing to identify critical read instructions that are highly likely to affect potential failure sites through control and data dependences (phase (2)). Finally, it monitors a single (correct) execution of a concurrent program and identifies suspicious interleavings that could cause an incorrect state to arise at a critical read and then lead to a software failure (phase (1)). ConSeq's backwards approach, (3)!(2)!(1), provides advantages in bug-detection coverage and accuracy but is challenging to carry out. ConSeq makes it feasible by exploiting the empirical observationthat phases (2) and (3) usually are short and occur within one thread. Our evaluation on large, real-world C/C++ applications shows that ConSeq detects more bugs than traditional approaches and has a much lower false-positive rate.
doi_str_mv 10.1145/1961295.1950395
format Article
fullrecord <record><control><sourceid>crossref</sourceid><recordid>TN_cdi_crossref_primary_10_1145_1961295_1950395</recordid><sourceformat>XML</sourceformat><sourcesystem>PC</sourcesystem><sourcerecordid>10_1145_1961295_1950395</sourcerecordid><originalsourceid>FETCH-crossref_primary_10_1145_1961295_19503953</originalsourceid><addsrcrecordid>eNpjYBA3NNAzNDQx1Te0NDM0sjTVM7Q0NTC2NGVh4DQwNDPWNbU0M-Fg4CouzjIA8s2NDTgZ2Jzz84JTC3kYWNMSc4pTeaE0N4O-m2uIs4duclF-cXFRalp8QVFmbmJRZbyhQTzIinioFfFQK4xJ1wEAHKcsjg</addsrcrecordid><sourcetype>Aggregation Database</sourcetype><iscdi>true</iscdi><recordtype>article</recordtype></control><display><type>article</type><title>ConSeq: detecting concurrency bugs through sequential errors</title><source>ACM Digital Library Complete</source><creator>Zhang, Wei ; Lim, Junghee ; Olichandran, Ramya ; Scherpelz, Joel ; Jin, Guoliang ; Lu, Shan ; Reps, Thomas</creator><creatorcontrib>Zhang, Wei ; Lim, Junghee ; Olichandran, Ramya ; Scherpelz, Joel ; Jin, Guoliang ; Lu, Shan ; Reps, Thomas</creatorcontrib><description>Concurrency bugs are caused by non-deterministic interleavings between shared memory accesses. Their effects propagate through data and control dependences until they cause software to crash, hang, produce incorrect output, etc. The lifecycle of a bug thus consists of three phases: (1) triggering, (2) propagation, and (3) failure. Traditional techniques for detecting concurrency bugs mostly focus on phase (1)--i.e., on finding certain structural patterns of interleavings that are common triggers of concurrency bugs, such as data races. This paper explores a consequence-oriented approach to improving the accuracy and coverage of state-space search and bug detection. The proposed approach first statically identifies potential failure sites in a program binary (i.e., it first considers a phase (3) issue). It then uses static slicing to identify critical read instructions that are highly likely to affect potential failure sites through control and data dependences (phase (2)). Finally, it monitors a single (correct) execution of a concurrent program and identifies suspicious interleavings that could cause an incorrect state to arise at a critical read and then lead to a software failure (phase (1)). ConSeq's backwards approach, (3)!(2)!(1), provides advantages in bug-detection coverage and accuracy but is challenging to carry out. ConSeq makes it feasible by exploiting the empirical observationthat phases (2) and (3) usually are short and occur within one thread. Our evaluation on large, real-world C/C++ applications shows that ConSeq detects more bugs than traditional approaches and has a much lower false-positive rate.</description><identifier>ISSN: 0163-5964</identifier><identifier>DOI: 10.1145/1961295.1950395</identifier><language>eng</language><ispartof>Computer architecture news, 2011-03, Vol.39 (1), p.251-264</ispartof><woscitedreferencessubscribed>false</woscitedreferencessubscribed><cites>FETCH-crossref_primary_10_1145_1961295_19503953</cites></display><links><openurl>$$Topenurl_article</openurl><openurlfulltext>$$Topenurlfull_article</openurlfulltext><thumbnail>$$Tsyndetics_thumb_exl</thumbnail><link.rule.ids>314,776,780,27903,27904</link.rule.ids></links><search><creatorcontrib>Zhang, Wei</creatorcontrib><creatorcontrib>Lim, Junghee</creatorcontrib><creatorcontrib>Olichandran, Ramya</creatorcontrib><creatorcontrib>Scherpelz, Joel</creatorcontrib><creatorcontrib>Jin, Guoliang</creatorcontrib><creatorcontrib>Lu, Shan</creatorcontrib><creatorcontrib>Reps, Thomas</creatorcontrib><title>ConSeq: detecting concurrency bugs through sequential errors</title><title>Computer architecture news</title><description>Concurrency bugs are caused by non-deterministic interleavings between shared memory accesses. Their effects propagate through data and control dependences until they cause software to crash, hang, produce incorrect output, etc. The lifecycle of a bug thus consists of three phases: (1) triggering, (2) propagation, and (3) failure. Traditional techniques for detecting concurrency bugs mostly focus on phase (1)--i.e., on finding certain structural patterns of interleavings that are common triggers of concurrency bugs, such as data races. This paper explores a consequence-oriented approach to improving the accuracy and coverage of state-space search and bug detection. The proposed approach first statically identifies potential failure sites in a program binary (i.e., it first considers a phase (3) issue). It then uses static slicing to identify critical read instructions that are highly likely to affect potential failure sites through control and data dependences (phase (2)). Finally, it monitors a single (correct) execution of a concurrent program and identifies suspicious interleavings that could cause an incorrect state to arise at a critical read and then lead to a software failure (phase (1)). ConSeq's backwards approach, (3)!(2)!(1), provides advantages in bug-detection coverage and accuracy but is challenging to carry out. ConSeq makes it feasible by exploiting the empirical observationthat phases (2) and (3) usually are short and occur within one thread. Our evaluation on large, real-world C/C++ applications shows that ConSeq detects more bugs than traditional approaches and has a much lower false-positive rate.</description><issn>0163-5964</issn><fulltext>true</fulltext><rsrctype>article</rsrctype><creationdate>2011</creationdate><recordtype>article</recordtype><recordid>eNpjYBA3NNAzNDQx1Te0NDM0sjTVM7Q0NTC2NGVh4DQwNDPWNbU0M-Fg4CouzjIA8s2NDTgZ2Jzz84JTC3kYWNMSc4pTeaE0N4O-m2uIs4duclF-cXFRalp8QVFmbmJRZbyhQTzIinioFfFQK4xJ1wEAHKcsjg</recordid><startdate>20110317</startdate><enddate>20110317</enddate><creator>Zhang, Wei</creator><creator>Lim, Junghee</creator><creator>Olichandran, Ramya</creator><creator>Scherpelz, Joel</creator><creator>Jin, Guoliang</creator><creator>Lu, Shan</creator><creator>Reps, Thomas</creator><scope>AAYXX</scope><scope>CITATION</scope></search><sort><creationdate>20110317</creationdate><title>ConSeq</title><author>Zhang, Wei ; Lim, Junghee ; Olichandran, Ramya ; Scherpelz, Joel ; Jin, Guoliang ; Lu, Shan ; Reps, Thomas</author></sort><facets><frbrtype>5</frbrtype><frbrgroupid>cdi_FETCH-crossref_primary_10_1145_1961295_19503953</frbrgroupid><rsrctype>articles</rsrctype><prefilter>articles</prefilter><language>eng</language><creationdate>2011</creationdate><toplevel>online_resources</toplevel><creatorcontrib>Zhang, Wei</creatorcontrib><creatorcontrib>Lim, Junghee</creatorcontrib><creatorcontrib>Olichandran, Ramya</creatorcontrib><creatorcontrib>Scherpelz, Joel</creatorcontrib><creatorcontrib>Jin, Guoliang</creatorcontrib><creatorcontrib>Lu, Shan</creatorcontrib><creatorcontrib>Reps, Thomas</creatorcontrib><collection>CrossRef</collection><jtitle>Computer architecture news</jtitle></facets><delivery><delcategory>Remote Search Resource</delcategory><fulltext>fulltext</fulltext></delivery><addata><au>Zhang, Wei</au><au>Lim, Junghee</au><au>Olichandran, Ramya</au><au>Scherpelz, Joel</au><au>Jin, Guoliang</au><au>Lu, Shan</au><au>Reps, Thomas</au><format>journal</format><genre>article</genre><ristype>JOUR</ristype><atitle>ConSeq: detecting concurrency bugs through sequential errors</atitle><jtitle>Computer architecture news</jtitle><date>2011-03-17</date><risdate>2011</risdate><volume>39</volume><issue>1</issue><spage>251</spage><epage>264</epage><pages>251-264</pages><issn>0163-5964</issn><abstract>Concurrency bugs are caused by non-deterministic interleavings between shared memory accesses. Their effects propagate through data and control dependences until they cause software to crash, hang, produce incorrect output, etc. The lifecycle of a bug thus consists of three phases: (1) triggering, (2) propagation, and (3) failure. Traditional techniques for detecting concurrency bugs mostly focus on phase (1)--i.e., on finding certain structural patterns of interleavings that are common triggers of concurrency bugs, such as data races. This paper explores a consequence-oriented approach to improving the accuracy and coverage of state-space search and bug detection. The proposed approach first statically identifies potential failure sites in a program binary (i.e., it first considers a phase (3) issue). It then uses static slicing to identify critical read instructions that are highly likely to affect potential failure sites through control and data dependences (phase (2)). Finally, it monitors a single (correct) execution of a concurrent program and identifies suspicious interleavings that could cause an incorrect state to arise at a critical read and then lead to a software failure (phase (1)). ConSeq's backwards approach, (3)!(2)!(1), provides advantages in bug-detection coverage and accuracy but is challenging to carry out. ConSeq makes it feasible by exploiting the empirical observationthat phases (2) and (3) usually are short and occur within one thread. Our evaluation on large, real-world C/C++ applications shows that ConSeq detects more bugs than traditional approaches and has a much lower false-positive rate.</abstract><doi>10.1145/1961295.1950395</doi></addata></record>
fulltext fulltext
identifier ISSN: 0163-5964
ispartof Computer architecture news, 2011-03, Vol.39 (1), p.251-264
issn 0163-5964
language eng
recordid cdi_crossref_primary_10_1145_1961295_1950395
source ACM Digital Library Complete
title ConSeq: detecting concurrency bugs through sequential errors
url https://sfx.bib-bvb.de/sfx_tum?ctx_ver=Z39.88-2004&ctx_enc=info:ofi/enc:UTF-8&ctx_tim=2025-01-24T09%3A00%3A52IST&url_ver=Z39.88-2004&url_ctx_fmt=infofi/fmt:kev:mtx:ctx&rfr_id=info:sid/primo.exlibrisgroup.com:primo3-Article-crossref&rft_val_fmt=info:ofi/fmt:kev:mtx:journal&rft.genre=article&rft.atitle=ConSeq:%20detecting%20concurrency%20bugs%20through%20sequential%20errors&rft.jtitle=Computer%20architecture%20news&rft.au=Zhang,%20Wei&rft.date=2011-03-17&rft.volume=39&rft.issue=1&rft.spage=251&rft.epage=264&rft.pages=251-264&rft.issn=0163-5964&rft_id=info:doi/10.1145/1961295.1950395&rft_dat=%3Ccrossref%3E10_1145_1961295_1950395%3C/crossref%3E%3Curl%3E%3C/url%3E&disable_directlink=true&sfx.directlink=off&sfx.report_link=0&rft_id=info:oai/&rft_id=info:pmid/&rfr_iscdi=true