Monday 16 July 2012

Livelock-Free Operation and Forward-Progress guarantees

If two transactions in the process of committing either have a write conflict or true
data dependencies, the transaction with the lower TID always succeeds in
committing. The design of the directory guarantees this behavior. A transaction
with a higher TID will not be able to write to a directory until all transactions with
lower TID have either skipped that directory or committed. Furthermore, the
transaction cannot commit until it is sure that all directories it has speculatively
loaded from have serviced all lower numbered transactions that can potentially
send an invalidation to it. This yields a livelock-free protocol that guarantees
forward progress. Limited starvation is possible: a starved transaction keeps its
TID at violation time, thus over time it will become the lowest TID in the system.
While long transactions that retain their TID after aging may decrease system
performance, the programmer is still guaranteed correct execution. Moreover,
TCC provides a profiling environment, TAPE, which allows programmers to
quickly detect the occurrence of this rare event.

Transactions are assigned TIDs at the end of the execution phase to maximize
system throughput. This may increase the probability of starving long-running
transactions, but this is mitigated by allowing those transactions to request and
retain a TIDs after they violate, thus insuring their forward-progress. TIDs are
assigned by a global TID vendor. Distributed time stamps such as in TLR will
not work for our implementation since these mechanisms do not produce a
gap-free sequence of TIDs, rather only an ordered set of globally unique timestamps.

No comments:

Post a Comment