Dasarath Weeratunge

dblp:31/7934 · DBLP profile ↗
← Back
5ranked-venue papers
3as first author
0since 2021 · last 2012
—ORCID · none

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 5 · 3 first-authorSystems, architecture and hardware · 1 · 1 first-author

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Software engineering, system software, and programming languages
5 papers
Program analysis · 50% Concurrent programming · 32% Debugging and program repair · 15%
Computer architecture, parallel and distributed computing, and storage systems
1 paper
Parallel and multicore computing · 100%

Topics — the 10 heaviest of 11, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Program analysis
dynamic analysis
0.432012
Precise Calling Context Encoding · IEEE Trans. Software Eng. 2012
Accentuating the positive: atomicity inference and enforcement using correct executions · OOPSLA 2011
Precise calling context encoding · ICSE (1) 2010
Concurrent programming
concurrency bugs
0.332011
Accentuating the positive: atomicity inference and enforcement using correct executions · OOPSLA 2011
Analyzing concurrency bugs using dual slicing · ISSTA 2010
Analyzing multicore dumps to facilitate concurrency bug reproduction · ASPLOS 2010
Program analysis
calling context encoding
0.322012
Precise Calling Context Encoding · IEEE Trans. Software Eng. 2012
Precise calling context encoding · ICSE (1) 2010
Program analysis › dynamic analysis
profiling
0.222011
Accentuating the positive: atomicity inference and enforcement using correct executions · OOPSLA 2011
Precise calling context encoding · ICSE (1) 2010
Debugging and program repair
bug reproduction
0.112010
Analyzing multicore dumps to facilitate concurrency bug reproduction · ASPLOS 2010
Concurrent programming › concurrency bugs
concurrency bug reproduction
0.112010
Analyzing multicore dumps to facilitate concurrency bug reproduction · ASPLOS 2010
Concurrent programming › concurrency bugs
data races
0.112010
Analyzing concurrency bugs using dual slicing · ISSTA 2010
Debugging and program repair
fault localization
0.112010
Analyzing concurrency bugs using dual slicing · ISSTA 2010
Software testing › test execution
test suite execution
0.012011
Accentuating the positive: atomicity inference and enforcement using correct executions · OOPSLA 2011
Parallel and multicore computing › parallel computing › parallel program debugging
multicore debugging
0.012010
Analyzing multicore dumps to facilitate concurrency bug reproduction · ASPLOS 2010

Methods — techniques the papers use, named apart from their topics

integer encoding · 0.3lightweight execution analysis · 0.2deterministic replay · 0.2stack depth analysis · 0.1deadlock-free locking injection · 0.1stack depth identification · 0.1dynamic analysis · 0.1dual slicing · 0.1calling context encoding · 0.1
YearPublicationVenuePosition
2012 Precise Calling Context Encoding
abstract
Calling contexts (CCs) are very important for a wide range of applications such as profiling, debugging, and event logging. Most applications perform expensive stack walking to recover contexts. The resulting contexts are often explicitly represented as a sequence of call sites and hence are bulky. We propose a technique to encode the current calling context of any point during an execution. In particular, an acyclic call path is encoded into one number through only integer additions. Recursive call paths are divided into acyclic subsequences and encoded independently. We leverage stack depth in a safe way to optimize encoding: If a calling context can be safely and uniquely identified by its stack depth, we do not perform encoding. We propose an algorithm to seamlessly fuse encoding and stack depth-based identification. The algorithm is safe because different contexts are guaranteed to have different IDs. It also ensures contexts can be faithfully decoded. Our experiments show that our technique incurs negligible overhead (0-6.4 percent). For most medium-sized programs, it can encode all contexts with just one number. For large programs, we are able to encode most calling contexts to a few numbers. We also present our experience of applying context encoding to debugging crash-based failures.
William N. Sumner, Yunhui Zheng, Dasarath Weeratunge, Xiangyu Zhang 0001
IEEE Trans. Software Eng.3
2011 Accentuating the positive: atomicity inference and enforcement using correct executions
abstract
Concurrency bugs are often due to inadequate synchronization that fail to prevent specific (undesirable) thread interleavings. Such errors, often referred to as Heisenbugs, are difficult to detect, prevent, and repair. In this paper, we present a new technique to increase program robustness against Heisenbugs. We profile correct executions from provided test suites to infer fine-grained atomicity properties. Additional deadlock-free locking is injected into the program to guarantee these properties hold on production runs. Notably, our technique does not rely on witnessing or analyzing erroneous executions. The end result is a scheme that only permits executions which are guaranteed to preserve the atomicity properties derived from the profile. Evaluation results on large, real-world, open-source programs show that our technique can effectively suppress subtle concurrency bugs, with small runtime overheads (typically less than 15%).
Dasarath Weeratunge, Xiangyu Zhang 0001, Suresh Jagannathan
OOPSLA1
2010 Analyzing multicore dumps to facilitate concurrency bug reproduction
abstract
Debugging concurrent programs is difficult. This is primarily because the inherent non-determinism that arises because of scheduler interleavings makes it hard to easily reproduce bugs that may manifest only under certain interleavings. The problem is exacerbated in multi-core environments where there are multiple schedulers, one for each core. In this paper, we propose a reproduction technique for concurrent programs that execute on multi-core platforms. Our technique performs a lightweight analysis of a failing execution that occurs in a multi-core environment, and uses the result of the analysis to enable reproduction of the bug in a single-core system, under the control of a deterministic scheduler.
Dasarath Weeratunge, Xiangyu Zhang 0001, Suresh Jagannathan
ASPLOS1
2010 Precise calling context encoding
abstract
Calling contexts are very important for a wide range of applications such as profiling, debugging, and event logging. Most applications perform expensive stack walking to recover contexts. The resulting contexts are often explicitly represented as a sequence of call sites and hence bulky. We propose a technique to encode the current calling context of any point during an execution. In particular, an acyclic call path is encoded into one number through only integer additions. Recursive call paths are divided into acyclic subsequences and encoded independently. We leverage stack depth in a safe way to optimize encoding: if a calling context can be safely and uniquely identified by its stack depth, we do not perform encoding. We propose an algorithm to seamlessly fuse encoding and stack depth based identification. The algorithm is safe because different contexts are guaranteed to have different IDs. It also ensures contexts can be faithfully decoded. Our experiments show that our technique incurs negligible overhead (1.89% on average). For most medium-sized programs, it can encode all contexts with just one number. For large programs, we are able to encode most calling contexts to a few numbers.
William N. Sumner, Yunhui Zheng, Dasarath Weeratunge, Xiangyu Zhang 0001
ICSE (1)3
2010 Analyzing concurrency bugs using dual slicing
abstract
Recently, there has been much interest in developing analyzes to detect concurrency bugs that arise because of data races, atomicity violations, execution omission, etc. However, determining whether reported bugs are in fact real, and understanding how these bugs lead to incorrect behavior, remains a labor-intensive process. This paper proposes a novel dynamic analysis that automatically produces the causal path of a concurrent failure leading from the root cause to the failure. Given two schedules, one inducing the failure and the other not, our technique collects traces of the two executions, and compares them to identify salient differences. The causal relation between the differences is disclosed by leveraging a novel slicing algorithm called dual slicing that slices both executions alternatively and iteratively, producing a slice containing trace differences from both runs. Our experiments show that dual slices tend to be very small, often an order of magnitude or more smaller than the corresponding dynamic slices; more importantly, they enable precise analysis of real concurrency bugs for large programs, with reasonable overhead.
Dasarath Weeratunge, Xiangyu Zhang 0001, William N. Sumner, Suresh Jagannathan
ISSTA1