David F. Bacon

dblp:b/DavidFBacon · DBLP profile ↗
← Back
49ranked-venue papers
20as first author
0since 2021 · last 2020
—ORCID · none

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

Software engineering, systems software and programming languages · 33 · 13 first-authorSystems, architecture and hardware · 10 · 3 first-authorApplied, interdisciplinary, general and emerging computing · 4 · 2 first-authorSecurity and privacy · 1 · 1 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
20 papers
Runtime systems and virtual machines · 34% Software maintenance and evolution · 28% Compilers and program optimization · 15%
Computer architecture, parallel and distributed computing, and storage systems
11 papers
Electronic design automation · 34% GPUs and heterogeneous computing · 32% Embedded and real-time systems · 13%
Databases, data mining, and information retrieval
1 paper
Distributed and cloud data management · 56% Indexing and storage engines · 44%
Theoretical computer science
2 papers
Algorithmic game theory and mechanism design · 86% Automated reasoning and model checking · 14%

Topics — the 30 heaviest of 50, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Runtime systems and virtual machines
garbage collection
0.582012
And then there were none: a stall-free real-time garbage collector for reconfigurable hardware · PLDI 2012
An efficient on-the-fly cycle collection · ACM Trans. Program. Lang. Syst. 2007
CGCExplorer: a semi-automated search procedure for provably correct concurrent collectors · PLDI 2007
Software maintenance and evolution
software ecosystems
0.412020
Incentivizing Deep Fixes in Software Economies · IEEE Trans. Software Eng. 2020
Indexing and storage engines
columnar storage
0.312017
Spanner: Becoming a SQL System · SIGMOD Conference 2017
Distributed and cloud data management
distributed query processing
0.312017
Spanner: Becoming a SQL System · SIGMOD Conference 2017
Electronic design automation
high-level synthesis
0.322012
And then there were none: a stall-free real-time garbage collector for reconfigurable hardware · PLDI 2012
Virtualization of heterogeneous machines hardware description in a synthesizable object-oriented language · DAC 2011
Compilers and program optimization › accelerator compilation
heterogeneous compilation
0.322012
A compiler and runtime for heterogeneous computing · DAC 2012
Lime: a Java-compatible and synthesizable language for heterogeneous architectures · OOPSLA 2010
Runtime systems and virtual machines › garbage collection
real-time garbage collection
0.232012
And then there were none: a stall-free real-time garbage collector for reconfigurable hardware · PLDI 2012
A real-time garbage collector with low overhead and consistent utilization · POPL 2003
Eventrons: a safe programming construct for high-frequency hard real-time applications · PLDI 2006
Compilers and program optimization › accelerator compilation
GPU compiler
0.112012
Compiling a high-level language for GPUs: (via language support for architectures and compilers) · PLDI 2012
GPUs and heterogeneous computing
GPU programming
0.112012
Compiling a high-level language for GPUs: (via language support for architectures and compilers) · PLDI 2012
GPUs and heterogeneous computing › GPU programming
high-level language compilation
0.112012
Compiling a high-level language for GPUs: (via language support for architectures and compilers) · PLDI 2012
Algorithmic game theory and mechanism design
market design
0.112020
Incentivizing Deep Fixes in Software Economies · IEEE Trans. Software Eng. 2020
Programming languages and type systems › domain-specific languages
hardware description languages
0.112011
Virtualization of heterogeneous machines hardware description in a synthesizable object-oriented language · DAC 2011
Runtime systems and virtual machines › garbage collection
reference counting
0.122007
An efficient on-the-fly cycle collection · ACM Trans. Program. Lang. Syst. 2007
A unified theory of garbage collection · OOPSLA 2004
Electronic design automation › high-level synthesis
hardware compilation
0.112010
Lime: a Java-compatible and synthesizable language for heterogeneous architectures · OOPSLA 2010
Programming languages and type systems › programming paradigms
generic programming
0.112009
Minimizing dependencies within generic classes for faster and smaller programs · OOPSLA 2009
Reconfigurable computing and FPGAs › FPGA accelerator
FPGA-based stream processing
0.112009
A computing origami: folding streams in FPGAs · DAC 2009
Runtime systems and virtual machines › virtual machine implementation
java virtual machine
0.122007
The ExoVM system for automatic VM and application reduction · PLDI 2007
Thin Locks: Featherweight Synchronization for Java · PLDI 1998
Distributed and cloud data management › data replication
replica consistency
0.112017
Spanner: Becoming a SQL System · SIGMOD Conference 2017
Program synthesis and code generation
algorithm synthesis
0.112007
CGCExplorer: a semi-automated search procedure for provably correct concurrent collectors · PLDI 2007
Empirical software engineering
feature-based analysis
0.112007
The ExoVM system for automatic VM and application reduction · PLDI 2007
Program verification › model checking › state space exploration
reachability analysis
0.112007
The ExoVM system for automatic VM and application reduction · PLDI 2007
GPUs and heterogeneous computing
heterogeneous architecture
0.122011
Virtualization of heterogeneous machines hardware description in a synthesizable object-oriented language · DAC 2011
Lime: a Java-compatible and synthesizable language for heterogeneous architectures · OOPSLA 2010
Runtime systems and virtual machines › garbage collection
concurrent garbage collection
0.112006
Correctness-preserving derivation of concurrent garbage collection algorithms · PLDI 2006
Compilers and program optimization › program transformation
semantics-preserving transformation
0.112006
Correctness-preserving derivation of concurrent garbage collection algorithms · PLDI 2006
Embedded and real-time systems
real-time programming
0.112006
Eventrons: a safe programming construct for high-frequency hard real-time applications · PLDI 2006
Cloud and datacenter computing › resource management › real-time resource allocation
real-time memory management
0.012012
And then there were none: a stall-free real-time garbage collector for reconfigurable hardware · PLDI 2012
Runtime systems and virtual machines › garbage collection
concurrent reference counting
0.012001
Java without the Coffee Breaks: A Nonintrusive Multiprocessor Garbage Collector · PLDI 2001
Runtime systems and virtual machines › garbage collection
parallel garbage collection
0.012001
Java without the Coffee Breaks: A Nonintrusive Multiprocessor Garbage Collector · PLDI 2001
Distributed systems
stream processing
0.012009
A computing origami: folding streams in FPGAs · DAC 2009
Concurrent programming › concurrency bugs
data race freedom
0.012000
Guava: a dialect of Java without data races · OOPSLA 2000

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

simulation · 0.9mean-field equilibrium · 0.4mean field equilibrium · 0.4runtime orchestration · 0.3high-level language compilation · 0.3hardware synthesis · 0.3range extraction · 0.3query restart · 0.3logic synthesis · 0.2behavioral synthesis · 0.2type system · 0.2synthesis · 0.2binary image packaging · 0.1model checking · 0.1constraint-based analysis · 0.1abstraction · 0.1data-sensitive analysis · 0.1
YearPublicationVenuePosition
2020 Incentivizing Deep Fixes in Software Economies
abstract
An important question in a software economy is how to incentivize deep rather than shallow fixes. A deep fix corrects the root cause of a bug instead of suppressing the symptoms. This paper initiates the study of the problem of incentive design for open workflows in fixing code. We model the dynamics of the software ecosystem and introduce subsumption mechanisms. These mechanisms only make use of externally observable information in determining payments and promote competition between workers. We use a mean field equilibrium methodology to evaluate the performance of these mechanisms, demonstrating in simulation that subsumption mechanisms perform robustly across various environment configurations and satisfy important criteria for market design.
Malvika Rao, David F. Bacon, David C. Parkes, Margo I. Seltzer
IEEE Trans. Software Eng.2
2017 Spanner: Becoming a SQL System
abstract
Spanner is a globally-distributed data management system that backs hundreds of mission-critical services at Google. Spanner is built on ideas from both the systems and database communities. The first Spanner paper published at OSDI'12 focused on the systems aspects such as scalability, automatic sharding, fault tolerance, consistent replication, external consistency, and wide-area distribution. This paper highlights the database DNA of Spanner. We describe distributed query execution in the presence of resharding, query restarts upon transient failures, range extraction that drives query routing and index seeks, and the improved blockwise-columnar storage format. We touch upon migrating Spanner to the common SQL dialect shared with other systems at Google.
David F. Bacon, Nathan Bales, Nicolas Bruno, Brian F. Cooper, Adam Dickinson, Andrew Fikes, Campbell Fraser, Andrey Gubarev, Milind Joshi, Eugene Kogan, Alexander Lloyd, Sergey Melnik 0001, Rajesh Rao, David Shue, Marcel van der Holst, Dale Woodford
SIGMOD Conference1
2015 Cycle-Accurate Replay and Debugging of Running FPGA Systems
abstract
Finding bugs in software that are timing dependent or caused by non-deterministic inputs is notoriously difficult. In FPGAs, the problem is much worse because the visibility into the running design tends to be very low, and existing tools either gather too little data for diagnosis, or are so intrusive that they perturb the timing and may mask the bug. This leads to long FPGA development cycles, and is exacerbated by the steady increase in complexity of FPGA designs. We present a tool - Panoptic on - that logs data and timing information at key design points, extracts it from the FPGA, and uses it for cycle-accurate replay of the entire execution in simulation. This allows interactive debugging with full visibility into the design.
Sunil Shukla, David F. Bacon
FCCM2
2014 Parallel real-time garbage collection of multiple heaps in reconfigurable hardware
abstract
Despite rapid increases in memory capacity, reconfigurable hardware is still programmed in a very low-level manner, generally without any dynamic allocation at all. This limits productivity especially as the larger chips encourage more and more complex designs to be attempted.
David F. Bacon, Perry Cheng, Sunil Shukla
ISMM1
2013 The Shape of Things to Run - Compiling Complex Stream Graphs to Reconfigurable Hardware in Lime
Joshua S. Auerbach, David F. Bacon, Perry Cheng, Steve Fink, Rodric M. Rabbah
ECOOP2
2013 The Liquid Metal Blokus Duo Design
abstract
This paper describes the Liquid Metal entry in the 2013 ICFPT Design Competition. The Liquid Metal system provides a high-level language called Lime and a toolchain targeting FPGAs. Lime allowed us to use standard software development processes for programming, debugging, and performance tuning our FPGA design. We believe such iteration and refinement are far more challenging with low-level languages and design tools commonly used for FPGA development.
Erik R. Altman, Joshua S. Auerbach, David F. Bacon, Ioana Baldini, Perry Cheng, Stephen J. Fink, Rodric M. Rabbah
FPT3
2012 A compiler and runtime for heterogeneous computing
abstract
Heterogeneous systems show a lot of promise for extracting high-performance by combining the benefits of conventional architectures with specialized accelerators in the form of graphics processors (GPUs) and reconfigurable hardware (FPGAs). Extracting this performance often entails programming in disparate languages and models, making it hard for a programmer to work equally well on all aspects of an application. Further, relatively little attention is paid to co-execution---the problem of orchestrating program execution using multiple distinct computational elements that work seamlessly together.
Joshua S. Auerbach, David F. Bacon, Ioana Burcea, Perry Cheng, Stephen J. Fink, Rodric M. Rabbah, Sunil Shukla
DAC2
2012 And then there were none: a stall-free real-time garbage collector for reconfigurable hardware
abstract
Programmers are turning to radical architectures such as reconfigurable hardware (FPGAs) to achieve performance. But such systems, programmed at a very low level in languages with impoverished abstractions, are orders of magnitude more complex to use than conventional CPUs. The continued exponential increase in transistors, combined with the desire to implement ever more sophisticated algorithms, makes it imperative that such systems be programmed at much higher levels of abstraction. One of the fundamental high-level language features is automatic memory management in the form of garbage collection.
David F. Bacon, Perry Cheng, Sunil Shukla
PLDI1
2012 Compiling a high-level language for GPUs: (via language support for architectures and compilers)
abstract
Languages such as OpenCL and CUDA offer a standard interface for general-purpose programming of GPUs. However, with these languages, programmers must explicitly manage numerous low-level details involving communication and synchronization. This burden makes programming GPUs difficult and error-prone, rendering these powerful devices inaccessible to most programmers.
Christophe Dubach, Perry Cheng, Rodric M. Rabbah, David F. Bacon, Stephen J. Fink
PLDI4
2011 Virtualization of heterogeneous machines hardware description in a synthesizable object-oriented language
abstract
Lime is a new Java-compatible and object-oriented language designed to make programming of reconflgurable hardware significantly more accessible to skilled software developers. Lime programs may run either in software (via Java bytecodes) or in hardware (via behavioral and logic synthesis). This paper illustrates the salient synthesis-oriented features of the language using a photo-mosaic algorithm with inherent bit, pipeline, and data parallelism. The result is a virtual machine abstraction that extends across a heterogeneous architecture comprising a CPU, FPGA, and other computational structures.
Joshua S. Auerbach, David F. Bacon, Perry Cheng, Rodric M. Rabbah, Sunil Shukla
DAC2
2011 Virtualization in the age of heterogeneous machines
abstract
Since their invention over 40 years ago, virtual machines have been used to virtualize one or more von Neumann processors and their associated peripherals. System virtual machines provide the illusion that the user has their own instance of a physical machine with a given instruction set architecture (ISA). Process virtual machines provide the illusion of running on a synthetic architecture independent of the underlying ISA, generally for the purpose of supporting a high-level language.
David F. Bacon
VEE1
2010 Lime: a Java-compatible and synthesizable language for heterogeneous architectures
abstract
The halt in clock frequency scaling has forced architects and language designers to look elsewhere for continued improvements in performance. We believe that extracting maximum performance will require compilation to highly heterogeneous architectures that include reconfigurable hardware.
Joshua S. Auerbach, David F. Bacon, Perry Cheng, Rodric M. Rabbah
OOPSLA2
2009 A computing origami: folding streams in FPGAs
abstract
Stream processing represents an important class of applications that spans telecommunications, multimedia and the Internet. The implementation of streaming programs in FPGAs has attracted significant attention because of their inherent parallelism and high performance requirements. Languages, tools, and even custom hardware for streaming have been proposed, some of which are commercially available.
Andrei Hagiescu, Weng-Fai Wong, David F. Bacon, Rodric M. Rabbah
DAC3
2009 PTIDES on flexible task graph: real-time embedded systembuilding from theory to practice
abstract
The Flexotask system claims to enable implementation of both real-time applications and real-time schedulers in a Java Virtual Machine using an actors-like model. The PTIDES model is an actors-like model that claims to deliver precise control over end-to-end latencies in a complex real-time system. The present work jointly investigates both claims by (1) implementing several PTIDES-based schedulers as Flexotask scheduler plugins, and (2) using the resulting system to implement a new reactive control program for a simulation of the JAviator. We present results from the realistic JAviator control application and also from synthetic benchmarks designed to shed light on the differences between the several PTIDES schedulers we implemented.
Jia Zou 0002, Joshua S. Auerbach, David F. Bacon, Edward A. Lee
LCTES3
2009 Minimizing dependencies within generic classes for faster and smaller programs
abstract
Generic classes can be used to improve performance by allowing compile-time polymorphism. But the applicability of compile-time polymorphism is narrower than that of runtime polymorphism, and it might bloat the object code. We advocate a programming principle whereby a generic class should be implemented in a way that minimizes the dependencies between its members (nested types, methods) and its generic type parameters. Conforming to this principle (1) reduces the bloat and (2) gives rise to a previously unconceived manner of using the language that expands the applicability of compile-time polymorphism to a wider range of problems. Our contribution is thus a programming technique that generates faster and smaller programs. We apply our ideas to GCC's STL containers and iterators, and we demonstrate notable speedups and reduction in object code size (real application runs 1.2x to 2.1x faster and STL code is 1x to 25x smaller). We conclude that standard generic APIs (like STL) should be amended to reflect the proposed principle in the interest of efficiency and compactness. Such modifications will not break old code, simply increase flexibility. Our findings apply to languages like C++, C#, and D, which realize generic programming through multiple instantiations.
Dan Tsafrir, Robert W. Wisniewski, David F. Bacon, Bjarne Stroustrup
OOPSLA3
2009 Low-latency time-portable real-time programming with Exotasks
abstract
Exotasks are a novel Java programming construct that achieve three important goals. They achieve low latency while allowing the fullest use of Java language features, compared to previous attempts to restrict the Java language for use in the submillisecond domain. They support pluggable schedulers, allowing easy implementation of new scheduling paradigms in a real-time Java system. They can achieve deterministic timing, even in the presence of other Java threads, and across changes of hardware and software platform. To achieve these goals, the program is divided into tasks with private heaps. Tasks may be strongly isolated, communicating only with each other and guaranteeing determinism, or weakly isolated, allowing some communication with the rest of the Java application. Scheduling of the tasks' execution, garbage collection, and value passing is accomplished by the pluggable scheduler. Schedulers that we have written employ logical execution time (LET) in association with strong isolation to achieve time portability. We have also built a quad-rotor model helicopter, the JAviator, which we use to evaluate our implementation of Exotasks in an experimental embedded version of IBM's J9 real-time virtual machine. Our experiments show that we are able to maintain very low scheduling jitter and deterministic behavior in the face of variations in both software load and hardware platform. We also show that Exotasks perform nearly as well as Eventrons on a benchmark audio application.
Joshua S. Auerbach, David F. Bacon, Daniel T. Iercan, Christoph M. Kirsch, V. T. Rajan, Harald Röck, Rainer Trummer
ACM Trans. Embed. Comput. Syst.2
2008 Optimus: efficient realization of streaming applications on FPGAs
abstract
In this paper, we introduce Optimus: an optimizing synthesis compiler for streaming applications. Optimus compiles programs written in a high level streaming language to either software or hardware implementations. The compiler uses a hierarchical compilation strategy that separates concerns between macro- and micro-functional requirements. Macro-functional concerns address how components (modules) are assembled to implement larger more complex applications. Micro-functional issues deal with synthesis issues of the module internals. Optimus thus allows software developers who lack deep hardware design expertise to transparently leverage the advantages of hardware customization without crossing the semantic gap between high level languages and hardware description languages. Optimus generates streaming hardware that achieves on average 40x speedup over our baseline embedded processor for a fraction of the energy. Additionally, our results show that streaming-specific optimizations can further improve performance by 255% and reduce the area requirements by 16% in average. These designs are competitive with Handel-C implementations for some of the same benchmarks.
Amir Hormati, Manjunath Kudlur, Scott A. Mahlke, David F. Bacon, Rodric M. Rabbah
CASES4
2008 Liquid Metal: Object-Oriented Programming Across the Hardware/Software Boundary
Shan Shan Huang, Amir Hormati, David F. Bacon, Rodric M. Rabbah
ECOOP3
2008 Tax-and-spend: democratic scheduling for real-time garbage collection
abstract
Real-time Garbage Collection (RTGC) has recently advanced to the point where it is being used in production for financial trading, military command-and-control, and telecommunications. However, among potential users of RTGC, there is enormous diversity in both application requirements and deployment environments.
Joshua S. Auerbach, David F. Bacon, Perry Cheng, David Grove, Ben Biron, Charlie Gracie, Bill McCloskey, Aleksandar Micic, Ryan Sciampacone
EMSOFT2
2008 Flexible task graphs: a unified restricted thread programming model for java
abstract
The disadvantages of unconstrained shared-memory multi-threading in Java, especially with regard to latency and determinism in realtime systems, have given rise to a variety of language extensions that place restrictions on how threads allocate, share, and communicate memory, leading to order-of-magnitude reductions in latency and jitter. However, each model makes different trade-offs with respect to expressiveness, efficiency, enforcement, and latency, and no one model is best for all applications.
Joshua S. Auerbach, David F. Bacon, Rachid Guerraoui, Jesper Honig Spring, Jan Vitek
LCTES2
2007 Generational Real-Time Garbage Collection
Daniel Frampton, David F. Bacon, Perry Cheng, David Grove
ECOOP2
2007 Design and implementation of a comprehensive real-time java virtual machine
abstract
The emergence of standards for programming real-time systems in Java has encouraged many developers to consider its use for systems previously only built using C, Ada, or assembly language. However, the RTSJ standard in isolation leaves many important problems unaddressed, and suffers from some serious problems in usability and safety.
Joshua S. Auerbach, David F. Bacon, Bob Blainey, Perry Cheng, Michael Dawson 0001, Mike Fulton, David Grove, Darren Hart, Mark G. Stoodley
EMSOFT2
2007 Java takes flight: time-portable real-time programming with exotasks
abstract
Existing programming methodologies for real-time systems suffer from a low level of abstraction and non-determinism in both the timing and the functional domains. As a result, real-time systems are difficult to test and must be re-certified every time changes are made to either the software or hardware environment. Exotasks are a novel Java programming construct that achievedeterministic timing, even in the presence of other Java threads, and across changes of hardware and software platform. They are deterministic functional data-flow tasks written in Java, combined with an orthogonal scheduling policy based on the logical execution time (LET) model. We have built a quad-rotor model helicopter, the JAviator, which we use as a testbed for this work. We evaluate our implementation of exotasks in IBM's J9 real-time virtual machine using actual flights of the helicopter. Our experiments show that we are able to maintain deterministic behavior in the face of variations in both software load and hardware platform.
Joshua S. Auerbach, David F. Bacon, Daniel T. Iercan, Christoph M. Kirsch, V. T. Rajan, Harald Röck, Rainer Trummer
LCTES2
2007 The ExoVM system for automatic VM and application reduction
abstract
Embedded systems pose unique challenges to Java application developers and virtual machine designers. Chief among these challenges is the memory footprint of both the virtual machine and the applications that run within it. With the rapidly increasing set of features provided by the Java language, virtual machine designers are often forced to build custom implementations that make various tradeoffs between the footprint of the virtual machine and the subset of the Java language and class libraries that are supported. In this paper, we present the ExoVM, a system in which an application is initialized in a fully featured virtual machine, and then the code, data, and virtual machine features necessary to execute it are packaged into a binary image. Key to this process is feature analysis, a technique for computing the reachable code and data of a Java program and its implementation inside the VM simultaneously. The ExoVM reduces the need to develop customized embedded virtual machines by reusing a single VM infrastructure and automatically eliding the implementation of unused Java features on a per-program basis. We present a constraint-based instantiation of the analysis technique, an implementation in IBM's J9 Java VM, experiments evaluating our technique for the EEMBC benchmark suite, and some discussion of the individual costs of some of Java's features. Our evaluation shows that our system can reduce the non-heap memory allocation of the virtual machine by as much as 75%. We discuss VM and language design decisions that our work shows are important in targeting embedded systems, supporting the long-term goal of a common VM infrastructure spanning from motes to large servers.
Ben L. Titzer, Joshua S. Auerbach, David F. Bacon, Jens Palsberg
PLDI3
2007 CGCExplorer: a semi-automated search procedure for provably correct concurrent collectors
abstract
Concurrent garbage collectors are notoriously hard to design, implement, and verify. We present a framework for the automatic exploration of a space of concurrent mark-and-sweep collectors. In our framework, the designer specifies a set of "building blocks" from which algorithms can be constructed. These blocks reflect the designer's insights about the coordination between the collector and the mutator. Given a set of building blocks, our framework automatically explores a space of algorithms, using model checking with abstraction to verify algorithms in the space.
Martin T. Vechev, Eran Yahav, David F. Bacon, Noam Rinetzky
PLDI3
2007 An efficient on-the-fly cycle collection
abstract
A reference-counting garbage collector cannot reclaim unreachable cyclic structures of objects. Therefore, reference-counting collectors either use a backup tracing collector infrequently, or employ a cycle collector to reclaim cyclic structures. We propose a new concurrent cycle collector, one that runs concurrently with the program threads, imposing negligible pauses (of around 1ms) on a multiprocessor. Our new collector combines a state-of-the-art cycle collector [Bacon and Rajan 2001] with sliding-views collectors [Levanoni and Petrank 2001, 2006; Azatchi et al. 2003]. The use of sliding views for cycle collection yields two advantages. First, it drastically reduces the number of cycle candidates, which in turn drastically reduces the work required to record and trace these candidates. Consequentially, a large improvement in cycle collection efficiency is achieved. Second, it eliminates the theoretical termination problem that appeared in the earlier concurrent cycle collector. There, a rare race may delay the reclamation of an unreachable cyclic structure forever. The sliding-views cycle collector guarantees reclamation of all unreachable cyclic structures. The proposed collector was implemented on the Jikes RVM and we provide measurements including a comparison between the use of backup tracing and the use of cycle collection with reference counting. To the best of our knowledge, such a comparison has not been reported before.
Harel Paz, David F. Bacon, Elliot K. Kolodner, Erez Petrank, V. T. Rajan
ACM Trans. Program. Lang. Syst.2
2006 Demonstration: On-Line Visualization and Analysis of Real-Time Systems with TuningFork
David F. Bacon, Perry Cheng, Daniel Frampton, David Grove, Matthias Hauswirth, V. T. Rajan
CC1
2006 Eventrons: a safe programming construct for high-frequency hard real-time applications
abstract
While real-time garbage collection has achieved worst-case latencies on the order of a millisecond, this technology is approaching its practical limits. For tasks requiring extremely low latency, and especially periodic tasks with frequencies above 1 KHz, Java programmers must currently resort to the NoHeapRealtimeThread construct of the Real-Time Specification for Java. This technique requires expensive run-time checks, can result in unpredictable low-level exceptions, and inhibits communication with the rest of the garbage-collected application. We present Eventrons, a programming construct that can arbitrarily preempt the garbage collector, yet guarantees safety and allows its data to be visible to the garbage-collected heap. Eventrons are a strict subset of Java, and require no run-time memory access checks. Safety is enforced using a data-sensitive analysis and simple run-time support with extremely low overhead. We have implemented Eventrons in IBM's J9 Java virtual machine, and present experimental results in which we ran Eventrons at frequencies up to 22 KHz (a 45 μs period). Across 10 million periods, 99.997% of the executions ran within 10 μss of their deadline, compared to 99.999% of the executions of the equivalent program written in C.
Daniel Spoonhower, Joshua S. Auerbach, David F. Bacon, Perry Cheng, David Grove
PLDI3
2006 Correctness-preserving derivation of concurrent garbage collection algorithms
abstract
Constructing correct concurrent garbage collection algorithms is notoriously hard. Numerous such algorithms have been proposed, implemented, and deployed - and yet the relationship among them in terms of speed and precision is poorly understood, and the validation of one algorithm does not carry over to others.As programs with low latency requirements written in garbagecollected languages become part of society's mission-critical infrastructure, it is imperative that we raise the level of confidence in the correctness of the underlying system, and that we understand the trade-offs inherent in our algorithmic choice.In this paper we present correctness-preserving transformations that can be applied to an initial abstract concurrent garbage collection algorithm which is simpler, more precise, and easier to prove correct than algorithms used in practice--but also more expensive and with less concurrency. We then show how both pre-existing and new algorithms can be synthesized from the abstract algorithm by a series of our transformations. We relate the algorithms formally using a new definition of precision, and informally with respect to overhead and concurrency.This provides many insights about the nature of concurrent collection, allows the direct synthesis of new and useful algorithms, reduces the burden of proof to a single simple algorithm, and lays the groundwork for the automated synthesis of correct concurrent collectors.
Martin T. Vechev, Eran Yahav, David F. Bacon
PLDI3
2005 An Efficient On-the-Fly Cycle Collection
Harel Paz, Erez Petrank, David F. Bacon, Elliot K. Kolodner, V. T. Rajan
CC3
2005 Derivation and Evaluation of Concurrent Collectors
Martin T. Vechev, David F. Bacon, Perry Cheng, David Grove
ECOOP2
2005 High-level real-time programming in Java
abstract
Real-time systems have reached a level of complexity beyond the scaling capability of the low-level or restricted languages traditionally used for real-time programming.While Metronome garbage collection has made it practical to use Java to implement real-time systems, many challenges remain for the construction of complex real-time systems, some specific to the use of Java and others simply due to the change in scale of such systems.The goal of our current research is the creation of a comprehensive Java-based programming environment and methodology for the creation of complex real-time systems. Our goals include construction of a provably correct real-time garbage collector capable of providing worst case latencies of 100 μs, capable of scaling from sensor nodes up to large multiprocessors; specialized programming constructs that retain the safety and simplicity of Java, and yet provide sub-microsecond latencies; the extension of Java's "write once, run anywhere" principle from functional correctness to timing behavior; on-line analysis and visualization that aids in the understanding of complex behaviors; and a principled probabilistic analysis methodology for bounding the behavior of the resulting systems.While much remains to be done, this paper describes the progress we have made towards these goals.
David F. Bacon, Perry Cheng, David Grove, Michael Hind, V. T. Rajan, Eran Yahav, Matthias Hauswirth, Christoph M. Kirsch, Daniel Spoonhower, Martin T. Vechev
EMSOFT1
2005 Syncopation: generational real-time garbage collection in the metronome
abstract
Real-time garbage collection has been shown to be feasible, but for programs with high allocation rates, the utilization achievable is not sufficient for some systems.Since a high allocation rate is often correlated with a more high-level, abstract programming style, the ability to provide good real-time performance for such programs will help continue to raise the level of abstraction at which real-time systems can be programmed.We have developed techniques that allow generational collection to be used despite the problems caused by variance in program behavior over the short time scales in which a nursery can be collected. Syncopation allows such behavior to be detected by the scheduler in time for allocation to by-pass the nursery and allow real-time bounds to be met.We have provided an analysis of the costs of both generational and non-generational techniques, which allow the trade-offs to be evaluated quantitatively. We have also provided measurements of application behavior which show that while syncopation is necessary, the need for it is rare enough that generational collection can provide major improvements in real-time utilization. An additional technique, arraylet pre-tenuring, often significantly improves generational behavior.
David F. Bacon, Perry Cheng, David Grove, Martin T. Vechev
LCTES1
2004 Garbage collection for embedded systems
abstract
Security concerns on embedded devices like cellular phones make Java an extremely attractive technology for providing third-party and user-downloadable functionality. However, garbage collectors have typically required several times the maximum live data set size (which is the minimum possible heap size) in order to run well. In addition, the size of the virtual machine (ROM) image and the size of the collector's data structures (metadata) have not been a concern for server- or workstation-oriented collectors.We have implemented two different collectors specifically designed to operate well on small embedded devices. We have also developed a number of algorithmic improvements and compression techniques that allow us to eliminate almost all of the per-object overhead that the virtual machine and the garbage collector require. We describe these optimizations and present measurements of the Java embedded benchmarks (EEMBC) of our implementations on both an IA32 laptop and an ARM-based PDA.For applications with low to moderate allocation rates, our optimized collector running on the ARM is able to achieve 85% of peak performance with only 1.05 to 1.3 times the absolute minimum heap size. For applications with high allocation rates, the collector achieves 85% of peak performance with 1.75 to 2.5 times the minimum heap size. The collector code takes up 40 KB of ROM, and collector metadata overhead has been almost completely eliminated, consuming only 0.4% of the heap.
David F. Bacon, Perry Cheng, David Grove
EMSOFT1
2004 Dynamic selection of application-specific garbage collectors
abstract
Much prior work has shown that the performance enabled by garbage collection (GC) systems is highly dependent upon the behavior of the application as well as on the available resources. That is, no single GC enables the best performance for all programs and all heap sizes. To address this limitation, we present the design, implementation, and empirical evaluation of a novel Java Virtual Machine (JVM) extension that facilitates dynamic switching between a number of very different and popular garbage collectors. We also show how to exploit this functionality using annotation-guided GC selection and evaluate the system using a large number of benchmarks. In addition, we implement and evaluate a simple heuristic to investigate the efficacy of switching automatically. Our results show that, on average, our annotation-guided system introduces less than 4% overhead and improves performance by 24% over the worst-performing GC (across heap sizes) and by 7% over always using the popular Generational/Mark-Sweep hybrid.
Sunil Soman, Chandra Krintz, David F. Bacon
ISMM3
2004 Write barrier elision for concurrent garbage collectors
abstract
Concurrent garbage collectors require write barriers to preserve consistency, but these barriers impose significant direct and indirect costs. While there has been a lot of work on optimizing write barriers, we present the first study of their elision in a concurrent collector. We show conditions under which write barriers are redundant, and describe how these conditions can be applied to both incremental update or snapshot-at-the-beginning barriers. We then evaluate the potential for write barrier elimination with a trace-based limit study, which shows that a significant percentage of write barriers are redundant. On average, 54% of incremental barriers and 83% of snapshot barriers are unnecessary.
Martin T. Vechev, David F. Bacon
ISMM2
2004 A unified theory of garbage collection
abstract
Tracing and reference counting are uniformly viewed as being fundamentally different approaches to garbage collection that possess very distinct performance properties. We have implemented high-performance collectors of both types, and in the process observed that the more we optimized them, the more similarly they behaved - that they seem to share some deep structure.
David F. Bacon, Perry Cheng, V. T. Rajan
OOPSLA1
2003 Controlling fragmentation and space consumption in the metronome, a real-time garbage collector for Java
abstract
Now that the use of garbage collection in languages like Java is becoming widely accepted due to the safety and software engineering benefits it provides, there is significant interest in applying garbage collection to hard real-time systems. Past approaches have generally suffered from one of two major flaws: either they were not provably real-time, or they imposed large space overheads to meet the real-time bounds.Our previous work [3] presented the Metronome, a mostly non-copying real-time collector. The Metronome achieves worst-case pause times of 6 milliseconds while maintaining consistent mutator CPU utilization rates of 50% with only 1.5-2.1 times the maximum heap space required by the application, which is comparable with space requirements for stop-the-world collectors.However, that algorithm assumed a constant collection rate, ignored program-dependent characteristics, and lacked a precise specification for when to trigger collection or how much defragmentation to perform. This paper refines the model by taking into account program properties such as pointer density, average object size, and locality of object size. This allows us to bound both the time for collection and consequently the space overhead required much more tightly. We show experimentally that most parameters usually are not subject to large variation, indicating that a small number of parameters will be sufficient to predict the time and space requirements accurately.Our previous work also did not present the details of our approach to avoiding and undoing fragmentation. In this paper we present a more detailed analysis of fragmentation than in previous work, and show how our collector is able to bound fragmentation to acceptable limits.
David F. Bacon, Perry Cheng, V. T. Rajan
LCTES1
2003 MJ: a rational module system for Java and its applications
abstract
While Java provides many software engineering benefits, it lacks a coherent module system and instead provides only packages (which are primarily a name space mechanism) and classloaders (which are very low-level). As a result, large Java applications suffer from unexpected interactions between independent components, require complex CLASSPATH definitions, and are often extremely complex to install and maintain. We have implemented a module system for Java called MJ that is implemented with class loaders, but provides a much higher-level interface. High-level properties can be specified in a module definition and are enforced by the module system as new modules are loaded. To experimentally validate the ability of MJ to properly handle the complex module inter-relationships found in large Java server systems, we replaced the classloader mechanisms of Apache Tomcat 4.1.18 [27] with 30 MJ modules. The modified Tomcat is functionally identical to the original, but requires no CLASSPATH definitions, and will operate correctly even if user code loads a different version of a module used by Tomcat, such as the Xerces XML parser [31]. Furthermore, by making a small change to the Java core libraries enabled by MJ, we obtained a 30% performance improvement in a servlet microbenchmark.
John Corwin, David F. Bacon, David Grove, Chet Murthy
OOPSLA2
2003 A real-time garbage collector with low overhead and consistent utilization
abstract
Now that the use of garbage collection in languages like Java is becoming widely accepted due to the safety and software engineering benefits it provides, there is significant interest in applying garbage collection to hard real-time systems. Past approaches have generally suffered from one of two major flaws: either they were not provably real-time, or they imposed large space overheads to meet the real-time bounds. We present a mostly non-moving, dynamically defragmenting collector that overcomes both of these limitations: by avoiding copying in most cases, space requirements are kept low; and by fully incrementalizing the collector we are able to meet real-time bounds. We implemented our algorithm in the Jikes RVM and show that at real-time resolution we are able to obtain mutator utilization rates of 45% with only 1.6--2.5 times the actual space required by the application, a factor of 4 improvement in utilization over the best previously published results. Defragmentation causes no more than 4% of the traced data to be copied.
David F. Bacon, Perry Cheng, V. T. Rajan
POPL1
2003 Kava: a Java dialect with a uniform object model for lightweight classes
abstract
Abstract Object‐oriented programming languages have always distinguished between ‘primitive’ and ‘user‐defined’ data types, and in the case of languages like C++ and Java the primitives are not even treated as objects, further fragmenting the programming model. The distinction is especially problematic when a particular programming community requires primitive‐level support for a new data type, as for complex, intervals, fixed‐point numbers, and so on. We present Kava, a design for a backward‐compatible version of Java that solves the problem of programmable lightweight objects in a much more aggressive and uniform manner than previous proposals. In Kava, there are no primitive types; instead, object‐oriented programming is provided down to the level of single bits, and types such as int can be explicitly programmed within the language. While the language maintains a uniform object reference semantics, efficiency is obtained by making heavy use ofunboxingandsemantic expansion. We describe Kava as a dialect of the Java language, show how it can be used to define various primitive types, describe how it can be translated into Java, and compare it to other approaches to lightweight objects. Copyright © 2003 John Wiley & Sons, Ltd.
David F. Bacon
Concurr. Comput. Pract. Exp.1
2002 Space- and Time-Efficient Implementation of the Java Object Model
David F. Bacon, Stephen J. Fink, David Grove
ECOOP1
2001 Concurrent Cycle Collection in Reference Counted Systems
David F. Bacon, V. T. Rajan
ECOOP1
2001 Java without the Coffee Breaks: A Nonintrusive Multiprocessor Garbage Collector
abstract
The deployment of Java as a concurrent programming language has created a critical need for high-performance, concurrent, and incremental multiprocessor garbage collection. We present the Recycler, a fully concurrent pure reference counting garbage collector that we have implemented in the Jalapeno Java virtual machine running on shared memory multiprocessors.While a variety of multiprocessor collectors have been proposed and some have been implemented, experimental data is limited and there is little quantitative basis for comparison between different algorithms. We present measurements of the Recycler and compare it against a non-concurrent but parallel load-balancing mark-and-sweep collector (that we also implemented in Jalapeno), and evaluate the classical tradeoff between response time and throughput.When processor or memory resources are limited, the Recycler runs at about 90% of the speed of the mark-and-sweep collector. However, with an extra processor to run collection and with a moderate amount of memory headroom, the Recycler is able to operate without ever blocking the mutators and achieves a maximum measured mutator delay of only 2.6 milliseconds for our benchmarks. End-to-end execution time is usually within 5%.
David F. Bacon, C. Richard Attanasio, Han Bok Lee, V. T. Rajan, Stephen E. Smith
PLDI1
2000 Guava: a dialect of Java without data races
abstract
We introduce Guava, a dialect of Java whose rules statically guarantee that parallel threads access shared data only through synchronized methods. Our dialect distinguishes three categories of classes: (1) monitors, which may be referenced from multiple threads, but whose methods are accessed serially; (2) values, which cannot be referenced and therefore are never shared; and (3) objects, which can have multiple references but only from within one thread, and therefore do not need to be synchronized. Guava circumvents the problems associated with today's Java memory model, which must define behavior when concurrent threads access shared memory without synchronization.We present an overview of the syntax and the semantic rules of Guava. We discuss how implementations of Guava can exploit these rules to re-enable compiler optimizations inhibited by standard Java. We discuss how compilers for certain multiprocessor architectures can automatically generate certain programming idioms, such as double-check reads, as optimizations of serialized monitors.
David F. Bacon, Robert E. Strom, Ashis Tarafdar
OOPSLA1
1998 Thin Locks: Featherweight Synchronization for Java
abstract
Language-supported synchronization is a source of serious performance problems in many Java programs. Even single-threaded applications may spend up to half their time performing useless synchronization due to the thread-safe nature of the Java libraries. We solve this performance problem with a new algorithm that allows lock and unlock operations to be performed with only a few machine instructions in the most common cases. Our locks only require a partial word per object, and were implemented without increasing object size. We present measurements from our implementation in the JDK 1.1.2 for AIX, demonstrating speedups of up to a factor of 5 in micro-benchmarks and up to a factor of 1.7 in real programs.
David F. Bacon, Ravi B. Konuru, Chet Murthy, Mauricio J. Serrano
PLDI1
1996 Fast Static Analysis of C++ Virtual Function Calls
abstract
Virtual functions make code easier for programmers to reuse but also make it harder for compilers to analyze. We investigate the ability of three static analysis algorithms to improve C++ programs by resolving virtual function calls, thereby reducing compiled code size and reducing program complexity so as to improve both human and automated program understanding and analysis. In measurements of seven programs of significant size (5000 to 20000 lines of code each) we found that on average the most precise of the three algorithms resolved 71% of the virtual function calls and reduced compiled code size by 25%. This algorithm is very fast: it analyzes 3300 source lines per second on an 80 MHz PowerPC 601. Because of its accuracy and speed, this algorithm is an excellent candidate for inclusion in production C++ compilers.
David F. Bacon, Peter F. Sweeney
OOPSLA1
1991 Optimistic Parallelization of Communicating Sequential Processes
abstract
We present a transparent program transformation which converts a sequential execution of S1 ; S2 by a process in a multiprocess environment into an optimistic parallel execution of S1 and S2 . Such a transformation is valuable in the case where S1 and S2 cannot be parallelized by static analysis either because S2 reads a value from S1 or because S1 and S2 each interact with an external process. The optimistic transformation works under a weaker set of conditions: (1) if the value S2 reads from S1 can usually, but not always, be correctly guessed ahead of time, and (2) if S1 and S2 interact with an external process, conflicts which violate the ordering of S1 and S2 are possible but rare. Practical applications of this approach include executing the likely outcome of a test in parallel with making the test, and converting sequences of calls into streams of asynchronous sends. We analyze the problem using the framework of guarded computations, in which each computation is tagged with th...
David F. Bacon, Robert E. Strom
PPoPP1
1991 File System Measurements and their Application to the Design of Efficient Operation Logging Algorithm
abstract
File system operation in a transparently fault-tolerant system that uses checkpointing and message logging is discussed. Logging messages to disk is one of the primary performance costs of such systems. The author has measured the file system operations performed on large timesharing systems running Unix in terms of the level of concurrency (number of consecutive operations that do not change the state of the file system). By performing much of the data analysis online within a modified Unix kernel, statistics were collected over a long period of time with a substantial variation in system load. Using this data, it is demonstrated that a technique called null logging can reduce the number of messages logged to disk by a factor of 10 to 25, depending on the workload. This reduces the overhead of the fault-tolerance mechanism and allows a large fraction of file system operations to commit instantaneously.>
David F. Bacon
SRDS1