akshayknarayan / io-queue-rdma

Experimental implemetnation of the io-queue abstraction in Rust

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

IO queue RDMA

This crate implements the Demikernel RDMA IO queue interface. Check main Demikernel Repository page for more info about the project.

This crate provides high-level bindings around RDMA ibverbs without sacrificing performance.

Sending a byte is as simple as:

// Create IQueue with specified sizes for queues. 
let mut io_queue = IoQueue::<2048, 256, 32, 1024, 1024>::new();
// Create connection socket.
let mut connection = io_queue.socket();
// Connect to server via specified ip address and port.
io_queue.connect(&mut connection, &ip_address, &port);

println!("Sending byte to server.");
// Get an RDMA registered memory region.
let mut memory = io_queue.malloc(&mut connection);
// Write single byte to local memory.
memory.as_mut_slice(1)[0] = 42;
// Send byte as post_send message.
let qt = io_queue.push(&mut connection, memory);
// Wait for ack of post_send request.
let memory = io_queue.wait(qt).push_op();
// Allow IO Queue to reclaim memory for reuse.
io_queue.free(&mut connection, memory);
println!("Byte sent!");

Check the examples/ directories for various RDMA IoQueue programs.

About

Experimental implemetnation of the io-queue abstraction in Rust

License:MIT License


Languages

Language:Rust 100.0%