This section compared the three versions of Rhino with a transactional memory service implemented entirely in user-space. The micro-benchmark numbers show that the extension structure of Rhino improves the latency of all the events critical to performance, especially the page fault handling. The two application benchmarks, RVM and OO7, compare trade-offs among the three Rhino buffer management alternatives. Page diffing version runs efficiently in small transactions. It can run larger transactions, but its performance suffers from memory under-utilization due to shadow pages. Page-grain logging does worse for small transactions due to large log size, but it scales well up to large transactions. The setrange version is fastest in small transactions, but it does not scale for large transactions. The RVM and OO7 results also show that SPIN-based Rhino outperforms user-space transactional memory implementations.