最近几个月一直在研究RDMA网卡,准备逐步把一些可公开的成果分享到这里,今天先说说RDMA网卡相对传统以太网卡有什么优势。
下图展示了使用传统以太网卡时,两台机器通讯过程中所需要的软件模块(分层)以及软硬件之间的关系。我们通常将模型划分为用户态(Userspace),内核态(Kernel)以及硬件(Hardware)。用户态和内核态软件实际上使用的是同一块物理内存,但是处于安全考虑,Linux将内存划分为用户空间和内核空间。用户态没有权限访问和修改内核空间的内存内容,只能通过系统调用陷入内核态。Linux的内存管理机制比较复杂,本文不展开讨论。
以太网卡模式一次收发过程的步骤如下:
l发送端和接收端通过Socket库提供的接口建立链接(就是在两个节点间建立了一条逻辑上的道路,数据可以沿这条道路从一端发送到另一端)并分别在内存中申请好发送和接收Buffer。
l发送端APP通过Socket接口陷入内核态,待发送数据经过TCP/IP协议栈的一层层封装,最后被CPU复制到SocketBuffer中。
l发送端通过网卡驱动,告知网卡可以发送数据了,网卡将通过DMA从Buffer中复制封装好的数据包到内部缓存中,然后将其发送到物理链路。
l接收端网卡收到数据包后,将数据包放到接收Buffer中,然后CPU将通过内核中的TCP/I