用Rust实现RDMA高性能编程
《用Rust实现RDMA高性能编程》
本次Workshop主要介绍用Rust实现RDMA高性能编程。
RDMA是常用于超算和高端存储领域的高性能网络协议。RDMA采用专有硬件网卡用于协议解析,同时RDMA的数据通路实现内核旁路,这样在RDMA网卡收发数据包时,可以完全避免由内核处理数据包导致的额外内存拷贝以及上下文切换,因此RDMA在网络传输方面相比内核的TCP栈可以达到很高的性能。
但是用RDMA开发网络应用比基于内核的TCP栈要复杂很多。首先,由于RDMA的数据通路不经过内核,因此在用户应用要发送和接收数据时需要自行管理内存,特别是在接收数据时,用户应用必须保证收到的数据不能超过接收内存区域的大小,否则RDMA协议栈会报错。其次,由于RDMA的单边操作是完全由硬件处理没有软件参与,因此接收端的用户应用完全无法感知RDMA单边操作,使得接收端RDMA应用有可能在单边操作执行的过程中修改内存,导致单边操作传输的数据出错,更严重的是接收端和发送端都无法感知数据出错。再者,RDMA的API是基于C实现,非常底层,需要用户在开发时要格外注意,不然那就会导致出错,比如RDMA用于接收和发送数据的内存区域必须是在堆上分配,不能是在栈上分配。
针对RDMA开发的种种不便,我们用Rust封装了一套RDMA的API,一方面简化RDMA开发的复杂度,另一方面保证用户应用实现高性能收发RDMA数据包,不会因为采用Rust封装RDMA的API导致有额外的性能开销。
本次Workshop准备了动手实验环节,方便大家实际体验如何用Rust构建RDMA应用,建议大家提前准备好实验环境。本次Workshop的相关资料,包括实验环境准备、动手实验的代码等,参见https://github.com/datenlord/...
欢迎对RDMA感兴趣的朋友参加本次Workshop!