深度分析数据中心之PFC(Priority-based Flow Control)技术

一、PFC产生的背景:

传统的在企业数据中心内,通常会部署一个以太网来支持IP流量,部署一或两个存储域网络(SAN)来支持光纤通道存储流量,并部署一个InfiniBand网络来支持高性能集群计算,这样会导致企业需要针对不同的应用部署多个不同的网络。部署和管理三类截然不同的网络会给企业带来高昂的投资和运营成本,因此企业迫切希望实现整合。
通过对这三类网络进行仔细技术评估,发现以太网能够满足我们对所有三类网络的大多数要求,但它同时也需要一些额外的功能。IEEE数据中心桥接为以太网提供了基于标准的增强功能,支持将多个网络基础设施整合到一起。
丢包对不同协议的影响有所不同,应用会以不同的方式做出响应:一些应用可以容忍这一情况,通过重新发送所丢数据包得以恢复。以太网能够支持这些情况,但其它应用不能容忍任何丢包情况,要求保证端到端传输没有丢包。通过以太网传输的光纤通道流量(FCoE)就是要求无丢包服务的一个典型示例。为了使以太网能够满足应用的无丢包要求,需要制定一种方法来通过以太网提供无损服务。基于PFC(Priority Flow Control 优先级的流量控制)正是在这种背景下出现。
PFC(Priority-based Flow Control 优先级的流量控制)是IEEE数据中心桥接(Data Center Brighe)协议族中其中一个功能,IEEE数据中心桥接(Data Center Brighe)是一个以太网架构扩展集合,专门用于改进和扩展以太网在数据中心的联网和管理作用。IEEE数据中心桥接主要有两个特征,第一个为以太网扩展,支持将三类网络整合一起;第二个为支持无丢包服务,从而可以支持那些要求保证送达的流量。
基于优先级的流量控制(PFC:Priority-based Flow Control)在IEEE:802.1Qbb标准文档中定义,对传统流控的暂停机制一种增强。与传统的流控机制相比,当出现拥塞时传统流控但会阻止一条链路上的所有流量。而PFC允许在一条以太网链路上创建8个虚拟通道,并为每条虚拟通道指定一个IEEE 802.1P优先等级(cos),允许单独暂停和重启其中任意一条虚拟通道,同时允许其它虚拟通道的流量无中断通过。这一方法使网络能够为单个虚拟链路创建无丢包类别的服务,使其能够与同一接口上的其它流量类型共存。其实PFC就是普通流控功能的一种增强。
报文的格式:
IEEE802.1qbb中定义了,PFC帧的格式如下:

  +----------------+----------------+----------------+-----------------+

     |                     Destination Mac Address(6 octets)               |

     +----------------+----------------+----------------+-----------------+

     |                       Source Mac Address(6 octets)                        |

     +----------------+----------------+----------------+-----------------+

     |                            type/len(2 octets)                            |

     +----------------+----------------+----------------+-----------------+

     |                                 Control opcode(2 octets)                  |

     +----------------+----------------+----------------+-----------------+

     |                         priority_enable_vector(2 octets)                     |

     +----------------+----------------+----------------+-----------------+

     |                             time(2 octets * 8)                      |

     +----------------+----------------+----------------+-----------------+

PFC帧各个字段的定义:

字段名

含义

Destination Mac Address 目的MAC地址域,6字节,要求为01-80- C2-00-00-01。
Source Mac Address 源MAC地址域,6字节,为本设备MAC地址。
type/len 以太网帧长度或类型域,要求为88-08,用于标明本帧的类型为MAC控制帧。
Control opcode MAC控制操作码,2字节。PFC PAUSE帧仅是MAC控制帧的一种,对于PFC PAUSE帧,其在MAC控制帧中的操作码为01-01;
priority_enable_vector 2字节,高字节置0,低字节的每个位代表相应的time[n]是否有效。e[n]代表优先级n,当e[n]为1时,表示time[n]有效;当e[n]为0,表示time[n]无效。
time 包含time[0] 至time[7]的8个数组单元,每个数组单元为2字节。当e[n]为0时,time[n]没有意义。当e[n]为1时,time[n]代表接收站点抑制优先级为n的报文发送的时间,时间的单位为物理层芯片发送512位数据所需要的时间。所以发送一次PFC PAUSE帧,要求对端设备暂停发送的时间长度最长为:65535 ×物理层芯片发送512位数据所需要的时间。
二、技术原理:

整网中FCoE cos3的流量所映射的虚拟通道开启PFC功能,其他虚拟通道保持默认。当出口CISCO设备SW3的port7出现拥塞时达到一定阀值时,数据进入的方向(即上游设备)发送反压信息(XOFF:流量停止信息),上游设备接收到XOFF,会根据反压信息XOFF指示停止发送或延迟发送数据,并将数据存储在本地端口缓存中,如果本地端口缓存消耗超过阈值,则继续向上游反压,如此一级级反压,直到网络终端设备CLIENT1和CLIENT2(这两设备是安装了支持PFC的CNA卡),CLIENT1和CLIENT2会在XOFF报文中指定pause time内暂停发送报文流,从而消除网络节点因拥塞造成的丢包。当拥塞解除后,SW3会发送XON的报文,告诉上游设备SW1和SW2可以把缓存中的报文转发出来,SW1和SW2将缓存中的报转发出去后,也解除了拥塞,这样SW1和SW2也会分别往他们的上游CLIENT1和CLIENT2发送XON报文,CLIENT1和CLIENT2收到XON报文后,又重新发送数据流。这样处理流程就可以使得FCOE存储业务不丢包。
         数据中心的基于优先级流控(PFC:Priority Flow Control)技术就介绍到这里,有什么疑问可以留言进一步交流。

weinxin
DC Farm小程序二维码
扫一扫添加博客小程序
Jim

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:12   其中:访客  7   博主  5

    • avatar wuxinxinggg 3

      来访

      • avatar 站长 5

        换了知更鸟的主题了。

        • avatar 行畔博客 3

          换主题啦?这个也不错

          • avatar 行畔博客 3

            鸟哥的主题,哈哈 :mrgreen:

              • 激劉勇靖 激劉勇靖 Admin

                @行畔博客 本来想自己写一个,写了一半,最近又忙,所以就用这个换个心情呵呵。

              • avatar 匿名 0

                向楼主请教:PFC的包是怎么抓到的呢?工具是用wireshark吗?

                  • 激劉勇靖 激劉勇靖 Admin

                    @匿名 通过将报文镜像到测试仪上抓到的。还是用wireshark来分析 。