Optimizing the Read and Write Barriers for Orthogonal Persistence

Antony L. Hosking, Nathaniel Nystrom, Quintin Cutts, Kumar Brahnmath

Research output: Chapter in Book/Report/Conference proceedingConference contributionpeer-review

Abstract

Persistent programming languages manage volatile memory as a cache for stable storage, imposing a read
barrier on operations that access the cache, and a write barrier on updates to the cache. The read barrier
checks the cache residency of the target object while the write barrier marks the target as dirty in the cache
to support a write-back policy that defers updates to stable storage until eviction or stabilization. These
barriers may also subsume additional functionality, such as negotiation of locks on shared objects to support
concurrency control. Compilers for persistent programming languages generate barrier code to protect all
accesses to possibly persistent objects. Orthogonal persistence imposes this cost on every object access, since
all objects are potentially persistent, at significant overhead to execution. We have designed a new suite of
compiler optimizations, focusing on partial redundancy elimination of pointer-based access expressions, that
significantly reduce this impact. These are implemented in an analysis and optimization framework for Java
bytecodes, in support of orthogonal persistence for Java. In experiments with the traversal portions of the OO7
benchmark suite our optimizations reduce the number of read and write barriers executed by an average of
83% and 25%, respectively.
Original languageEnglish
Title of host publicationAdvances in Persistent Object Systems
Subtitle of host publicationPOS-8 and PJAVA-3
EditorsRon Morrison, Mick Jordan, Malcolm Atkinson
PublisherMorgan Kauffman Publishers
Pages149-159
ISBN (Print)1-55860-585-1
Publication statusPublished - 1998
Externally publishedYes

Fingerprint

Dive into the research topics of 'Optimizing the Read and Write Barriers for Orthogonal Persistence'. Together they form a unique fingerprint.

Cite this