Network


Latest external collaboration on country level. Dive into details by clicking on the dots.

Hotspot


Dive into the research topics where Derek L. Bruening is active.

Publication


Featured researches published by Derek L. Bruening.


symposium on code generation and optimization | 2003

An infrastructure for adaptive dynamic optimization

Derek L. Bruening; Timothy Garnett; Saman P. Amarasinghe

Dynamic optimization is emerging as a promising approach to overcome many of the obstacles of traditional static compilation. But while there are a number of compiler infrastructures for developing static optimizations, there are very few for developing dynamic optimizations. We present a framework for implementing dynamic analyses and optimizations. We provide an interface for building external modules, or clients, for the DynamoRIO dynamic code modification system. This interface abstracts away many low-level details of the DynamoRIO runtime system while exposing a simple and powerful, yet efficient and lightweight API. This is achieved by restricting optimization units to linear streams of code and using adaptive levels of detail for representing instructions. The interface is not restricted to optimization and can be used for instrumentation, profiling, dynamic translation, etc. To demonstrate the usefulness and effectiveness of our framework, we implemented several optimizations. These improve the performance of some applications by as much as 40% relative to native execution. The average speedup relative to base DynamoRIO performance is 12%.


symposium on code generation and optimization | 2006

Thread-Shared Software Code Caches

Derek L. Bruening; Vladimir Kiriansky; Timothy Garnett; Sanjeev Banerji

Software code caches are increasingly being used to amortize the runtime overhead of dynamic optimizers, simulators, emulators, dynamic translators, dynamic compilers, and other tools. Despite the now-wide spread use of code caches, techniques for efficiently sharing them across multiple threads have not been fully explored. Some systems simply do not support threads, while others resort to thread-private code caches. Although thread-private caches are much simpler to manage, synchronize, and provide scratch space for, they simply do not scale when applied to many-threaded programs. Thread-shared code caches are needed to target server applications, which employ hundreds of worker threads all performing similar tasks. Yet, those systems that do share their code caches often have brute-force, inefficient solutions to the challenges of concurrent code cache access: a single global lock on runtime system code and suspension of all threads for any cache management action. This limits the possibilities for cache design and has performance problems with applications that require frequent cache invalidations to maintain cache consistency. In this paper, we discuss the design choices when building thread-shared code caches and enumerate the difficulties of thread-local storage, synchronization, trace building, in-cache lookup tables, and cache eviction. We present efficient solutions to these problems that both scale well and do not require thread suspension. We evaluate our results in DynamoRIO, an industrial-strength dynamic binary translation system, on real-world server applications. On these applications our thread-shared caches use an order of magnitude less memory and improve throughput by up to four times compared to thread-private caches.


interpreters, virtual machines and emulators | 2003

Dynamic native optimization of interpreters

Gregory T. Sullivan; Derek L. Bruening; Iris Baron; Timothy Garnett; Saman P. Amarasinghe

For domain specific languages, scripting languages, dynamic languages, and for virtual machine-based languages, the most straightforward implementation strategy is to write an interpreter. A simple interpreter consists of a loop that fetches the next bytecode, dispatches to the routine handling that bytecode, then loops. There are many ways to improve upon this simple mechanism, but as long as the execution of the program is driven by a representation of the program other than as a stream of native instructions, there will be some interpretive overhead.There is a long history of approaches to removing interpretive overhead from programming language implementations. In practice, what often happens is that, once an interpreted language becomes popular, pressure builds to improve performance until eventually a project is undertaken to implement a native Just In Time (JIT) compiler for the language. Implementing a JIT is usually a large effort, affects a significant part of the existing language implementation, and adds a significant amount of code and complexity to the overall code base.In this paper, we present an innovative approach that dynamically removes much of the interpreted overhead from language implementations, with minimal instrumentation of the original interpreter. While it does not give the performance improvements of hand-crafted native compilers, our system provides an appealing point on the language implementation spectrum.


symposium on code generation and optimization | 2005

Maintaining Consistency and Bounding Capacity of Software Code Caches

Derek L. Bruening; Saman P. Amarasinghe

Software code caches are becoming ubiquitous, in dynamic optimizers, runtime tool platforms, dynamic translators fast simulators and emulators, and dynamic compilers. Caching frequently executed fragments of code provides significant performance boosts, reducing the overhead of translation and emulation and meeting or exceeding native performance in dynamic optimizers. One disadvantage of caching, memory expansion, can sometimes be ignored when executing a single application. However, as optimizers and translators are applied more and more in production systems, the memory expansion from running multiple applications simultaneously becomes problematic. A second drawback to caching is the added requirement of maintaining consistency between the code cache and the original code. On architectures like IA-32 that do not require explicit application actions when modifying code, detecting code changes is challenging. Again, consistency can be ignored for certain sets of applications, but as caching systems scale up to executing large, modern, complex programs, consistency becomes critical. This paper presents efficient schemes for keeping a software code cache consistent and for dynamically bounding code cache size to match the current working set of the application. These schemes are evaluated in the DynamoRIO runtime code manipulation system, and operate on stock hardware in the presence of multiple threads and dynamic behavior, including dynamically-loaded, generated, and even modified code.


usenix security symposium | 2002

Secure Execution via Program Shepherding

Vladimir Kiriansky; Derek L. Bruening; Saman P. Amarasinghe


Archive | 2004

Efficient, transparent, and comprehensive runtime code manipulation

Derek L. Bruening; Saman P. Amarasinghe


Archive | 2003

Secure execution of a computer program

Vladimir Kiriansky; Derek L. Bruening; Saman P. Amarasinghe


Archive | 2000

Design and implementation of a dynamic optimization framework for windows

Derek L. Bruening; Saman P. Amarasinghe; Evelyn Duesterwald


Archive | 2000

Exploring optimal compilation unit shapes for an embedded just-in-time compiler

Derek L. Bruening; Evelyn Duesterwald


Archive | 2006

Adaptive cache sizing

Derek L. Bruening; Saman P. Amarasinghe

Collaboration


Dive into the Derek L. Bruening's collaboration.

Top Co-Authors

Avatar

Saman P. Amarasinghe

Massachusetts Institute of Technology

View shared research outputs
Top Co-Authors

Avatar

Vladimir Kiriansky

Massachusetts Institute of Technology

View shared research outputs
Top Co-Authors

Avatar

Timothy Garnett

Massachusetts Institute of Technology

View shared research outputs
Top Co-Authors

Avatar

Gregory T. Sullivan

Massachusetts Institute of Technology

View shared research outputs
Top Co-Authors

Avatar

Iris Baron

Massachusetts Institute of Technology

View shared research outputs
Top Co-Authors

Avatar

John M. Chapin

Massachusetts Institute of Technology

View shared research outputs
Researchain Logo
Decentralizing Knowledge