基于传统以太网与RDMA技术通信过程的对比|环球关注
时间:2023-06-17 12:52:21来源:面包芯语

点击上方蓝字谈思实验室


【资料图】

获取更多汽车网络安全资讯

本篇的目的是通过对比一次典型的基于TCP/IP协议栈的以太网和RDMA通信的过程,直观的展示RDMA技术相比传统以太网的优势,尽量不涉及协议和软件实现细节。

假设本端的某个应用想把自己内存中的数据复制到对端某个应用可以访问的内存中(或者通俗的讲,本端要给对端发送数据),我们来看一下以太网和RDMA的SEND-RECV语义都做了哪些操作。

在描述通信过程时的软硬件关系时,我们通常将模型划分为用户层Userspace,内核Kernel以及硬件Hardware。Userspace和Kernel实际上使用的是同一块物理内存,但是出于安全考虑,Linux将内存划分为用户空间和内核空间。用户层没有权限访问和修改内核空间的内存内容,只能通过系统调用陷入内核态,Linux的内存管理机制比较复杂,本文不展开讨论。

一次典型的基于传统以太网的通信过程的可以如下图所示进行分层:

一次收-发过程的步骤如下:

这个模型的数据流向大致是像上图这个样子,数据首先需要从用户空间复制一份到内核空间,这一次复制由CPU完成,将数据块从用户空间复制到内核空间的Socket Buffer中。内核中软件TCP/IP协议栈给数据添加各层头部和校验信息。最后网卡会通过DMA从内存中复制数据,并通过物理链路发送给对端的网卡。

而对端是完全相反的过程:硬件将数据包DMA拷贝到内存中,然后CPU会对数据包进行逐层解析和校验,最后将数据复制到用户空间。

上述过程中的关键点是需要CPU参与的把数据从用户空间拷贝到内核空间,以及同样需要CPU全程参与的数据包组装和解析,数据量大的情况下,这将对CPU将造成很大的负担。

下面我们看一下RDMA是如何将CPU“解放”出来的。

同样是一端发送,一端接收的场景,我们将RDMA的分层模型分成两部分“控制通路”和“数据通路”,控制通路需要进入内核态准备通信所需的内存资源,而数据通路指的是实际数据交互过程中的流程。这一过程的分层关系如下图所示:

同Socket一样,我们简单描述下通信的过程:

这一过程中的数据流向大致如上图所示。通过和Socket的对比,我们可以明显看到,数据收发绕过了内核并且数据交换过程并不需要CPU参与,报文的组装和解析是由硬件完成的。

通过上面的对比,我们可以明显的体会到RDMA的优势,既将CPU从数据包封装和解析中解放出来,又减少了CPU拷贝数据的功率和时间损耗。需要注意的是,本文只描述了SEND-RECV流程,而RDMA技术所独有的,效率更高的WRITE/READ语义将在后续文章中介绍。

下面介绍一些RDMA技术中的重要且基本的概念。

RDMA技术中经常使用缩略语,很容易让刚接触的人一头雾水,下面讲解RDMA中最基本的元素及其含义,下图是常见的缩略语对照表。

Work Queue简称WQ,是RDMA技术中最重要的概念之一。WQ是一个储存工作请求的队列,为了讲清楚WQ是什么,我们先介绍这个队列中的元素WQE(Work Queue Element,工作队列元素)。

WQE可以认为是一种“任务说明”,这个工作请求是软件下发给硬件的,这份说明中包含了软件所希望硬件去做的任务以及有关这个任务的详细信息。比如,某一份任务是这样的:“我想把位于地址0x12345678的长度为10字节的数据发送给对面的节点”,硬件接到任务之后,就会通过DMA去内存中取数据,组装数据包,然后发送。

WQE的含义应该比较明确了,那么我们最开始提到的WQ是什么呢?它就是用来存放“任务书”的“文件夹”,WQ里面可以容纳很多WQE。有数据结构基础的读者应该都了解,队列是一种先进先出的数据结构,在计算机系统中非常常见,我们可以用下图表示上文中描述的WQ和WQE的关系:

WQ这个队列总是由软件向其中增加WQE(入队),硬件从中取出WQE,这就是软件给硬件“下发任务”的过程。为什么用队列而不是栈?因为进行“存”和“取“操作的分别是软件和硬件,并且需要保证用户的请求按照顺序被处理在RDMA技术中,所有的通信请求都要按照上图这种方式告知硬件,这种方式常被称为“Post”。

Queue Pair简称QP,就是“一对”WQ的意思。

任何通信过程都要有收发两端,QP就是一个发送工作队列和一个接受工作队列的组合,这两个队列分别称为SQ(Send Queue)和RQ(Receive Queue)。我们再把上面的图丰富一下,左边是发送端,右边是接收端:

WQ怎么不见了?SQ和RQ都是WQ,WQ只是表示一种可以存储WQE的单元,SQ和RQ才是实例。

SQ专门用来存放发送任务,RQ专门用来存放接收任务。在一次SEND-RECV流程中,发送端需要把表示一次发送任务的WQE放到SQ里面。同样的,接收端软件需要给硬件下发一个表示接收任务的WQE,这样硬件才知道收到数据之后放到内存中的哪个位置。上文我们提到的Post操作,对于SQ来说称为Post Send,对于RQ来说称为Post Receive。

需要注意的是,在RDMA技术中通信的基本单元是QP,而不是节点。如下图所示,对于每个节点来说,每个进程都可以使用若干个QP,而每个本地QP可以“关联”一个远端的QP。我们用“节点A给节点B发送数据”并不足以完整的描述一次RDMA通信,而应该是类似于“节点A上的QP3给节点C上的QP4发送数据”。

每个节点的每个QP都有一个唯一的编号,称为QPN(Queue Pair Number),通过QPN可以唯一确定一个节点上的QP。

Shared Receive Queue简称SRQ,意为共享接收队列。概念很好理解,就是一种几个QP共享同一个RQ时,我们称其为SRQ。以后我们会了解到,使用RQ的情况要远远小于使用SQ,而每个队列都是要消耗内存资源的。当我们需要使用大量的QP时,可以通过SRQ来节省内存。如下图所示,QP2~QP4一起使用同一个RQ:

Completion Queue简称CQ,意为完成队列。跟WQ一样,我们先介绍CQ这个队列当中的元素——CQE(Completion Queue Element)。可以认为CQE跟WQE是相反的概念,如果WQE是软件下发给硬件的“任务书”的话,那么CQE就是硬件完成任务之后返回给软件的“任务报告”。CQE中描述了某个任务是被正确无误的执行,还是遇到了错误,如果遇到了错误,那么错误的原因是什么。

而CQ就是承载CQE的容器——一个先进先出的队列。我们把表示WQ和WQE关系的图倒过来画,就得到了CQ和CQE的关系:

每个CQE都包含某个WQE的完成信息,他们的关系如下图所示:

下面我们把CQ和WQ(QP)放在一起,看一下一次SEND-RECV操作中,软硬件的互动(图中序号顺序不表示实际时序):

2022/5/23:下图及后面的列表顺序有修改,将原来第2条的“接收端硬件从RQ中拿到任务书,准备接收数据”移动到“接收端收到数据,进行校验后回复ACK报文给发送端”之后,并且修改了描述,现在为第6条。

NOTE:需要注意的一点是,上图中的例子是可靠服务类型的交互流程,如果是不可靠服务,那么不会有步骤5的ACK回复,而且步骤9以及之后的步骤会在步骤5之后立即触发。

至此,通过WQ和CQ这两种媒介,两端软硬件共同完成了一次收发过程。

说完了几个Queue之后,其实还有两个文章开头提到的概念没有解释,那就是WR和WC(不是Water Closet的缩写)。

WR全称为Work Request,意为工作请求;WC全称Work Completion,意为工作完成。这两者其实是WQE和CQE在用户层的“映射”。因为APP是通过调用协议栈接口来完成RDMA通信的,WQE和CQE本身并不对用户可见,是驱动中的概念。用户真正通过API下发的是WR,收到的是WC。

WR/WC和WQE/CQE是相同的概念在不同层次的实体,他们都是“任务书”和“任务报告”。于是我们把前文的两个图又加了点内容:

好了,我们用IB协议3.2.1中的Figure 11这张图总结一下以上内容:

《IB Specification Vol 1-Release-1.3-2015-03-03》

用户态的WR,由驱动转化成了WQE填写到了WQ中,WQ可以是负责发送的SQ,也可以是负责接收的RQ。硬件会从各个WQ中取出WQE,并根据WQE中的要求完成发送或者接收任务。任务完成后,会给这个任务生成一个CQE填写到CQ中。驱动会从CQ中取出CQE,并转换成WC返回给用户。

原文链接:

1.https://zhuanlan.zhihu.com/p/139548242

2.https://zhuanlan.zhihu.com/p/141267386

来源:知乎;作者:Savir

会员权益:(点击可进入)谈思实验室VIP会员

标签:

生活指南
  • BuildingOS仍将是一个独立且开放的平台 观热点

    AcuityBrands,Inc 宣布已通过其业界领先的BuildingOS®商业智能平台收购了LucidDes

  • 金华团员档案和组织关系转接攻略 新要闻

    本《指引》用于指导各级团组织毕业学生团员依托“智慧团建”系统规范开

  • 美在开合间

    光明日报记者韩寒“2022年中国最美的书”在首届艺术书展展出。本报记者

  • 暴雨+雷暴大风!江西天气“变脸”

    注意!未来几天雨、雷雨、阵雨、暴雨、雷暴大风都要来了!6月16日起,

  • 美国田纳西州发生枪击事件 造成6人死亡1人受伤

    美国田纳西州发生枪击事件造成6人死亡1人受伤

  • 环球新动态:四川路桥自研首个可实现产业化智能建造产品:拌合站集控式AI生产系统即将推广应用

    据“四川路桥道行天下”微信公众号消息,6月12日,拌合站集控式AI生产

  • XM隆“粽”登场,红包送不停

    端午活动终于开始啦!大家准备迎接豪礼了吗?这次X准备了高达$8,888的现

  • 全球快资讯:心梗+脑梗!福州61岁老汉九死一生!醒来却还要……

    习惯每天抽80根烟,不承想差点危及生命!近日,福州仓山区61岁的李先生

  • 重庆尖顶坡地铁站 重庆尖顶坡地铁站停车楼-全球播报

    在重庆,1号线尖顶坡地铁站位于龙湖U城天街旁,共有两个出入口,下面由

  • 全球观天下!哈佛医学院丑闻曝光!太平间管理员倒卖遗体,6 人已被逮捕

    本文作者:方婧玉太平间管理员监守自盗,倒卖捐赠遗体。有的遗体被分割

  • 武汉洪山区应急局:两名井下作业工人被沼气熏倒,抢救无效死亡|每日速递

    情况通报6月16日下午,长征二路两名井下作业工人不幸身亡。经查,当天

  • 每日快报!郑州市第十九高级中学迎接郑州市“美育课程特色学校” 考评

    郑州市第十九高级中学迎接郑州市“美育课程特色学校”考评学校党委书记

  • 第一志愿是什么意思?(精选4条)

    一、第一志愿是什么意思?第一志愿是指高考填报志愿时有多个学校志愿供

  • 每日精选:煮熟的豆渣能做花肥吗 煮熟的豆渣能不能做花肥

    1、熟豆渣可以做花肥,但需发酵后才能使用。一般可以将豆渣放入容器中

  • 国家能源局印发《发电机组进入及退出商业运营办法》 明确独立新型储能进入商业运营条件

    6月16日,国家能源局印发《发电机组进入及退出商业运营办法》。

  • 给老公买礼物留言卡,送男朋友新年礼物卡片留言?|环球今日讯

    一、送男朋友新年礼物卡片留言?哈喽,我很高兴来回答你的这个问题。亲

  • 民生
    • 甘泉县气象台继续发布大风蓝色预警【Ⅳ级/一般】【2023-06-16】 头条_环球观速讯

    • 乌军宣布:拦截6枚俄军“匕首”高超音速导弹和6枚“口径”巡航导弹

    • 全球新动态:【浙商宏观||李超】先摆好姿态,再相机抉择

    • 世界信息:遥望科技完成激励计划股票期权的授予登记工作