dis-kverbs

This is the main implementation of RoPCIe, an RDMA transport over PCI Express. RoPCIe acts as a translation layer in between RDMA operations and PCIe Non Transparent Bridge(NTB) operations. User-space to user-space RDMA is supported through a Libibverbs plugin in dis-uverbs.

The implementation consists four kernel modules: a bus, a device driver, a device and a Dolphin SCI Library Interface. When modules are built built and loaded into the kernel, a virtual device representing a RoPCIe endpoint will be registered with the RDMA subsystem in the kernel. The virtual device will behave like a physical RDMA adapter, while translating RDMA commands into NTB commands behind the scenes.

How to build

Dependencies

  • Kernel version 5.5.x (May also work on other kernels of similar age)
  • Dolphin eXpressWare for Linux

Build

From project root:

make

Result

A successful make results in four kernel modules:

  • dis_bus_mod.ko
  • dis_driver_mod.ko
  • dis_device_mod.ko
  • dis_sci_if_mod.ko

How to use

Load modules

WARNING: Proceed at own risk!

Requester side:

make req

Responder side:

make res

Remove modules

Both sides:

make rm

About

This project was developed by me as a part of my master thesis, in collaboration with University of Oslo, Simula Research Laboratories, and Dolphin Interconnect Solutions. The project has achieved its goals to a large extent and is a functional proof of concept. If you choose to use any part of it, know that this code executes inside the kernel with (probably) unsafe mechanisms for directly reading and writing to physical memory.