News [Dec 2023]: Check out Machnet for fast and easy DPDK-based messaging. It supports many types of cloud VMs and bare-metal NICs, multiple application processes, language bindings, etc.
eRPC is a fast and general-purpose RPC library for datacenter networks.
Our NSDI 2019 paper
describes the system in detail. Documentation can be generated by running doxygen.
Some highlights:
n eRPC processes, eRPC uses kernel UDP ports {31850, ..., 31850 + n - 1}. These ports should be open on the management
network. See scripts/firewalld/erpc_firewall.sh for systems running
firewalld.cmake . -DPERF=OFF -DTRANSPORT=dpdk; make -j; sudo ctest.
DPERF=OFF enables debugging, which greatly reduces performance. Set
DPERF=ON for good performance.dpdk should be replaced with infiniband for InfiniBand NICs.scripts/run-tests-dpdk.sh instead of ctest.hello_world application:
cd hello_worldcommon.hhello_world
using make dpdk, or make infiniband../server at the server, and ./client at the clientdoxygenDTRANSPORT=dpdk. We have primarily tested Mellanox CX3--CX5 NICs.-DTRANSPORT=dpdk -DAZURE=onDTRANSPORT=infiniband. Add DROCE=on
if using RoCE.eRPC works well on Azure VMs with accelerated networking.
Configure two Ubuntu 18.04 VMs as below. Use the same resource group and availability zone for both VMs.
eth0) and lo interfaces.az network nic create --resource-group <your resource group> --name <a name for the NIC> --vnet-name <name of the VMs' virtual network> --subnet default --accelerated-networking true --subscription <Azure subscription, if any> --location <the VM's availability zone>eth1, which eRPC
will use for DPDK traffic.Prepare DPDK 21.11
stable-v40. First, install its dependencies listed in rdma-core's README. Then, in the rdma-core` directory:
cmake .sudo make installsudo apt install make cmake g++ gcc libnuma-dev libgflags-dev numactlsudo modprobe ib_uverbssudo modprobe mlx4_ibconfig/common_base by changing CONFIG_RTE_LIBRTE_MLX5_PMD and
CONFIG_RTE_LIBRTE_MLX4_PMD to y instead of n.export RTE_SDK=<some dpdk directory>
git clone --depth 1 --branch 'v21.11' https://github.com/DPDK/dpdk.git "${RTE_SDK}"
cd "${RTE_SDK}"
meson build -Dexamples='' -Denable_kmods=false -Dtests=false -Ddisable_drivers='raw/*,crypto/*,baseband/*,dma/*'
cd build/
DESTDIR="${RTE_SDK}/build/install" ninja install
sudo bash -c "echo 2048 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages"
sudo mkdir /mnt/huge
sudo mount -t hugetlbfs nodev /mnt/huge
cmake . -DTRANSPORT=dpdk -DAZURE=on
make
make latency
scripts/autorun_process_file like below. Here, do not use
the IP addresses of the accelerated NIC (i.e., not of eth1).<Public IPv4 address of VM #1> 31850 0
<Public IPv4 address of VM #2> 31850 0
./scripts/do.sh 0 0./scripts/do.sh 1 0apps directory contains a suite of benchmarks and examples. The
instructions below are for this suite of applications. eRPC can also be
simply linked as a library instead (see hello_world/ for an example).scripts/autorun_app_file and change its
contents to one of the available directory names in apps/. See
scripts/example_autorun_app_file for an example. Then generate a
Makefile using cmake . -DTRANSPORT=dpdk/infiniband.apps/ contains a config file
that must specify all flags defined in apps/apps_common.h. For example,
num_processes specifies the total number of eRPC processes in the cluster.scripts/autorun_process_file. Each line in this file must be
<hostname> <management udp port> <numa_node>.scripts/do.sh for each process:
num_processes machines are needed.
Run scripts/do.sh <i> 0 on machine i in {0, ..., num_processes - 1}.num_machines = ceil(num_processes / 2) machines
are needed. Run scripts/do.sh <i> <i % 2> on machine i in
{0, ..., num_machines - 1}.scripts/autorun_process_file, run scripts/run-all.sh. For some
applications, statistics generated in a run can be collected and processed
using scripts/proc-out.sh.rdma_core version and DPDK versionAnuj Kalia
Copyright 2018, 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.
(top 24 of 35)
729 followers · starred Mar 2019
1,510 followers · starred Mar 2019
163 followers · starred Jul 2021
255 followers · starred Jan 2023
News [Dec 2023]: Check out Machnet for fast and easy DPDK-based messaging. It supports many types of cloud VMs and bare-metal NICs, multiple application processes, language bindings, etc.
eRPC is a fast and general-purpose RPC library for datacenter networks.
Our NSDI 2019 paper
describes the system in detail. Documentation can be generated by running doxygen.
Some highlights:
n eRPC processes, eRPC uses kernel UDP ports {31850, ..., 31850 + n - 1}. These ports should be open on the management
network. See scripts/firewalld/erpc_firewall.sh for systems running
firewalld.cmake . -DPERF=OFF -DTRANSPORT=dpdk; make -j; sudo ctest.
DPERF=OFF enables debugging, which greatly reduces performance. Set
DPERF=ON for good performance.dpdk should be replaced with infiniband for InfiniBand NICs.scripts/run-tests-dpdk.sh instead of ctest.hello_world application:
cd hello_worldcommon.hhello_world
using make dpdk, or make infiniband../server at the server, and ./client at the clientdoxygenDTRANSPORT=dpdk. We have primarily tested Mellanox CX3--CX5 NICs.-DTRANSPORT=dpdk -DAZURE=onDTRANSPORT=infiniband. Add DROCE=on
if using RoCE.eRPC works well on Azure VMs with accelerated networking.
Configure two Ubuntu 18.04 VMs as below. Use the same resource group and availability zone for both VMs.
eth0) and lo interfaces.az network nic create --resource-group <your resource group> --name <a name for the NIC> --vnet-name <name of the VMs' virtual network> --subnet default --accelerated-networking true --subscription <Azure subscription, if any> --location <the VM's availability zone>eth1, which eRPC
will use for DPDK traffic.Prepare DPDK 21.11
stable-v40. First, install its dependencies listed in rdma-core's README. Then, in the rdma-core` directory:
cmake .sudo make installsudo apt install make cmake g++ gcc libnuma-dev libgflags-dev numactlsudo modprobe ib_uverbssudo modprobe mlx4_ibconfig/common_base by changing CONFIG_RTE_LIBRTE_MLX5_PMD and
CONFIG_RTE_LIBRTE_MLX4_PMD to y instead of n.export RTE_SDK=<some dpdk directory>
git clone --depth 1 --branch 'v21.11' https://github.com/DPDK/dpdk.git "${RTE_SDK}"
cd "${RTE_SDK}"
meson build -Dexamples='' -Denable_kmods=false -Dtests=false -Ddisable_drivers='raw/*,crypto/*,baseband/*,dma/*'
cd build/
DESTDIR="${RTE_SDK}/build/install" ninja install
sudo bash -c "echo 2048 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages"
sudo mkdir /mnt/huge
sudo mount -t hugetlbfs nodev /mnt/huge
cmake . -DTRANSPORT=dpdk -DAZURE=on
make
make latency
scripts/autorun_process_file like below. Here, do not use
the IP addresses of the accelerated NIC (i.e., not of eth1).<Public IPv4 address of VM #1> 31850 0
<Public IPv4 address of VM #2> 31850 0
./scripts/do.sh 0 0./scripts/do.sh 1 0apps directory contains a suite of benchmarks and examples. The
instructions below are for this suite of applications. eRPC can also be
simply linked as a library instead (see hello_world/ for an example).scripts/autorun_app_file and change its
contents to one of the available directory names in apps/. See
scripts/example_autorun_app_file for an example. Then generate a
Makefile using cmake . -DTRANSPORT=dpdk/infiniband.apps/ contains a config file
that must specify all flags defined in apps/apps_common.h. For example,
num_processes specifies the total number of eRPC processes in the cluster.scripts/autorun_process_file. Each line in this file must be
<hostname> <management udp port> <numa_node>.scripts/do.sh for each process:
num_processes machines are needed.
Run scripts/do.sh <i> 0 on machine i in {0, ..., num_processes - 1}.num_machines = ceil(num_processes / 2) machines
are needed. Run scripts/do.sh <i> <i % 2> on machine i in
{0, ..., num_machines - 1}.scripts/autorun_process_file, run scripts/run-all.sh. For some
applications, statistics generated in a run can be collected and processed
using scripts/proc-out.sh.rdma_core version and DPDK versionAnuj Kalia
Copyright 2018, 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.
(top 24 of 35)
729 followers · starred Mar 2019
1,510 followers · starred Mar 2019
163 followers · starred Jul 2021
255 followers · starred Jan 2023