The so-called ’read’ and ’write’ barriers present an obstacle to the efficient execution of persistent programs that use a volatile object buffer, non-volatile object store memory model. The barriers, implemented as checks added to the code, are required to ensure that objects are moved from store to buffer before being used and, if updated in the buffer, that they are written back on periodic checkpoints.
Static read and write barrier optimisations are identified that require run-time guarantees on certain objects’ remaining resident in the buffer. These objects are said to be ’pinned’. Object pinning conflicts with the buffer manager’s freedom to evict objects from the buffer when it is full . A contract between the buffer manager and the code optimiser guarantees a minimum level of pinning for each thread. Beyond this guarantee, heuristics added to the buffer manager allow adjustment of the level of pinning for each thread according to the prevailing collection and individual states of threads, to minimise pinning vs object management conflicts. Optimisation of the write barrier additionally requires the buffer manager to uphold certain guarantees across checkpoint operations.
This paper presents the design of buffer management mechanisms to uphold the pinning and update guarantees and identifies the heuristics used to adjust the level of pinning allocated to each thread. Details of the mechanisms’ implementation in the PJama system are given. Measurements show that the additional functionality does not represent a significant overhead to the operation of the system, when running the OO7 benchmark.
@inproceedings{Cutts+1998POS, author = {Cutts, Quintin I. and Lennon, Steve and Hosking, Antony L.}, title = {Reconciling Buffer Management with Persistence Optimizations}, booktitle = {International Workshop on Persistent Object Systems}, series = {POS}, year = {1998}, editor = {Morrison, Ron and Jordan, Mick and Atkinson, Malcolm}, pages = {51--63}, month = {August}, address = {Tiburon, California}, publisher = {Morgan Kaufmann}, gscholar = {9} }