Adrian Nistor

dblp:45/7056 · DBLP profile ↗
← Back
8ranked-venue papers
8as first author
0since 2021 · last 2015
—ORCID · none

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

Software engineering, systems software and programming languages · 5 · 5 first-authorSystems, architecture and hardware · 3 · 3 first-authorDatabases, data management, data science and information retrieval · 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
6 papers
Debugging and program repair · 37% Concurrent programming · 28% Software testing · 28%
Computer architecture, parallel and distributed computing, and storage systems
2 papers
Processor architecture and microarchitecture · 100%

Topics — the 13 heaviest of 15, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Debugging and program repair
fault localization
0.212014
SunCat: helping developers understand and predict performance problems in smartphone applications · ISSTA 2014
Software testing
performance testing
0.212014
SunCat: helping developers understand and predict performance problems in smartphone applications · ISSTA 2014
Debugging and program repair › performance debugging
performance bug detection
0.212013
Toddler: detecting performance problems via similar memory-access patterns · ICSE 2013
Software testing
test generation
0.112012
Ballerina: Automatic generation and clustering of efficient random unit tests for multithreaded code · ICSE 2012
Concurrent programming
determinism
0.112010
InstantCheck: Checking the Determinism of Parallel Programs Using On-the-Fly Incremental Hashing · MICRO 2010
Concurrent programming › concurrency bugs
data races
0.112009
Light64: lightweight hardware support for data race detection during systematic testing of parallel programs · MICRO 2009
Concurrent programming › concurrency bug detection
data race detection
0.112009
Light64: lightweight hardware support for data race detection during systematic testing of parallel programs · MICRO 2009
Software testing
systematic testing
0.112009
Light64: lightweight hardware support for data race detection during systematic testing of parallel programs · MICRO 2009
Concurrent programming › concurrency bugs
thread interleaving
0.112009
Light64: lightweight hardware support for data race detection during systematic testing of parallel programs · MICRO 2009
Program analysis
static analysis
0.112015
CARAMEL: Detecting and Fixing Performance Problems That Have Non-Intrusive Fixes · ICSE (1) 2015
Program analysis
dynamic analysis
0.012013
Toddler: detecting performance problems via similar memory-access patterns · ICSE 2013
Concurrent programming
concurrency bug detection
0.012012
Ballerina: Automatic generation and clustering of efficient random unit tests for multithreaded code · ICSE 2012
Processor architecture and microarchitecture › debugging support
race detection hardware
0.012009
Light64: lightweight hardware support for data race detection during systematic testing of parallel programs · MICRO 2009

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

profiling · 0.4static analysis · 0.2on-the-fly incremental hashing · 0.2memory-state hashing · 0.2hardware support · 0.2memory access pattern analysis · 0.2random test generation · 0.1clustering · 0.1
YearPublicationVenuePosition
2015 CARAMEL: Detecting and Fixing Performance Problems That Have Non-Intrusive Fixes
abstract
Performance bugs are programming errors that slow down program execution. While existing techniques can detect various types of performance bugs, a crucial and practical aspect of performance bugs has not received the attention it deserves: how likely are developers to fix a performance bug? In practice, fixing a performance bug can have both benefits and drawbacks, and developers fix a performance bug only when the benefits outweigh the drawbacks. Unfortunately, for many performance bugs, the benefits and drawbacks are difficult to assess accurately. This paper presents CARAMEL, a novel static technique that detects and fixes performance bugs that have non-intrusive fixes likely to be adopted by developers. Each performance bug detected by CARAMEL is associated with a loop and a condition. When the condition becomes true during the loop execution, all the remaining computation performed by the loop is wasted. Developers typically fix such performance bugs because these bugs waste computation in loops and have non-intrusive fixes: when some condition becomes true dynamically, just break out of the loop. Given a program, CARAMEL detects such bugs statically and gives developers a potential source-level fix for each bug. We evaluate CARAMEL on real-world applications, including 11 popular Java applications (e.g., Groovy, Log4J, Lucene, Struts, Tomcat, etc) and 4 widely used C/C++ applications (Chromium, GCC, Mozilla, and My SQL). CARAMEL finds 61 new performance bugs in the Java applications and 89 new performance bugs in the C/C++ applications. Based on our bug reports, developers so far have fixed 51 and 65 performance bugs in the Java and C/C++ applications, respectively. Most of the remaining bugs are still under consideration by developers.
Adrian Nistor, Po-Chun Chang, Cosmin Radoi, Shan Lu 0001
ICSE (1)1
2014 SunCat: helping developers understand and predict performance problems in smartphone applications
abstract
The number of smartphones shipped in 2014 will be four times larger than the number of PCs. Compared to PCs, smartphones have limited computing resources, and smartphone applications are more prone to performance problems. Traditionally, developers use profilers to detect performance problems by running applications with relatively large inputs. Unfortunately, for smartphone applications, the developer cannot easily control the input, because smartphone applications interact heavily with the environment.
Adrian Nistor, Lenin Ravindranath
ISSTA1
2013 Toddler: detecting performance problems via similar memory-access patterns
abstract
Performance bugs are programming errors that create significant performance degradation. While developers often use automated oracles for detecting functional bugs, detecting performance bugs usually requires time-consuming, manual analysis of execution profiles. The human effort for performance analysis limits the number of performance tests analyzed and enables performance bugs to easily escape to production. Unfortunately, while profilers can successfully localize slow executing code, profilers cannot be effectively used as automated oracles. This paper presents Toddler, a novel automated oracle for performance bugs, which enables testing for performance bugs to use the well established and automated process of testing for functional bugs. Toddler reports code loops whose computation has repetitive and partially similar memory-access patterns across loop iterations. Such repetitive work is likely unnecessary and can be done faster. We implement Toddler for Java and evaluate it on 9 popular Java codebases. Our experiments with 11 previously known, real-world performance bugs show that Toddler finds these bugs with a higher accuracy than the standard Java profiler. Using Toddler, we also found 42 new bugs in six Java projects: Ant, Google Core Libraries, JUnit, Apache Collections, JDK, and JFreeChart. Based on our bug reports, developers so far fixed 10 bugs and confirmed 6 more as real bugs.
Adrian Nistor, Linhai Song, Darko Marinov, Shan Lu 0001
ICSE1
2013 Discovering, reporting, and fixing performance bugs
abstract
Software performance is critical for how users perceive the quality of software products. Performance bugs - programming errors that cause significant performance degradation - lead to poor user experience and low system throughput. Designing effective techniques to address performance bugs requires a deep understanding of how performance bugs are discovered, reported, and fixed. In this paper, we study how performance bugs are discovered, reported to developers, and fixed by developers, and compare the results with those for non-performance bugs. We study performance and non-performance bugs from three popular code bases: Eclipse JDT, Eclipse SWT, and Mozilla. First, we find little evidence that fixing performance bugs has a higher chance to introduce new functional bugs than fixing non-performance bugs, which implies that developers may not need to be over-concerned about fixing performance bugs. Second, although fixing performance bugs is about as error-prone as fixing nonperformance bugs, fixing performance bugs is more difficult than fixing non-performance bugs, indicating that developers need better tool support for fixing performance bugs and testing performance bug patches. Third, unlike many non-performance bugs, a large percentage of performance bugs are discovered through code reasoning, not through users observing the negative effects of the bugs (e.g., performance degradation) or through profiling. The result suggests that techniques to help developers reason about performance, better test oracles, and better profiling techniques are needed for discovering performance bugs.
Adrian Nistor, Lin Tan 0001
MSR1
2012 Ballerina: Automatic generation and clustering of efficient random unit tests for multithreaded code
abstract
Testing multithreaded code is hard and expensive. A multithreaded unit test creates two or more threads, each executing one or more methods on shared objects of the class under test. Such unit tests can be generated at random, but basic random generation produces tests that are either slow or do not trigger concurrency bugs. Worse, such tests have many false alarms, which require human effort to filter out. We present Ballerina, a novel technique for automated random generation of efficient multithreaded tests that effectively trigger concurrency bugs. Ballerina makes tests efficient by having only two threads, each executing a single, randomly selected method. Ballerina increases chances that such simple parallel code finds bugs by appending it to more complex, randomly generated sequential code. We also propose a clustering technique to reduce the manual effort in inspecting failures of automatically generated multithreaded tests. We evaluate Ballerina on 14 real-world bugs from six popular codebases: Groovy, JDK, JFreeChart, Apache Log4j, Apache Lucene, and Apache Pool. The experiments show that tests generated by Ballerina find bugs on average 2×-10× faster than basic random generation, and our clustering technique reduces the number of inspected failures on average 4×-8×. Using Ballerina, we found three previously unknown bugs, two of which were already confirmed and fixed.
Adrian Nistor, Qingzhou Luo, Michael Pradel, Thomas R. Gross, Darko Marinov
ICSE1
2010 InstantCheck: Checking the Determinism of Parallel Programs Using On-the-Fly Incremental Hashing
abstract
Developing multithreaded programs in shared-memory systems is difficult. One key reason is the nondeterminism of thread interaction, which may result in one code input producing different outputs in different runs. Unfortunately, enforcing determinism by construction typically comes at a performance, hardware, or programmability cost. An alternative is to check during testing whether code is deterministic. This paper presents Instant Check, a novel technique that checks determinism with a very small runtime overhead while requiring only a minor hardware extension. During code testing, Instant-Check can check whether the code under test ends up in a deterministic state in various runs. The idea is to compute a 64-bit hash of the memory state and compare the hashes of different test runs that have the same input. If two runs have different hashes, Instant-Check reports state nondeterminism. For efficient operation, Instant Checkuses on-the-fly incremental hashing in hardware. The hash is kept in a per-core 64-bit register, which trivially supports virtualization, migration, and context switching. We use Instant Check to understand the determinism properties of 17 popular applications, including Sphinx3, PBZip2, PARSEC, and SPLASH-2. Instant Check incurs a negligible average runtime overhead of 0.3% over native testing runs. We also show how using Instant Check programmers can find bugs and discuss other applications of fast memory-state hashing. While using Instant Check, we found a real bug in the widely used PARSEC benchmark.
Adrian Nistor, Darko Marinov, Josep Torrellas
MICRO1
2009 Light64: lightweight hardware support for data race detection during systematic testing of parallel programs
abstract
Developing and testing parallel code is hard. Even for one given input, a parallel program can have many possible different thread interleavings, which are hard for the programmer to foresee and for a testing tool to cover using stress or random testing. For this reason, a recent trend is to use Systematic Testing, which methodically explores different thread interleavings, while checking for various bugs. Data races are common bugs but, unfortunately, checking for races is often skipped in systematic testers because it introduces substantial runtime overhead if done purely in software. Recently, several techniques for race detection in hardware have been proposed, but they still require significant hardware support.
Adrian Nistor, Darko Marinov, Josep Torrellas
MICRO1
2009 Optimizing the parallel computation of linear recurrences using compact matrix representations
Adrian Nistor, Wei-Ngan Chin, Tiow Seng Tan, Nicolae Tapus
J. Parallel Distributed Comput.1