Gecko, Isotope, and Yogurt are all block storage systems. They are implemented as Linux device mapper modules and expose a logical block device interface to the user similar to logical volumne manager (LVM) and software RAID. Additional function calls to the system are implemented using ioctl.
Gecko uses a disk array based on a chained-logging design which logs to multiple disk in a round robin manner. The chained-logging systematically separates garbage collection (GC) and logging to take place in different disks so that logging operations are never interfered by (GC). Gecko employs a special caching scheme which the cache follows the tail of the log (where the log entries are appended) to block reads from interfering with the logging operation. Gecko trades off maximum throughput of multiple disk drives for a stable single drive sequential throughput, which in general leads to better performance under real workloads.
Isotope is an ACID transactional block storage system: it supports transactional isolation in addition to atomicity and durability. The transaction support from the block layer enables the transactional features to be used in any layers of the storage stack including and above the block layer (e.g. filesystem, application, etc.). Isotope facilitates transactional application designs and can have a transaction executed across different applications and data abstractions (e.g. reading a file from a filesystem and writing the file content to a key-value store using a transaction.).
Yogurt is a local block storage system that is an instance of StaleStore. StaleStore 1) maintains multiple versions of data; 2) can estimate cost for accessing different data versions; and 3) can support weak distributed consistency (e.g. monotonic reads, read-my-writes, bounded staleness, etc.). Yogurt is based on Gecko's chained-logging design and uses stale data in the log to trade off consistency and performance. It prefers to service reads from the caching layer and disks that are not logging. Distributed applications that are already aware of weak consistency and server applications that can maintain per-client guarantees can take advantage of Yogurt and any form of StaleStore.
Code for Gecko, Isotope, and Yogurt can be found in the following url:
http://github.com/jyshin/dm-tx.