Transactional memory service must detect and log all writes to the
persistent region, permitting changes to the database to be undone or
redone atomically [gray]. We implemented three versions of write
detection in Rhino to study their performance trade-offs under
various workloads. They are setrange, page grain logging,
and page diffing.
Setrange requires applications to issue a
trans_setrange
system call before modifying the database. The
other two versions rely on the MMU to detect writes and differ in
detection precision. Page grain logging treats the whole
page as modified when at least one byte on the page changes.
Page diffing tries to compute the exact set of modifications by
comparing old and new page contents.