Tim Harris 0001

dblp:61/3834 · also Timothy L. Harris · DBLP profile ↗
← Back
66ranked-venue papers
16as first author
0since 2021 · last 2018
0000-0001-9628-130XORCID · corroborated

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

Systems, architecture and hardware · 36 · 5 first-authorSoftware engineering, systems software and programming languages · 21 · 10 first-authorTheory of computation · 3Databases, data management, data science and information retrieval · 2Computer networks · 1

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.

Computer architecture, parallel and distributed computing, and storage systems
26 papers
Parallel and multicore computing · 42% Memory systems · 28% Performance modeling and evaluation · 8%
Software engineering, system software, and programming languages
23 papers
Concurrent programming · 57% Runtime systems and virtual machines · 18% Programming languages and type systems · 11%
Databases, data mining, and information retrieval
3 papers
Transaction processing and concurrency control · 52% Query processing and optimization · 26% Data mining · 14%

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

TopicWeightPapersLastEvidence papers
Concurrent programming
transactional memory
1.0112011
Semantics of transactional memory and automatic mutual exclusion · ACM Trans. Program. Lang. Syst. 2011
Weak atomicity under the x86 memory consistency model · PPoPP 2011
A model of dynamic separation for transactional memory · Inf. Comput. 2010
Runtime systems and virtual machines
managed runtime
0.622018
Analytics with smart arrays: adaptive and efficient language-independent data · EuroSys 2018
Taurus: A Holistic Language Runtime System for Coordinating Distributed Managed-Language Applications · ASPLOS 2016
Memory systems
non-volatile memory
0.422018
Brief Announcement: Persistent Multi-Word Compare-and-Swap · PODC 2018
Closing the Performance Gap Between Volatile and Persistent Key-Value Stores Using Cross-Referencing Logs · USENIX ATC 2018
Memory systems
memory management
0.422018
Analytics with smart arrays: adaptive and efficient language-independent data · EuroSys 2018
Shoal: Smart Allocation and Replication of Memory For Parallel Programs · USENIX ATC 2015
Parallel and multicore computing
parallel programming models
0.432015
Callisto-RTS: Fine-Grain Parallel Loops · USENIX ATC 2015
EazyHTM: eager-lazy hardware transactional memory · MICRO 2009
Shoal: Smart Allocation and Replication of Memory For Parallel Programs · USENIX ATC 2015
Memory systems › non-uniform memory access
NUMA data placement
0.312018
Analytics with smart arrays: adaptive and efficient language-independent data · EuroSys 2018
Storage systems › key-value storage
persistent key-value store
0.312018
Closing the Performance Gap Between Volatile and Persistent Key-Value Stores Using Cross-Referencing Logs · USENIX ATC 2018
Memory systems › non-volatile memory
persistent memory
0.312018
Brief Announcement: Persistent Multi-Word Compare-and-Swap · PODC 2018
Concurrent programming
synchronization
0.332012
Hardware transactional memory with software-defined conflicts · ACM Trans. Archit. Code Optim. 2012
Atomic quake: using transactional memory in an interactive multiplayer game server · PPoPP 2009
Revocable locks for non-blocking programming · PPoPP 2005
Transaction processing and concurrency control
distributed transaction processing
0.312017
The End of a Myth: Distributed Transaction Can Scale · Proc. VLDB Endow. 2017
Performance modeling and evaluation › performance model construction › memory system performance modeling
contention modeling
0.312017
Pandia: comprehensive contention-sensitive thread placement · EuroSys 2017
Parallel and multicore computing › task allocation
thread placement
0.312017
Pandia: comprehensive contention-sensitive thread placement · EuroSys 2017
Performance modeling and evaluation
workload characterization
0.312017
Pandia: comprehensive contention-sensitive thread placement · EuroSys 2017
Programming languages and type systems › concurrent programming languages
language constructs for concurrency
0.332011
AC: composable asynchronous IO for native languages · OOPSLA 2011
Language constructs for transactional memory · POPL 2009
Language support for lightweight transactions · OOPSLA 2003
Concurrent programming › atomicity
atomic sections
0.342009
Language constructs for transactional memory · POPL 2009
Featherweight transactions: decoupling threads and atomic blocks · PPoPP 2007
Optimizing memory transactions · PLDI 2006
Distributed systems
distributed coordination
0.212016
Taurus: A Holistic Language Runtime System for Coordinating Distributed Managed-Language Applications · ASPLOS 2016
Parallel and multicore computing
concurrent programming
0.222018
STM in the small: trading generality for performance in software transactional memory · EuroSys 2012
Brief Announcement: Persistent Multi-Word Compare-and-Swap · PODC 2018
Parallel and multicore computing › transactional memory
hardware transactional memory
0.222012
Hardware transactional memory with software-defined conflicts · ACM Trans. Archit. Code Optim. 2012
EazyHTM: eager-lazy hardware transactional memory · MICRO 2009
Parallel and multicore computing
transactional memory
0.222012
Hardware transactional memory with software-defined conflicts · ACM Trans. Archit. Code Optim. 2012
EazyHTM: eager-lazy hardware transactional memory · MICRO 2009
Concurrent programming › transactional memory
software transactional memory
0.232011
Weak atomicity under the x86 memory consistency model · PPoPP 2011
Concurrent programming without locks · ACM Trans. Comput. Syst. 2007
Language support for lightweight transactions · OOPSLA 2003
Programming languages and type systems
language semantics
0.222011
Semantics of transactional memory and automatic mutual exclusion · ACM Trans. Program. Lang. Syst. 2011
A model of dynamic separation for transactional memory · Inf. Comput. 2010
Memory systems › memory management
memory allocation
0.212015
Shoal: Smart Allocation and Replication of Memory For Parallel Programs · USENIX ATC 2015
Parallel and multicore computing › parallelization strategies › loop parallelism
parallel loop execution
0.212015
Callisto-RTS: Fine-Grain Parallel Loops · USENIX ATC 2015
Parallel and multicore computing › parallel scheduling
coscheduling
0.212014
Callisto: co-scheduling parallel runtime systems · EuroSys 2014
Embedded and real-time systems › real-time scheduling
multicore scheduling
0.212014
Deployment of Query Plans on Multicores · Proc. VLDB Endow. 2014
Parallel and multicore computing
parallel programming runtimes
0.212014
Callisto: co-scheduling parallel runtime systems · EuroSys 2014
Cloud and datacenter computing
resource management
0.212014
Callisto: co-scheduling parallel runtime systems · EuroSys 2014
Parallel and multicore computing › transactional memory
software transactional memory
0.112012
STM in the small: trading generality for performance in software transactional memory · EuroSys 2012
Operating systems › i/o
asynchronous i/o
0.112011
AC: composable asynchronous IO for native languages · OOPSLA 2011
Memory systems › memory consistency
memory consistency model
0.112011
Weak atomicity under the x86 memory consistency model · PPoPP 2011

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

bit compression · 1.0adaptive data placement · 1.0snapshot isolation · 0.6RDMA · 0.6distributed runtime coordination · 0.5compare-and-swap · 0.5resource activity vectors · 0.4dataflow analysis · 0.4hardware transactional memory · 0.3topology abstraction · 0.3operational semantics · 0.2software-defined conflict · 0.1conflict attribute · 0.1type system · 0.1single lock atomicity · 0.1dynamic filtering · 0.1conflict analysis · 0.1data flow analysis · 0.1
YearPublicationVenuePosition
2018 Analytics with smart arrays: adaptive and efficient language-independent data
abstract
This paper introduces smart arrays, an abstraction for providing adaptive and efficient language-independent data storage. Their smart functionalities include NUMA-aware data placement across sockets and bit compression. We show how our single C++ implementation can be used efficiently from both native C++ and compiled Java code. We experimentally evaluate smart arrays on a diverse set of C++ and Java analytics workloads. Further, we show how their smart functionalities affect performance and lead to differences in hardware resource demands on multicore machines, motivating the need for adaptivity. We observe that smart arrays can significantly decrease the memory space requirements of analytics workloads, and improve their performance by up to 4x. Smart arrays are the first step towards general smart collections with various smart functionalities that enable the consumption of hardware resources to be traded-off against one another.
Iraklis Psaroudakis, Stefan Kaestle, Matthias Grimmer, Jean-Pierre Lozi, Tim Harris 0001
EuroSys6
2018 Brief Announcement: Persistent Multi-Word Compare-and-Swap
abstract
This brief announcement presents a fundamental concurrent primitive for persistent memory - a persistent atomic multi-word compare-and-swap (PMCAS).We present a novel algorithm carefully crafted to ensure that atomic updates to a multitude of words modified by the PMCAS are persisted correctly. Our algorithm leverages hardware transactional memory (HTM) for concurrency control, and has a total of 3 persist barriers in its critical path. We also overview variants based on just the compare-and-swap (CAS) instruction and a hybrid of CAS and HTM.
Matej Pavlovic, Alex Kogan, Virendra J. Marathe, Tim Harris 0001
PODC4
2018 Closing the Performance Gap Between Volatile and Persistent Key-Value Stores Using Cross-Referencing Logs
Yihe Huang, Matej Pavlovic, Virendra J. Marathe, Margo I. Seltzer, Tim Harris 0001, Steve Byan
USENIX ATC5
2017 Abstracting Multi-Core Topologies with MCTOP
abstract
Portability and efficiency are usually antagonists in multi-core computing. In order to develop efficient code, one needs to take into account the topology of the target multi-cores (e.g., for locality). This clearly hampers code portability. In this paper, we show that you can have the cake and eat it too.
Georgios Chatzopoulos, Rachid Guerraoui, Tim Harris 0001, Vasileios Trigonakis
EuroSys3
2017 Pandia: comprehensive contention-sensitive thread placement
abstract
Pandia is a system for modeling the performance of in-memory parallel workloads. It generates a description of a workload from a series of profiling runs, and combines this with a description of the machine's hardware to model the workload's performance over different thread counts and different placements of those threads.
Georgios Varisteas, Tim Harris 0001
EuroSys3
2017 Persistent Memcached: Bringing Legacy Code to Byte-Addressable Persistent Memory
Virendra J. Marathe, Margo I. Seltzer, Steve Byan, Tim Harris 0001
HotStorage4
2017 The End of a Myth: Distributed Transaction Can Scale
abstract
The common wisdom is that distributed transactions do not scale. But what if distributed transactions could be made scalable using the next generation of networks and a redesign of distributed databases? There would no longer be a need for developers to worry about co-partitioning schemes to achieve decent performance. Application development would become easier as data placement would no longer determine how scalable an application is. Hardware provisioning would be simplified as the system administrator can expect a linear scale-out when adding more machines rather than some complex sub-linear function, which is highly application specific. In this paper, we present the design of our novel scalable database system NAM-DB and show that distributed transactions with the very common Snapshot Isolation guarantee can indeed scale using the next generation of RDMA-enabled network technology without any inherent bottlenecks. Our experiments with the TPC-C benchmark show that our system scales linearly to over 6.5 million new-order (14.5 million total) distributed transactions per second on 56 machines.
Erfan Zamanian, Carsten Binnig, Tim Kraska, Tim Harris 0001
Proc. VLDB Endow.4
2016 Taurus: A Holistic Language Runtime System for Coordinating Distributed Managed-Language Applications
abstract
Many distributed workloads in today's data centers are written in managed languages such as Java or Ruby. Examples include big data frameworks such as Hadoop, data stores such as Cassandra or applications such as the SOLR search engine. These workloads typically run across many independent language runtime systems on different nodes. This setup represents a source of inefficiency, as these language runtime systems are unaware of each other. For example, they may perform Garbage Collection at times that are locally reasonable but not in a distributed setting.
Martin Maas 0001, Krste Asanovic, Tim Harris 0001, John Kubiatowicz
ASPLOS3
2016 Composable scheduler activations for Haskell
abstract
Abstract The runtime for a modern, concurrent, garbage collected language like Java or Haskell is like an operating system: sophisticated, complex, performant, but alas very hard to change. If more of the runtime system were in the high-level language, it would be far more modular and malleable. In this paper, we describe a novel concurrency substrate design for the Glasgow Haskell Compiler that allows multicore schedulers for concurrent and parallel Haskell programs to be safely and modularly described as libraries in Haskell. The approach relies on abstracting the interface to the user-implemented schedulers through scheduler activations, together with the use of Software Transactional Memory to promote safety in a multicore context.
K. C. Sivaramakrishnan, Tim Harris 0001, Simon Marlow, Simon L. Peyton Jones
J. Funct. Program.2
2015 Trash Day: Coordinating Garbage Collection in Distributed Systems
Martin Maas 0001, Tim Harris 0001, Krste Asanovic, John Kubiatowicz
HotOS2
2015 Callisto-RTS: Fine-Grain Parallel Loops
Tim Harris 0001, Stefan Kaestle
USENIX ATC1
2015 Shoal: Smart Allocation and Replication of Memory For Parallel Programs
Stefan Kaestle, Reto Achermann, Timothy Roscoe, Tim Harris 0001
USENIX ATC4
2014 Callisto: co-scheduling parallel runtime systems
abstract
It is increasingly important for parallel applications to run together on the same machine. However, current performance is often poor: programs do not adapt well to dynamically varying numbers of cores, and the CPU time received by concurrent jobs can differ drastically. This paper introduces Callisto, a resource management layer for parallel runtime systems. We describe Callisto and the implementation of two Callisto-enabled runtime systems---one for OpenMP, and another for a task-parallel programming model. We show how Callisto eliminates almost all of the scheduler-related interference between concurrent jobs, while still allowing jobs to claim otherwise-idle cores. We use examples from two recent graph analytics projects and from SPEC OMP.
Tim Harris 0001, Martin Maas 0001, Virendra J. Marathe
EuroSys1
2014 Deployment of Query Plans on Multicores
abstract
Efficient resource scheduling of multithreaded software on multicore hardware is difficult given the many parameters involved and the hardware heterogeneity of existing systems. In this paper we explore the efficient deployment of query plans over a multicore machine. We focus on shared query systems, and implement the proposed ideas using SharedDB. The goal of the paper is to explore how to deliver maximum performance and predictability, while minimizing resource utilization when deploying query plans on multicore machines. We propose to use resource activity vectors to characterize the behavior of individual database operators. We then present a novel deployment algorithm which uses these vectors together with dataflow information from the query plan to optimally assign relational operators to physical cores. Experiments demonstrate that this approach significantly reduces resource requirements while preserving performance and is robust across different server architectures.
Jana Giceva, Gustavo Alonso, Timothy Roscoe, Tim Harris 0001
Proc. VLDB Endow.4
2013 HARP: Adaptive abort recurrence prediction for Hardware Transactional Memory
abstract
Hardware Transactional Memory (HTM) exposes parallelism by allowing possibly conflicting sections of code, called transactions, to execute concurrently in multithreaded applications. However, conflicts among concurrent transactions result in wasted computation and expensive rollbacks. Under high contention HTM protocol overheads can, in many cases, amount to several times the useful work done. Blindly scheduling transactions in the presence of contention is therefore clearly suboptimal from a resource utilization standpoint, especially in situations where several scheduling options exist. This paper presents HARP (Hardware Abort Recurrence Predictor), a hardware-only mechanism to avoid speculation when it is likely to fail. Inspired by branch prediction strategies and prior work on contention management and scheduling in HTM, HARP uses past behavior of transactions and locality in conflicting memory references to accurately predict conflicts. The prediction mechanism adapts to variations in workload characteristics and enables better utilization of computational resources. We show that an HTM protocol that integrates HARP exhibits reductions in both wasted execution time and serialization overheads when compared to prior work, leading to a significant increase in throughput (~30%) in both single-application and multi-application scenarios.
Adrià Armejach, Anurag Negi, Adrián Cristal, Osman S. Unsal, Per Stenström, Tim Harris 0001
HiPC6
2013 TM-dietlibc: A TM-aware Real-World System Library
abstract
The simplicity of concurrent programming with Transactional Memory (TM) and its recent implementation in mainstream processors greatly motivates researchers and industry to investigate this field and propose new implementations and optimizations. However, there is still no standard C system library which a wide range of TM developers can adopt. TM application developers have been forced to avoid library calls inside of transactions or to execute them irrevocably (i.e. in serial order). In this paper, we present the first TM-aware system library, a complex software implementation integrated with TM principles and suited for software (STM), hardware (HTM) and hybrid TM (HyTM). The library we propose is derived from a modified lock-based implementation and can be used with the existing standard C API. In our work, we describe design challenges and code optimizations that would be specific to any TM-based system library or application. We argue about system call execution within transactions, highlighting the possibility of unexpected results from threads. For this reason we propose: (1) a mechanism for detecting conflicts over kernel data in user space, and (2) a new barrier to allow hybrid TM to be used effectively with system libraries. Our evaluation includes different TM implementations and the focus is on memory management and file operations since they are widely used in applications and require additional mechanisms for concurrent execution. We show the benefit we gain with our libc modifications providing parallel execution as much as possible. The library we propose shows high scalability when linked with STM and HTM. For file operations it shows on average a 1.1, 2.6 and 3.7x performance speedup for 8 cores using HyTM, STM and HTM, respectively (over a lock-based single-threaded execution). For a red-black tree it shows on average 3.14x performance speedup for 8 cores using STM (over a multi-read single-threaded execution).
Vesna Smiljkovic, Martin Nowack, Neboja Miletic, Tim Harris 0001, Osman S. Unsal, Adrián Cristal, Mateo Valero
IPDPS4
2013 Message Passing or Shared Memory: Evaluating the Delegation Abstraction for Multicores
Irina Calciu, David Dice, Tim Harris 0001, Maurice Herlihy, Alex Kogan, Virendra J. Marathe, Mark Moir
OPODIS3
2012 Supporting stateful tasks in a dataflow graph
abstract
This paper introduces Atomic Dataflow Model (ADF) - a programming model for shared-memory systems that combines aspects of dataflow programming with the use of explicitly mutable state. The model provides language constructs that allow a programmer to delineate a program into a set of tasks and to explicitly define input data for each task. This information is conveyed to the ADF runtime system which constructs the task dependency graph and builds the necessary infrastructure for dataflow execution. However, the key aspect of the proposed model is that it does not require the programmer to specify all of the task's dependencies explicitly, but only those that imply logical ordering between tasks. The ADF model manages the remainder of inter-task dependencies automatically, by executing the body of the task within an implicit memory transaction. This provides an easy-to-program optimistic concurrency substrate and enables a task to safely share data with other concurrent tasks. In this paper, we describe the ADF model and show how it can increase the programmability of shared memory systems.
Vladimir Gajinov, Srdjan Stipic, Osman S. Unsal, Tim Harris 0001, Eduard Ayguadé, Adrián Cristal
PACT4
2012 Lock Inference in the Presence of Large Libraries
Khilan Gudka, Tim Harris 0001, Susan Eisenbach
ECOOP2
2012 STM in the small: trading generality for performance in software transactional memory
abstract
Data structures implemented using software transactional memory (STM) have a reputation for being much slower than data structures implemented directly from low-level primitives such as atomic compare-and-swap (CAS). In this paper we present a specialized STM system (SpecTM) that allows the program to express additional knowledge about the particular operations being performed by transactions e.g., using a separate API to write transactions that access small, fixed, numbers of memory locations. We show that data structures implemented using SpecTM offer essentially the same performance and scalability as implementations built directly from CAS. We present results using hash tables and skip lists on machines with up to 8 sockets and up to 128 hardware threads. Specialized transactions can be mixed with normal transactions, allowing fast-path operations to be specialized for greater performance, while allowing less common cases to be expressed using normal transactions for simplicity. We believe that SpecTM provides a "sweet spot" for expert programmers developing scalable data structures.
Aleksandar Dragojevic, Tim Harris 0001
EuroSys2
2012 Integrating Dataflow Abstractions into the Shared Memory Model
abstract
In this paper we present Atomic Dataflow model (ADF), a new task-based parallel programming model for C/C++ which integrates dataflow abstractions into the shared memory programming model. The ADF model provides pragma directives that allow a programmer to organize a program into a set of tasks and to explicitly define input data for each task. The task dependency information is conveyed to the ADF runtime system which constructs the dataflow task graph and builds the necessary infrastructure for dataflow execution. Additionally, the ADF model allows tasks to share data. The key idea is that computation is triggered by dataflow between tasks but that, within a task, execution occurs by making atomic updates to common mutable state. To that end, the ADF model employs transactional memory which guarantees atomicity of shared memory updates. We show examples that illustrate how the programmability of shared memory can be improved using the ADF model. Moreover, our evaluation shows that the ADF model performs well in comparison with programs parallelized using OpenMP and transactional memory.
Vladimir Gajinov, Srdjan Stipic, Osman S. Unsal, Tim Harris 0001, Eduard Ayguadé, Adrián Cristal
SBAC-PAD4
2012 Weak atomicity for the x86 memory consistency model
Amitabha Roy 0002, Steven Hand 0001, Tim Harris 0001
J. Parallel Distributed Comput.3
2012 Hardware transactional memory with software-defined conflicts
abstract
In this paper we investigate the benefits of turning the concept of transactional conflict from its traditionally fixed definition into a variable one that can be dynamically controlled in software. We propose the extension of the atomic language construct with an attribute that specifies the definition of conflict, so that programmers can write code which adjusts what kinds of conflicts are to be detected, relaxing or tightening the conditions according to the forms of interference that can be tolerated by a particular algorithm. Using this performance-motivated construct, specific conflict information can be associated with portions of code, as each transaction is provided with a local definition that applies while it executes. We find that defining conflicts in software makes possible the removal of dependencies which arise as a result of the coarse synchronization style encouraged by the TM programming model. We illustrate the use of the proposed construct in a variety of use cases with real applications, showing how programmers can take advantage of their knowledge about the problem and other global information not available at run-time. We describe how to implement a hardware TM design that utilizes this software construct. Our experiments reveal that leveraging software-defined conflicts, the programmer is able to achieve significant reductions in the number of aborts--over 50% for most applications. At 16 threads, our system with software-defined conflicts outperforms LogTM-SE in nearly all benchmarks, reaching an average reduction in execution time of 18%.
J. Rubén Titos Gil, Manuel E. Acacio, José M. García 0001, Tim Harris 0001, Adrián Cristal, Osman S. Unsal, Ibrahim Hur, Mateo Valero
ACM Trans. Archit. Code Optim.4
2011 STM2: A Parallel STM for High Performance Simultaneous Multithreading Systems
abstract
Extracting high performance from modern chip multithreading (CMT) processors is a complex task, especially for large CMT systems. Programmers must efficiently parallelize performance-critical software while avoiding deadlocks and race conditions. Transactional memory (TM) is a promising programming model that allows programmers to focus on parallelism rather than maintaining correctness and avoiding deadlock. Software-only implementations (STMs) are especially compelling because they run on commodity hardware, therefore providing high portability. Unfortunately, STM systems usually suffer from high overheads, which may limit their usage especially at scale. In this paper we present STM2, a novel parallel STM designed for high performance, aggressive multithreading systems. STM2significantly lowers runtime overhead by offloading read-set validation, bookkeeping and conflict detection to auxiliary threads running on sibling hardware threads. Auxiliary threads perform STM operations in parallel with their paired application threads and absorb STM overhead, significantly improving performance. We exploit the fact that, on modern multi-core processors, sets of cores can share L1 or L2 caches. This lets us achieve closer coupling between the application thread and the auxiliary thread (when compared with a traditional multi-processor systems). Our results, performed on an IBM POWER7 machine, a state-of-the-art, aggressive multi-threaded system, show that our approach outperforms several well-known STM implementations. In particular, STM2shows speedups between 1.8x and 5.2x over the tested STM systems, on average, with peaks up to 12.8x.
Gokcen Kestor, Roberto Gioiosa, Tim Harris 0001, Osman S. Unsal, Adrián Cristal, Ibrahim Hur, Mateo Valero
PACT3
2011 AC: composable asynchronous IO for native languages
abstract
This paper introduces AC, a set of language constructs for composable asynchronous IO in native languages such as C/C++. Unlike traditional synchronous IO interfaces, AC lets a thread issue multiple IO requests so that they can be serviced concurrently, and so that long-latency operations can be overlapped with computation. Unlike traditional asynchronous IO interfaces, AC retains a sequential style of programming without requiring code to use multiple threads, and without requiring code to be "stack-ripped" into chains of callbacks. AC provides an "async" statement to identify opportunities for IO operations to be issued concurrently, a "do..finish" block that waits until any enclosed "async" work is complete, and a "cancel" statement that requests cancellation of unfinished IO within an enclosing "do..finish". We give an operational semantics for a core language. We describe and evaluate implementations that are integrated with message passing on the Barrelfish research OS, and integrated with asynchronous file and network IO on Microsoft Windows. We show that AC offers comparable performance to existing C/C++ interfaces for asynchronous IO, while providing a simpler programming model.
Tim Harris 0001, Martín Abadi, Rebecca Isaacs, Ross McIlroy
OOPSLA1
2011 Weak atomicity under the x86 memory consistency model
abstract
We consider the problem of building a weakly atomic Software Transactional Memory (STM), that provides Single (Global) Lock Atomicity (SLA) while adhering to the x86 memory consistency model (x86-MM).
Amitabha Roy 0002, Steven Hand 0001, Tim Harris 0001
PPoPP3
2011 Hybrid binary rewriting for memory access instrumentation
abstract
Memory access instrumentation is fundamental to many applications such as software transactional memory systems, profiling tools and race detectors. We examine the problem of efficiently instrumenting memory accesses in x86 machine code to support software transactional memory and profiling. We aim to automatically instrument all shared memory accesses in critical sections of x86 binaries, while achieving overhead close to that obtained when performing manual instrumentation at the source code level.
Amitabha Roy 0002, Steven Hand 0001, Tim Harris 0001
VEE3
2011 Semantics of transactional memory and automatic mutual exclusion
abstract
Software Transactional Memory (STM) is an attractive basis for the development of language features for concurrent programming. However, the semantics of these features can be delicate and problematic. In this article we explore the trade-offs semantic simplicity, the viability of efficient implementation strategies, and the flexibility of language constructs. Specifically, we develop semantics and type systems for the constructs of the Automatic Mutual Exclusion (AME) programming model; our results apply also to other constructs, such as atomic blocks. With this semantics as a point of reference, we study several implementation strategies. We model STM systems that use in-place update, optimistic concurrency, lazy conflict detection, and rollback. These strategies are correct only under nontrivial assumptions that we identify and analyze. One important source of errors is that some efficient implementations create dangerous “zombie” computations where a transaction keeps running after experiencing a conflict; the assumptions confine the effects of these computations.
Martín Abadi, Andrew Birrell, Tim Harris 0001, Michael Isard
ACM Trans. Program. Lang. Syst.3
2010 Discovering and understanding performance bottlenecks in transactional applications
abstract
Many researchers have developed applications using transactionalmemory (TM) with the purpose of benchmarking different implementations, and studying whether or not TM is easy to use. However, comparatively little has been done to provide general-purpose tools for profiling and tuning programs which use transactions.
Ferad Zyulkyarov, Srdjan Stipic, Tim Harris 0001, Osman S. Unsal, Adrián Cristal, Ibrahim Hur, Mateo Valero
PACT3
2010 Dynamic filtering: multi-purpose architecture support for language runtime systems
Tim Harris 0001, Sasa Tomic, Adrián Cristal, Osman S. Unsal
ASPLOS1
2010 Architectural Support for Fair Reader-Writer Locking
abstract
Many shared-memory parallel systems use lock-based synchronization mechanisms to provide mutual exclusion or reader-writer access to memory locations. Software locks are inefficient either in memory usage, lock transfer time, or both. Proposed hardware locking mechanisms are either too specific (for example, requiring static assignment of threads to cores and vice-versa), support a limited number of concurrent locks, require tag values to be associated with every memory location, rely on the low latencies of single-chip multicore designs or are slow in adversarial cases such as suspended threads in a lock queue. Additionally, few proposals cover reader-writer locks and their associated fairness issues. In this paper we introduce the Lock Control Unit (LCU) which is an acceleration mechanism collocated with each core to explicitly handle fast reader-writer locking. By associating a unique thread-id to each lock request we decouple the hardware lock from the requestor core. This provides correct and efficient execution in the presence of thread migration. By making the LCU logic autonomous from the core, it seamlessly handles thread preemption. Our design offers richer semantics than previous proposals, such as try lock support while providing direct core-to-core transfers. We evaluate our proposal with micro benchmarks, a fine-grain Software Transactional Memory system and programs from the Parsec and Splash parallel benchmark suites. The lock transfer time decreases in up to 30% when compared to previous hardware proposals. Transactional Memory systems limited by reader-locking congestion boost up to 3x while still preserving graceful fairness and starvation freedom properties. Finally, commonly used applications achieve speedups up to a 7% when compared to software models.
Enrique Vallejo 0001, Ramón Beivide, Adrián Cristal, Tim Harris 0001, Fernando Vallejo, Osman S. Unsal, Mateo Valero
MICRO4
2010 Debugging programs that use atomic blocks and transactional memory
abstract
With the emergence of research prototypes, programming using atomic blocks and transactional memory (TM) is becoming more attractive. This paper describes our experience building and using a debugger for programs written with these abstractions. We introduce three approaches: (i) debugging at the level of atomic blocks, where the programmer is shielded from implementation details (such as exactly what kind of TM is used, or indeed whether lock inference is used instead), (ii) debugging at the level of transactions, where conflict rates, read sets, write sets, and other TM internals are visible, and (iii) debug-time transactions, which let the programmer manipulate synchronization from within the debugger - e.g., enlarging the scope of an atomic block to try to identify a bug.
Ferad Zyulkyarov, Tim Harris 0001, Osman S. Unsal, Adrián Cristal, Mateo Valero
PPoPP2
2010 A model of dynamic separation for transactional memory
Martín Abadi, Tim Harris 0001, Katherine F. Moore
Inf. Comput.2
2009 Implementation and Use of Transactional Memory with Dynamic Separation
Martín Abadi, Andrew Birrell, Tim Harris 0001, Johnson Hsieh, Michael Isard
CC3
2009 Perspectives on Transactional Memory
Martín Abadi, Tim Harris 0001
CONCUR2
2009 A runtime system for software lock elision
abstract
The advent of multi-core processors means that exploiting parallelism is key to increasing the performance of programs. Many researchers have studied the use of atomic blocks as a way to simplify the construction of scalable parallel programs. However, there is a large body of existing lock-based code, and typically it is incorrect to simply replace lock-based critical sections with atomic blocks. Some problems include the need to do IO within critical sections; the use of primitives such as condition variables; and the sometime reliance on underlying lock properties such as fairness or priority inheritance.
Amitabha Roy 0002, Steven Hand 0001, Tim Harris 0001
EuroSys3
2009 QuakeTM: parallelizing a complex sequential application using transactional memory
abstract
"Is transactional memory useful?" is the question that cannot be answered until we provide substantial applications that can evaluate its capabilities. While existing TM applications can partially answer the above question, and are useful in the sense that they provide a first-order TM experimentation framework, they serve only as a proof of concept and fail to make a conclusive case for wide adoption by the general computing community.
Vladimir Gajinov, Ferad Zyulkyarov, Osman S. Unsal, Adrián Cristal, Eduard Ayguadé, Tim Harris 0001, Mateo Valero
ICS6
2009 Taking the heat off transactions: Dynamic selection of pessimistic concurrency control
abstract
In this paper we investigate feedback-directed dynamic selection between different implementations of atomic blocks. We initially execute atomic blocks using STM with optimistic concurrency control. At runtime, we identify ldquohotrdquo variables that cause large numbers of transactions to abort. For these variables we selectively switch to using pessimistic concurrency control, in the hope of deferring transactions until they will be able to run to completion. This trades off a reduction in single-threaded speed (since pessimistic concurrency control is not as streamlined as our optimistic implementation), against a reduced amount of wasted work in aborted transactions. We describe our implementation in the Haskell programming language, and examine its performance with a range of micro-benchmarks and larger programs. We show that our technique is effective at reducing the amount of wasted work, but that for current workloads there is often not enough wasted work for an overall improvement to be possible. As we demonstrate, our technique is not appropriate for some workloads: the extra work introduced by lock-induced deadlock is greater than the wasted work saved from aborted transactions. For other workloads, we show that using mutual exclusion locks for ldquohotrdquo variables could be preferable to multi-reader locks because mutual exclusion avoids deadlocks caused by concurrent attempts to upgrade to write access.
Nehir Sönmez, Tim Harris 0001, Adrián Cristal, Osman S. Unsal, Mateo Valero
IPDPS2
2009 EazyHTM: eager-lazy hardware transactional memory
abstract
Transactional Memory aims to provide a programming model that makes parallel programming easier. Hardware implementations of transactional memory (HTM) suffer from fewer overheads than implementations in software, and refinements in conflict management strategies for HTM allow for even larger improvements. In particular, lazy conflict management has been shown to deliver better performance, but it has hitherto required complex protocols and implementations.
Sasa Tomic, Cristian Perfumo, Chinmay Kulkarni 0001, Adrià Armejach, Adrián Cristal, Osman S. Unsal, Tim Harris 0001, Mateo Valero
MICRO7
2009 Language constructs for transactional memory
abstract
Building concurrent shared-memory data structures is a notoriously difficult problem, and so the widespread move to multi-core and multi-processor hardware has led to increasing interest in language constructs that may make concurrent programming easier. One technique that has been studied widely is the use of atomic blocks built over transactional memory (TM): the programmer marks a section of code as atomic, and the language implementation speculatively executes it using transactions. Transactions can run in parallel so long as they access different data.
Tim Harris 0001
POPL1
2009 Transactional memory with strong atomicity using off-the-shelf memory protection hardware
abstract
This paper introduces a new way to provide strong atomicity in an implementation of transactional memory. Strong atomicity lets us offer clear semantics to programs, even if they access the same locations inside and outside transactions. It also avoids differences between hardware-implemented transactions and software-implemented ones. Our approach is to use off-the-shelf page-level memory protection hardware to detect conflicts between normal memory accesses and transactional ones. This page-level mechanism ensures correctness but gives poor performance because of the costs of manipulating memory protection settings and receiving notifications of access violations. However, in practice, we show how a combination of careful object placement and dynamic code update allows us to eliminate almost all of the protection changes. Existing implementations of strong atomicity in software rely on detecting conflicts by conservatively treating some non-transactional accesses as short transactions. In contrast, our page-level mechanism lets us be less conservative about how non-transactional accesses are treated; we avoid changes to non-transactional code until a possible conflict is detected dynamically, and we can respond to phase changes where a given instruction sometimes generates conflicts and sometimes does not. We evaluate our implementation with C# versions of many of the STAMP benchmarks, and show how it performs within 25% of an implementation with weak atomicity on all the benchmarks we have studied. It avoids pathological cases in which other implementations of strong atomicity perform poorly.
Martín Abadi, Tim Harris 0001, Mojtaba Mehrara
PPoPP2
2009 Atomic quake: using transactional memory in an interactive multiplayer game server
abstract
Transactional Memory (TM) is being studied widely as a new technique for synchronizing concurrent accesses to shared memory data structures for use in multi-core systems. Much of the initial work on TM has been evaluated using microbenchmarks and application kernels; it is not clear whether conclusions drawn from these workloads will apply to larger systems. In this work we make the first attempt to develop a large, complex, application that uses TM for all of its synchronization. We describe how we have taken an existing parallel implementation of the Quake game server and restructured it to use transactions. In doing so we have encountered examples where transactions simplify the structure of the program. We have also encountered cases where using transactions occludes the structure of the existing code. Compared with existing TM benchmarks, our workload exhibits non-block-structured transactions within which there are I/O operations and system call invocations. There are long and short running transactions (200– 1.3M cycles) with small and large read and write sets (a few bytes to 1.5MB). There are nested transactions reaching up to 9 levels at runtime. There are examples where error handling and recovery occurs inside transactions. There are also examples where data changes between being accessed transactionally and accessed nontransactionally. However, we did not see examples where the kind of access to one piece of data depended on the value of another.
Ferad Zyulkyarov, Vladimir Gajinov, Osman S. Unsal, Adrián Cristal, Eduard Ayguadé, Tim Harris 0001, Mateo Valero
PPoPP6
2009 The multikernel: a new OS architecture for scalable multicore systems
abstract
Commodity computer systems contain more and more processor cores and exhibit increasingly diverse architectural tradeoffs, including memory hierarchies, interconnects, instruction sets and variants, and IO configurations. Previous high-performance computing systems have scaled in specific cases, but the dynamic nature of modern client and server workloads, coupled with the impossibility of statically optimizing an OS for all workloads and hardware variants pose serious challenges for operating system structures.
Andrew Baumann, Paul Barham 0001, Pierre-Évariste Dagand, Tim Harris 0001, Rebecca Isaacs, Simon Peter 0001, Timothy Roscoe, Adrian Schüpbach, Akhilesh Singhania
SOSP4
2009 A lightweight in-place implementation for software thread-level speculation
abstract
Thread-level speculation (TLS) is a technique that allows parts of a sequential program to be executed in parallel. TLS ensures the parallel program’s behaviour remains true to the language’s original sequential semantics; for example, allowing multiple iterations of a loop to run in parallel if there are no conflicts between them. Conventional software-TLS algorithms detect conflicts dynamically. They suffer from a number of problems. TLS implementations can impose large storage overheads caused by buffering speculative work. TLS implementations can offer disappointing scalability, if threads can only commit speculative work back to the “real ” heap sequentially. TLS implementations can be slow because speculative reads must consult look-aside tables to see earlier speculative writes, or because speculative operations replace normal reads and writes with expensive synchronisation primitives (e.g. CAS or memory fences). We present a streamlined software-TLS algorithm for mostlyparallel loops that aims to avoid these problems. We allow speculative work to be performed in place, so we avoid buffering, and so that reads naturally see earlier writes. We avoid needing a serialcommit protocol. We avoid the need for CAS or memory fences in common operations. We strive to reduce the size of TLS-related conflict-detection state, and to interact well with typical data-cache implementations. We evaluate our implementation on off-the-shelf hardware using seven applications from SciMark2, BYTEmark and JOlden. We achieve an average 77 % of the speed-up of manuallyparallelized versions of the benchmarks for fully parallel loops. We achieve a maximum of a 5.8x speed-up on an 8-core machine.
Cosmin E. Oancea, Alan Mycroft, Tim Harris 0001
SPAA3
2008 A Model of Dynamic Separation for Transactional Memory
Martín Abadi, Tim Harris 0001, Katherine F. Moore
CONCUR2
2008 Parallel generational-copying garbage collection with a block-structured heap
abstract
We present a parallel generational-copying garbage collector implemented for the Glasgow Haskell Compiler. We use a block-structured memory allocator, which provides a natural granularity for dividing the work of GC between many threads, leading to a simple yet effective method for parallelising copying GC. The results are encouraging: we demonstrate wall-clock speedups of on average a factor of 2 in GC time on a commodity 4-core machine with no programmer intervention, compared to our best sequential GC.
Simon Marlow, Tim Harris 0001, Roshan P. James, Simon L. Peyton Jones
ISMM2
2008 Semantics of transactional memory and automatic mutual exclusion
abstract
Software Transactional Memory (STM) is an attractive basis for the development of language features for concurrent programming. However, the semantics of these features can be delicate and problematic. In this paper we explore the tradeoffs between semantic simplicity, the viability of efficient implementation strategies, and the flexibilityof language constructs. Specifically, we develop semantics and type systems for the constructs of the Automatic Mutual Exclusion (AME) programming model; our results apply also to other constructs, such as atomic blocks. With this semantics as a point of reference, we study several implementation strategies. We model STM systems that use in-place update, optimistic concurrency, lazy conflict detection, and roll-back. These strategies are correct only under non-trivial assumptions that we identify and analyze. One important source of errors is that some efficient implementations create dangerous 'zombie' computations where a transaction keeps running after experiencing a conflict; the assumptions confine the effects of these computations.
Martín Abadi, Andrew Birrell, Tim Harris 0001, Michael Isard
POPL3
2007 Feedback directed implicit parallelism
abstract
In this paper we present an automated way of using spare CPU resources within a shared memory multi-processor or multi-core machine. Our approach is (i) to profile the execution of a program, (ii) from this to identify pieces of work which are promising sources of parallelism, (iii) recompile the program with this work being performed speculatively via a work-stealing system and then (iv) to detect at run-time any attempt to perform operations that would reveal the presence of speculation.
Tim Harris 0001, Satnam Singh
ICFP1
2007 Featherweight transactions: decoupling threads and atomic blocks
abstract
No abstract available.
Virendra J. Marathe, Tim Harris 0001, James R. Larus
PPoPP2
2007 Concurrent programming without locks
abstract
Mutual exclusion locks remain the de facto mechanism for concurrency control on shared-memory data structures. However, their apparent simplicity is deceptive: It is hard to design scalable locking strategies because locks can harbor problems such as priority inversion, deadlock, and convoying. Furthermore, scalable lock-based systems are not readily composable when building compound operations. In looking for solutions to these problems, interest has developed in nonblocking systems which have promised scalability and robustness by eschewing mutual exclusion while still ensuring safety. However, existing techniques for building nonblocking systems are rarely suitable for practical use, imposing substantial storage overheads, serializing nonconflicting operations, or requiring instructions not readily available on today's CPUs. In this article we present three APIs which make it easier to develop nonblocking implementations of arbitrary data structures. The first API is a multiword compare-and-swap operation (MCAS) which atomically updates a set of memory locations. This can be used to advance a data structure from one consistent state to another. The second API is a word-based software transactional memory (WSTM) which can allow sequential code to be reused more directly than with MCAS and which provides better scalability when locations are being read rather than being updated. The third API is an object-based software transactional memory (OSTM). OSTM allows a simpler implementation than WSTM, but at the cost of reengineering the code to use OSTM objects. We present practical implementations of all three of these APIs, built from operations available across all of today's major CPU families. We illustrate the use of these APIs by using them to build highly concurrent skip lists and red-black trees. We compare the performance of the resulting implementations against one another and against high-performance lock-based systems. These results demonstrate that it is possible to build useful nonblocking data structures with performance comparable to, or better than, sophisticated lock-based designs.
Keir Fraser, Tim Harris 0001
ACM Trans. Comput. Syst.2
2006 Securing Software by Enforcing Data-flow Integrity
Miguel Castro 0001, Manuel Costa, Tim Harris 0001
OSDI3
2006 Optimizing memory transactions
abstract
Atomic blocks allow programmers to delimit sections of code as 'atomic', leaving the language's implementation to enforce atomicity. Existing work has shown how to implement atomic blocks over word-based transactional memory that provides scalable multi-processor performance without requiring changes to the basic structure of objects in the heap. However, these implementations perform poorly because they interpose on all accesses to shared memory in the atomic block, redirecting updates to a thread-private log which must be searched by reads in the block and later reconciled with the heap when leaving the block.This paper takes a four-pronged approach to improving performance: (1) we introduce a new 'direct access' implementation that avoids searching thread-private logs, (2) we develop compiler optimizations to reduce the amount of logging (e.g. when a thread accesses the same data repeatedly in an atomic block), (3) we use runtime filtering to detect duplicate log entries that are missed statically, and (4) we present a series of GC-time techniques to compact the logs generated by long-running atomic blocks.Our implementation supports short-running scalable concurrent benchmarks with less than 50\% overhead over a non-thread-safe baseline. We support long atomic blocks containing millions of shared memory accesses with a 2.5-4.5x slowdown.
Tim Harris 0001, Mark Plesko, Avraham Shinnar, David Tarditi
PLDI1
2006 Special issue on synchronization and concurrency in object-oriented languages
Tim Harris 0001, Doug Lea
Sci. Comput. Program.1
2005 Location based placement of whole distributed systems
abstract
The high bandwidth and low latency of the modern internet has made possible the deployment of distributed computing platforms. The XenoServe platform provides a distributed computing platform open to all and presents three major new challenges for resource discovery: Firstly, network location is key for effectively provisioning services, to mitigate against high-latency, high-load or component failure. Secondly, many services require a presence on several servers, with inter-related requirements. Finally, as the platform is open with respect to users and servers, large numbers of queries and updates are expected.To address these requirements we introduce and evaluate XenoSearch, a new distributed service for selecting the machines to host components of multi-node distributed systems and which is uniquely able to express and efficiently answer complex queries with inter-related location constraints. We demonstrate that XenoSearch represents a trade-off between accuracy and query time which avoids exhaustive search and supports multiple resources. In addition the performance of the algorithm and the quality of its server selections is investigated and the performance of the distributed service shown to be invariant as the number of nodes or items indexed increases.
David Spence, Jon Crowcroft, Steven Hand 0001, Tim Harris 0001
CoNEXT4
2005 Haskell on a shared-memory multiprocessor
abstract
Multi-core processors are coming, and we need ways to program them. The combination of purely-functional programming and explicit, monadic threads, communicating using transactional memory, looks like a particularly promising way to do so. This paper describes a full-scale implementation of shared-memory parallel Haskell, based on the Glasgow Haskell Compiler. Our main technical contribution is a lock-free mechanism for evaluating shared thunks that eliminates the major performance bottleneck in parallel evaluation of a lazy language. Our results are preliminary but promising: we can demonstrate wall-clock speedups of a serious application (GHC itself), even with only two processors, compared to the same application compiled for a uni-processor.
Tim Harris 0001, Simon Marlow, Simon L. Peyton Jones
Haskell1
2005 Revocable locks for non-blocking programming
abstract
In this paper we present a new form of revocable lock that streamlines the construction of higher level concurrency abstractions such as atomic multi-word heap updates. The key idea is to expose revocation by displacing the previous lock holder's execution to a safe address. This provides mutual exclusion without needing to block threads. This brings many simplifications, often removing the need for dynamic memory management and letting us strip operations from common-case execution paths. As well as streamlining algorithms' design, our results show that the technique leads to improved performance and scalability across a range of levels of contention.
Tim Harris 0001, Keir Fraser
PPoPP1
2005 Composable memory transactions
abstract
Writing concurrent programs is notoriously difficult, and is of increasing practical importance. A particular source of concern is that even correctly-implemented concurrency abstractions cannot be composed together to form larger abstractions. In this paper we present a new concurrency model, based on transactional memory, that offers far richer composition. All the usual benefits of transactional memory are present (e.g. freedom from deadlock), but in addition we describe new modular forms of blocking and choice that have been inaccessible in earlier work.
Tim Harris 0001, Simon Marlow, Simon L. Peyton Jones, Maurice Herlihy
PPoPP1
2005 Non-blocking Hashtables with Open Addressing
Chris Purcell, Tim Harris 0001
DISC2
2005 Exceptions and side-effects in atomic blocks
Tim Harris 0001
Sci. Comput. Program.1
2004 Brief announcement: implementing multi-word atomic snapshots on current hardware
abstract
No abstract available.
Chris Purcell, Tim Harris 0001
PODC2
2003 XenoSearch: Distributed Resource Discovery in the XenoServer Open Platform
abstract
We describe the XenoSearch system for performing expressive resource discovery searches in a distributed environment. We represent server meta-data, such as their locations and facilities, as points in a multi-dimensional space and then express queries as predicates over these points. Each XenoSearch node holds a portion of this space and the key goal of XenoSearch is to direct queries to those nodes containing the meta-data of matching XenoServers. Communication between these XenoSearch nodes is based on the self-organizing Pastry peer-to-peer routing substrate. Our initial performance evaluation on a wide-area prototype shows that queries are only a factor of 3 to 5 times longer than basic Pastry routing, while supporting multi-dimensional searches of arbitrary shapes.
David Spence, Tim Harris 0001
HPDC2
2003 Language support for lightweight transactions
abstract
Concurrent programming is notoriously difficult. Current abstractions are intricate and make it hard to design computer systems that are reliable and scalable. We argue that these problems can be addressed by moving to a declarative style of concurrency control in which programmers directly indicate the safety properties that they require. In our scheme the programmer demarks sections of code which execute within lightweight software-based transactions that commit atomically and exactly once. These transactions can update shared data, instantiate objects, invoke library features and so on. They can also block, waiting for arbitrary boolean conditions to become true. Transactions which do not access the same shared memory locations can commit concurrently. Furthermore, in general, no performance penalty is incurred for memory accesses outside transactions.We present a detailed design of this proposal along with an implementation and evaluation. We argue that the resulting system (i) is easier for mainstream programmers to use, (ii) prevents lock-based priority-inversion and deadlock problems and (iii) can offer performance advantages.
Tim Harris 0001, Keir Fraser
OOPSLA1
2003 Xen and the art of virtualization
abstract
Numerous systems have been designed which use virtualization to subdivide the ample resources of a modern computer. Some require specialized hardware, or cannot support commodity operating systems. Some target 100% binary compatibility at the expense of performance. Others sacrifice security or functionality for speed. Few offer resource isolation or performance guarantees; most provide only best-effort provisioning, risking denial of service.This paper presents Xen, an x86 virtual machine monitor which allows multiple commodity operating systems to share conventional hardware in a safe and resource managed fashion, but without sacrificing either performance or functionality. This is achieved by providing an idealized virtual machine abstraction to which operating systems such as Linux, BSD and Windows XP, can be ported with minimal effort.Our design is targeted at hosting up to 100 virtual machine instances simultaneously on a modern server. The virtualization approach taken by Xen is extremely efficient: we allow operating systems such as Linux and Windows XP to be hosted simultaneously for a negligible performance overhead --- at most a few percent compared with the unvirtualized case. We considerably outperform competing commercial and freely available solutions in a range of microbenchmarks and system-wide tests.
Paul Barham 0001, Boris Dragovic, Keir Fraser, Steven Hand 0001, Tim Harris 0001, Alex Ho, Rolf Neugebauer, Ian Pratt 0001, Andy Warfield
SOSP5
2002 A Practical Multi-word Compare-and-Swap Operation
Tim Harris 0001, Keir Fraser, Ian Pratt 0001
DISC1
2001 A Pragmatic Implementation of Non-blocking Linked-Lists
Tim Harris 0001
DISC1
2000 Dynamic Adaptive Pre-Tenuring
abstract
In a generational garbage collector, a pre-tenured object is one that is allocated directly in the old generation. Pre-tenuring long-lived objects reduces the number of times that they are scanned or copied during garbage collection. Previous work has investigated pre-tenuring based on off-line analysis of execution traces. This paper builds on that work by presenting a dynamic technique in which the decision to pre-tenure a particular kind of object is taken at run-time. This allows decisions to depend on the inputs of a particular application run and also allows decisions to be changed as the application enters different phases. An implementation is presented for the Research VM Java Virtual Machine.
Tim Harris 0001
ISMM1