A Highly Efficient key-value system for RDMA. The original paper describing HERD appeared in SIGCOMM'14.
Important: This code is not maintained anymore. Please use the new and improved (up to 83% faster) version of HERD from our USENIX ATC 16 paper. The code is available here.
This version of HERD has been tested for the following configuration:
- Software
- OS: Ubuntu 12.04 (kernel 3.2.0)
- RDMA drivers:
mlx4from MLNX OFED 2.2. I suggest using the MLNX OFED version for Ubuntu 12.04.
- Hardware
- RNICs:
- ConnectX-3 353A (InfiniBand)
- ConnectX-3 313A (RoCE)
- ConnectX-3 354A (InfiniBand)
-
I assume that the machines are named:
node-i.RDMA.fawn.apt.emulab.netstarting fromi = 1.-
The experiment requires at least
(1 + (NUM_CLIENTS / num_processes))machines.node-1is the server machine.NUM_CLIENTSis the total number of client processes, defined incommon.h.num_processesis the number of client processes per machine, defined inrun-machine.sh. -
To modify HERD for your machine names:
- Make appropriate changes in
kill-remote.shandrun-servers.sh. - Change the server's machine name in the
serversfile. Clients use this file to connect to server processes.
- Make appropriate changes in
-
Make sure that ports 5500 to 5515 are available on the server machine. Server process
ilistens for clients on port5500 + i.
-
-
Execute the following commands at the server machine:
cd ~
git clone https://github.com/anujkaliaiitd/HERD.git
export PATH=~/HERD/scripts:$PATH
cd HERD
sudo ./shm-init.sh # Increase shmmax and shmall
sudo hugepages-create.sh 0 4096 # Create hugepages on socket 0. Do for all sockets.- Mount the HERD folder on all client machines via NFS.
-
Run
makeon the server machine to build the executables. -
To run the clients automatically along with the server:
# At node-1 (server)
./run-servers.sh- If you do not want to run clients automatically from the server, delete the
2nd loop from
run-servers.sh. Then:
# At node-1 (server)
./run-servers.sh
# At node-2 (client 0)
./run-machine.sh 0
# At node-i (client i - 2)
./run-machine.sh (i - 2)- To kill the server processes, run
local-kill.shat the server machine. To kill the client processes remotely, runkill-remote.shat the server machine.
Copyright 2014 Carnegie Mellon University
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.