【NS3】RDMA报文接收过程串讲

 版权声明:文章来源/微信公众号“网络技术风云汇” ——【NS3】RDMA报文接收过程串讲

以HPCC的NS3仿真代码为蓝本(https://github.com/alibaba-edu/High-Precision-Congestion-Control)

上一篇文章介绍的 【NS3的流完成时间计算方法】,本文解释HPCC代码中的报文接收过程。

前言

HPCC在NS3中的仿真,协议栈自上而下简化为:

RdmaClient --> RdmaDriver --> RdmaHw --> QbbNetDevice --> Swich节点发送。

接收过程是反过来的。

注意:此处的QbbNetDevice不能理解为网卡,而应该理解为网络设备。因为在网络中,能接收从通道发来数据的不仅仅是网卡,交换机也能收到数据。后面会进行区分。

网络通道-->网络设备

第一步:网络信道QbbChannel将数据发送到网络设备QbbNetDevice。这是一个调度事件,QbbChannel收到来自其他设备的数据包后,会在链路时延后通知QbbNetDevice,也就是网络设备接收数据。

此处也是配置的链路时延真正起作用的地方,也就是控制数据包到达对方设备的时间(调用对方的数据接收函数)。

第二步:网络设备则会接收到来自QbbChannel的数据包。

第三步:先处理PFC数据包。无论本设备是交换机还是主机,先判断收到的报文是不是PFC。

1、收到pfc,但未使能PFC功能,则直接退出,继续后面的处理。

2、使能pfc,则会根据报文是pause和resume进行进一步的处理,此处不再细化。

第四步:收到的数据若不是PFC报文,则数据包则是普通的数据或控制信令。

如上所述,因为接收到数据的设备可以是主机,也可以是交换机,因此会根据当前设备的类型(0:主机;1:交换机)进行区分处理。

1、如果是交换机,则会继续发往下一个网络设备(交换机或主机网卡):

2、如果是主机网卡设备,则会通知主机进行接收,第四步下图第413行所示。。

注意:m_rdmaReceiveCb真实调用RdmaHw::Receive()来继续进行主机数据接收。这是通过如下的回调函数绑定的:

第五步:主机接收到报文,并进一步区分报文类型,并进行相应的处理。

代码很清晰。例如收到UDP数据报文后,则要查找对应的接收QP,还要判断是否产生cnp标记,然后通过ack报文携带回发送端。如下图所示:

如果收到的数据是cnp,则需要调用对应拥塞控制算法进行处理,这也是很多尝试修改拥塞控制算法的同学需要进行魔改的地方。

收到ACK报文的话,涉及到判断流是否结束,判断乱序,以及各拥塞控制算法对ACK的处理。

例如,如果使用的是HPCC算法,则要逐ACK进行速率处置(具体参加论文):

而像DCTCP则是其他的处理方式,不再赘述。

至此,报文接收的过程大致梳理了一遍。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值