[RoCE]Flow Control

概览

RoCE可以实现lossless无损网络环境,在二层网络上做到可靠网络传输,从而对原本在光纤网络环境下的应用在以太网环境下提供相同的服务,而不必对应用逻辑和上层协议更改。实现无损的方法有Global Pause, PFC, Dropless Receive Queue。

1.什么是802.3x Flow Control(Global Pause)?

以太网标准(802.3)设计时是不可靠的网络。不保证网络包会到达目的地像上层协议(如TCP)设计的将会到达目的地一样。后来,IEEE 802.3x 流控制标准为那些在上层一些不能保证可靠性的应用制定了一套标准。它能够接收从接收方发给发送方的缓存回馈(buffer feedback,例如overflow)。暂停动作(XOFF)是一个由接收方发给发送方的控制帧,告诉它接收缓存空间出现压力并且在不久可能会溢出。发送方立刻停止发送任何新的数据包予以回应,直到接收方准备再次接收它们为止。这个暂停帧包含一个timeout值。发送方会在这个超时范围内等待,或者直到收到一个XON控制消息后,再开始发送。IEEE 802.3x存在一个基本的缺点:一旦链路被暂停了,发送方就不能再产生任何新的包。结果,在一个端口上使用Global Pause流控制时,以太网链路不能负载需要不同QoS行为的多条网络流。也就是说,它会在该端口上暂停类型任何包括高优先级的网络流。不仅如此,如果这条链路出现在网络中的两个交换机上时,这个暂停动作可能会阻塞那些不需要暂停的服务器之间的流,导致大面积瘫痪。

2.什么是802.1Qbb Priority Flow Control(PFC)?

IEEE 802.1Qbb PFC将基本的IEEE 802.3x扩展成8个类别。它使得需要流控制的应用和不需要流控制的应用可以在同一条链路上共存。PFC对8种不同类型的流都做了定义,可以达到流控制效果。在2层网络的情况下,PFC使用VLAN标签(IEEE 802.1q)中的PCP位来区分八种不同类型的网络流,使得它们可以享受到独立的流控制。

[注意:PFC和Global Pause不能同时运行在同一个网络接口上,二者只能存其一]

3.什么时候使用PFC,它和QoS的关系又是什么呢?

当应用需要无损网络环境时(也就是说当应用使用的上层网络协议不保证可靠性传输时),PFC应该被启用以防止网络丢包,这通常是针对从光纤网络迁移到以太网上的应用。

当网络上存在多条网络流,而且这些网络流需要有差别的服务时(比如延迟敏感),应该启用QoS特性。可见PFC与QoS并无直接关系,但是他们可以应用到同一个网络队列上。

4.PFC具体在硬件上怎么实现的?

每个网卡硬件上有8个硬件发送队列,用于接收从各个CPU上的软件发送队列中的数据包,这些队列命名为Traffic Class,分别为TC0,TC1,...,TC7。而PFC策略可以通过mlnx_qos命令来对每个TC进行设置,因此可以细粒度的对每个TC启用PFC,使得上层应用可以同时选择有流控制和没有流控制的网络服务。

5.什么是Dropless Receive Queue?

无丢包接收队列可以在当软件接收队列过载时,让驱动通知固件。这种情况发生在当软件接收队列的处理速度比硬件接收队列的处理速度慢时。当启用这种特性后,在接收队列满载时,新接收的网络包不会被立刻丢掉。固件会累积这些包,并且假设软件会很快放置新的WQEs。如果过了一个固定的时间段后,新的接收WQE仍然没有放置,缓存溢出计数器会增长,暗示网络数据包已经被丢掉了。这种特性默认是禁用的。如果要启用该特性,要确保上述的流控制特性也得启用了一个。

启用方式:ethtool --set-priv-flags <interface> dropless_rq on, 关闭方式是off

查看信息:ethtool --show-priv-flags <interface>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Chrome插件Tampermonkey--自定义过滤百度网页搜索结果并去除广告栏和自动推荐

    1.目的 过滤百度搜索的种种无内涵、低信息量、低质量的网页。 ---- 2.所需工具 浏览器:Chrome 插件:Tampermonkey  自定义脚本: ? ...

    昊楠Hacking
  • 常用简单Chown命令和Chmod命令

    linux下使用ls -la可以查看当前目录下的文件详细信息 ? 文件的权限组成格式是: 文件属性  当前用户权限  用户所属用户组权限  其他用户权限   链...

    昊楠Hacking
  • Summarizing a Research Article

    Writing the Summary ?

    昊楠Hacking
  • jquery_12js基础_定时器

    在html页面开发中,我们有时会用到定时器,比如时间倒数,商品的限时抢购等,都会使用到js的定时器。那么这个定时器怎么使用?下面我们来看一下。

    用户1730674
  • 一个老程序员是如何手写Spring MVC的?「附代码」

    人见人爱的Spring已然不仅仅只是一个框架了。如今,Spring已然成为了一个生态。但深入了解Spring的却寥寥无几。这里,我带大家一起来看看,我是如何手写...

    Java知音
  • 基于Linux内核的时间轮算法设计实现【附代码】

    对于一个复杂的软件系统,定时器的对任务的管理和调度至关重要,通常定时器的管理已成为一个复杂系统的重要基础设施。

    孙玄@奈学教育
  • 深入理解 Java 并发之 synchronized 实现原理

    线程安全是并发编程中的重要关注点,应该注意到的是,造成线程安全问题的主要诱因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同操作共享数据。因此为了...

    用户1263954
  • 网络流简介

    本系列文章只讨论网络流在信息学奥赛中的应用 前言 网络流在信息学奥赛中是一个非常庞大的体系,因为该知识点的模型多变,建模方式复杂,对选手的能力要求较高,因此在各...

    attack
  • Ubuntu 18.04 LTS快速美化

    sean_yang
  • Qt多种定时器

      使用startTimer开启定时器,使用killTimer(int id)接口来关闭指定的定时器。 启动定时器后会在对应间隔时间触发timerEvent事...

    Qt君

扫码关注云+社区

领取腾讯云代金券