RoCEv2 无损队列缓存

RoCE的技术方案是将以太网通过PFC和ECN的加持后进化成“无损网络”,用来支持在以太网上承载RDMA业务。
RDMA流量通过DSCP标记进入到以太网交换机的无损队列转发。无损队列和有损队列的重要区别就是其缓存的划分。
缓存空间存在于芯片中,芯片上的所有端口共用该芯片的缓存空间,端口上的所有队列共用该端口的缓存空间。缓存空间可以划分为芯片级、端口级、队列级。队列一般分为有损队列与无损队列。区别是无损队列多了Headroom缓存空间。

无损队列的缓存空间
在这里插入图片描述

  • 芯片级
    1.Static Buffer
    静态缓存是在芯片上的Packet缓存中单独划分出来的一块区域,用于划分端口级的Port Guaranteed缓存。它以独占的方式存在,即某端口从该缓存空间中分得的静态缓存,即使空闲时也不能被其他端口使用。
    2.Dynamic Buffer
    动态缓存是在芯片上的Packet缓存中除静态缓存之外的其他缓存区域,它可以分为Service Pool和Headroom Pool两部分。Service Pool和Headroom Pool相互独立,即Service Pool的空闲缓存不能被Headroom Pool使用,Headroom Pool的空闲缓存也不能被Service Pool使用。
    3.Service Pool
    用于划分端口级的Port Service缓存。所有端口级的Port Service缓存共享芯片级的Service Pool缓存。
    假设芯片级的Service Pool缓存大小为100KBytes,端口1和端口2的Port Service缓存大小均为80KBytes。若某一时刻,端口1中的报文已经占用了70KBytes的Port Service缓存空间,则端口2最多还可以占用30KBytes的Port Service缓存空间。
    4.Headroom Pool
    用于划分端口级的Port Headroom缓存。所有端口级的Port Headroom缓存共享芯片级的Headroom Pool缓存。
    假设芯片级的Headroom Pool缓存大小为50KBytes,端口1和端口2的Port Headroom缓存大小均为40KBytes。若某一时刻,端口1中的报文已经占用了30KBytes的Port Headroom缓存空间,则端口2最多还可以占用20KBytes的Port Headroom缓存空间。

  • 端口级

1.Port Guaranteed
用于划分队列级的Queue Guaranteed。它以独占的方式存在,即队列1中Queue Guaranteed的空闲缓存不能被队列2使用。
2.Port Service
用于划分队列级的Queue Service缓存。所有队列级的Queue Service缓存共享端口级的Port Service缓存。
假设端口级的Port Service缓存大小为80KBytes,队列1和队列2的Queue Service缓存大小均为60KBytes。若某一时刻,队列1中的报文已经占用了50KBytes的Queue Service缓存空间,则队列2最多还可以占用30KBytes的Queue Service缓存空间。
3.Port Headroom
用于划分队列级的Queue Headroom缓存。所有队列级的Queue Headroom缓存共享端口级的Port Headroom缓存。
假设端口级的Port Headroom缓存大小为40KBytes,队列1和队列2的Queue Headroom缓存大小均为30KBytes。若某一时刻,队列1中的报文已经占用了25KBytes的Queue Headroom缓存空间,则队列2最多还可以占用15KBytes的Queue Headroom缓存空间。

  • 队列级
    1.Queue Guaranteed
    用于保证队列的最基本转发能力。它确保了队列抢占不到Queue Service缓存时,也能进行一部分的报文转发。分为入队列的Queue Guaranteed和出队列的Queue Guaranteed。
    2.Queue Service
    用于保证队列的突发转发能力。当队列中存在突发报文时,可以使用Queue Service的缓存。分为入队列的Queue Service和出队列的Queue Service。只有待转发的报文小于入队列剩余的Queue Service和出队列剩余的Queue Service,该报文才能进入队列进行转发,否则该报文被丢弃。
    3.Queue Headroom
    用于存储本队列发送PFC反压通知报文之后到上游设备停止发包之前这段时间内收到的报文,以防这段时间内的报文被丢弃。

通常情况下,芯片上只有一个Service Pool,无损队列的Queue Service和有损队列的Queue Service共用同一个Service Pool。这时,当有损队列中的报文过多,占用了绝大部分的Service Pool时,无损队列由于没有足够的Queue Service进行报文转发,就会出现丢包。同时,无损队列的Queue Headroom也需要合理划分,否则无法有足够的缓存来存储本队列发送PFC反压通知报文之后到上游设备停止发包之前这段时间内收到的报文。
无损队列的缓存空间优化能够很好的解决上述问题。使能无损队列的缓存空间优化后,设备根据芯片的转发能力合理划分各缓存空间,最大程度上保证无损队列的不丢包转发。

水线
无论那个级别的无损队列,缓存空间都会划分三个部分,这两条划分的线被称为水线。
如果交换机收到的流量不断增大超过xoff 水线时,交换机会发出PFC 帧反压上游设备停止发包,
一些没有被反压住数据包(比如在途数据包)会被交换机的headroom缓存,
随着PFC反压了上游设备发包,交换机的缓存水位会不断下降,
水位线降至xon 时,交换机发PFC帧解除反压,上游设备重新发包,缓存水位再次开始上升,
水位上升至xoff 时再次发PFC反压,如此反复。
在这里插入图片描述
水线值一般可以使用交换机默认值或根据业务情况配置。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值