{"id":13508387,"url":"https://github.com/ease-lab/Hermes","last_synced_at":"2025-03-30T11:31:52.286Z","repository":{"id":83764989,"uuid":"166561788","full_name":"ease-lab/Hermes","owner":"ease-lab","description":"Hermes: a fault-tolerant replication protocol, implemented over RDMA, guaranteeing linearizability and achieving low latency and high throughput.","archived":false,"fork":false,"pushed_at":"2024-03-28T19:12:15.000Z","size":4305,"stargazers_count":165,"open_issues_count":0,"forks_count":16,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-12-06T21:20:04.449Z","etag":null,"topics":["availability","consistency","distributed-systems","performance","rdma","replication"],"latest_commit_sha":null,"homepage":"http://hermes-protocol.com/","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ease-lab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-01-19T15:29:07.000Z","updated_at":"2024-11-15T10:24:17.000Z","dependencies_parsed_at":null,"dependency_job_id":"3d4ffd85-84da-4a58-8c8a-311d2f94f0b8","html_url":"https://github.com/ease-lab/Hermes","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ease-lab%2FHermes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ease-lab%2FHermes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ease-lab%2FHermes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ease-lab%2FHermes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ease-lab","download_url":"https://codeload.github.com/ease-lab/Hermes/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246314011,"owners_count":20757450,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["availability","consistency","distributed-systems","performance","rdma","replication"],"created_at":"2024-08-01T02:00:52.380Z","updated_at":"2025-03-30T11:31:47.276Z","avatar_url":"https://github.com/ease-lab.png","language":"C","funding_links":[],"categories":["C","performance"],"sub_categories":[],"readme":"# Hermes Reliable Replication Protocol\n\n\u003cimg align=\"left\" height=\"160\" src=\"https://github.com/akatsarakis/Hermes/blob/master/hermes-logo.png\"\u003e\n\nThis is the publicly available artifact repository supporting the ASPLOS'20 paper [_\"Hermes: A Fast, Fault-Tolerant and Linearizable Replication Protocol\"_](http://hermes-protocol.com \"Hermes Arxiv version\"). The repository contains both code to experimentally evaluate Hermes(KV) and complete Hermes TLA+ specifications which can be used to verify Hermes correctness via model-checking.\n\n[![top picks](https://badgen.net/badge/honorable%20mention/top%20picks%20'20/d99e14)](https://www.sigarch.org/call-contributions/ieee-micro-top-picks/)\n[![available](https://badgen.net/badge/acm%20badge/available/117c00)](https://www.acm.org/publications/policies/artifact-review-badging#available)\n[![functional](https://badgen.net/badge/acm%20badge/functional/FB1f44)](https://www.acm.org/publications/policies/artifact-review-badging#functional)\n[![stars](https://badgen.net/github/stars/ease-lab/Hermes)]()\n\n[![license](https://badgen.net/badge/webpage/Hermes/blue)](http://hermes-protocol.com/)\n[![license](https://badgen.net/badge/license/Apache%202.0/blue)](https://github.com/ease-lab/Hermes/blob/master/LICENSE)\n[![last commit](https://badgen.net/github/last-commit/ease-lab/Hermes)]()\n\u003ca href=\"https://twitter.com/intent/follow?screen_name=ease_lab\" target=\"_blank\"\u003e\n\u003cimg src=\"https://img.shields.io/twitter/follow/ease_lab?style=social\u0026logo=twitter\" alt=\"follow on Twitter\"\u003e\u003c/a\u003e\n\n\n## Citation\n```\n@inbook{Katsarakis:20,\nauthor = {Katsarakis, Antonios and Gavrielatos, Vasilis and Katebzadeh, M.R. Siavash and Joshi, Arpit and Dragojevic, Aleksandar and Grot, Boris and Nagarajan, Vijay},\ntitle = {Hermes: A Fast, Fault-Tolerant and Linearizable Replication Protocol},\nyear = {2020},\npublisher = {Association for Computing Machinery},\naddress = {New York, NY, USA},\nbooktitle = {Proceedings of the Twenty-Fifth International Conference on Architectural Support for Programming Languages and Operating Systems},\npages = {201–217},\nnumpages = {17}\n}\n```\n\n----\n## High Perfomance Features\n- _Reads_: i) Local ii) Load-balanced (served by any replica)\n- _Updates (Writes and RMWs)_: i) Inter-key concurrent ii) Decentralized iii) Fast (1rtt commit -- any replica)\n- _Writes_: iv) Non-conflicting (i.e., never abort)\n\n## Consistency and Properties\nLinearizable reads, writes and RMWs with the following properties:\n1. _Writes_: from a live replica _always commit_ after Invalidating (and getting acknowledgments from) the rest live replicas. \n1. _RMWs_: at most one of possible concurrent RMWs to a key can commit, and this only once all acknowledgments from live replicas are gathered.\n1. _Reads_: return the local value if the targeted keys are found in the Valid state and the coordinator was considered live at the time of reading. The later can be ensured locally if the coordinator has a lease for (and is part of) the membership.\n\n## Fault Tolerance\nCoupling Invalidations with per-key logical timestamps (i.e., Lamport clocks) and propagating the value to be updated with the invalidation message (_early value propagation_), Hermes allows any replica blocked by an update (write or RMW) to safely replay the update and unblock it self and the rest of followers.\n\n----\n\n## Hardware dependencies\n\nA homogeneous cluster of x86_64 nodes interconnected via RDMA network cards and switched \n(tested on \"Mellanox ConnectX-4\" Infiniband infrastructure).\n\n\n## Software requirements\n\nLinux OS (tested on Ubuntu 18.04 4.15.0-55-generic) with root access.\n\nThe software is tested using the following version of Mellanox OFED RDMA drivers\n`MLNX_OFED_LINUX-4.4-2.0.7.0`.\n\nThird-party libraries that you will require to run the experiments include:\n1. _parallel_ (Cluster management scripts only)\n1. _libmemcached-dev_ (used to exchange QP informations for the setup of RDMA connections)\n1. _libnuma-dev_\t(for mbind)\n\n\n## Setup\n\nOn every node:\n1. Install Mellanox OFED ibverbs drivers\n1. `./hermes/bin/setup.sh`\n\nOn manager (just pick on node in the cluster):\n1. Fill variables in `/hermes/exec/hosts.sh`\n1. Configure setup and default parameters in `/hermes/include/hermes/config.h`\n1. From `/hermes/exec/` compile _hermesKV_ through make\n1. scp  _hermesKV_ and the configured hosts.sh in the `/hermes/exec/` directory of all other nodes in the cluster. \n\n\n## Compilation\n\n`cd hermes/exec; make`\n\n_Warning_: Do not compile through cmake; instead use the Makefile in exec/ directory.\n\n\n## Run\n\nRun first on manager:\n`./run-hermesKV.sh \u003cexperiment_parameters\u003e`\n\nThen run on all other member nodes \n`./run-hermesKV.sh \u003cexperiment_parameters\u003e`\n\n\u003e Note that some members will eagerly terminate if experiment \n  uses smaller number of nodes than specified in hosts.sh\n  \nAn experiment example for three nodes 12 worker threads and 35% write ratio would be as follows:\n`./run-hermesKV.sh -W 12 -w 350 -M 3`\nSupported command-line arguments for the experiments are detailed in the run-hermesKV.sh script.\n\n\n---\n## Acknowledgments\n Hermes is based on [HERD/MICA](https://github.com/efficient/HERD \"Apache 2.0\") design as an underlying KVS, the code of which we have adapted to implement HermesKV.\n\n## Other Implementations of Hermes\n\n- [Odyssey](https://github.com/vasigavr1/Odyssey) - Hermes is also implemed in the Odyssey framework by [Vasilis Gavrielatos](https://github.com/vasigavr1)\n- [Olympus](https://github.com/sadraskol/olympus) - in Rust by [Thomas Bracher](https://twitter.com/sadraskol)\n\n\n## Contact\n Antonios Katsarakis: \u003ca href=\"http://antonis.io/\" title=\"Personal webpage\" target=\"_blank\"\u003e`antonis.io`\u003c/a\u003e |  [`antoniskatsarakis@yahoo.com`](mailto:antoniskatsarakis@yahoo.com?subject=[GitHub]%20Zeus%20Specification \"Email\")\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fease-lab%2FHermes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fease-lab%2FHermes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fease-lab%2FHermes/lists"}