Hermes 1.1.0 release

Hermes 1.1.0 has been released. This release features a major restructuring of Hermes to improve I/O latency and scalability through asynchronous and partial I/O operations. Hermes now follows a task-based design, where I/O commands are converted into tasks and processed asynchronously. We leverage this asynchronicity to improve the performance of metadata and data updates for latency-sensitive producer workloads by nearly 100x over the previous release while leveraging properties of queuing to guarantee strong consistency without locking. In addition, Hermes now supports partial get and put operations. This enables small I/O requests to be merged into the same blob, dramatically reducing the amount of metadata stored in Hermes for latency-sensitive I/O workloads (e.g., deep learning) in addition to eliminating I/O amplification and lock contention for same-blob updates in the Hermes adapters. We have evaluated Hermes 1.1 underneath a variety of real programs, a summary is located here.