lightweight support for embedded transactions. Generally,
a transaction has four operations: BEGIN, COMMIT/
ABORT, CHECKPOINT and ERASE, as shown in
Figure 1. The BEGIN and COMMIT/ABORT operations
are used by programs to start and complete a transaction.
When a transaction is committed or aborted, its state
has been determined and can be recovered after system
crash, but this requires extra transaction metadata to be
kept, e.g., the log data. The CHECKPOINT operation
writes data to its home location and make the state
persistent, so as to make the transactions recoverable
without keeping transaction metadata. For instance, the
CHECKPOINT operation in WAL is the in-place update
of the new-version data in a transaction. The ERASE
operation is an operation that overwrites or erases the
transaction data when the data is obsolete. Therefore,
a transaction is born when it is started and dies after
the checkpoint operation. The death of a transaction
is different from the completion (commit/abort) of the
transaction. A transaction is alive when the transaction
metadata needs to be kept before the checkpoint. As
shown in Figure 1, we call the transactions that have
not committed or aborted active transactions, and those
that have not yet been checkpointed live transactions. In
a system that uses write-ahead logging, a transaction
completes on commit or abort, and dies after the data
is checkpointed in-place from the logs. In this paper, we
will exploit the death of transactions to reduce transaction
state tracking cost in the FTL.