Bootstrap

PFC原理与PFC常见问题

  • PFC是一种流控的手段,是影响和生效在交换机上的行为,核心原理是下游控制上游某个通道开启和停止发送数据包,控制方式是发送PFC Pause和Resume帧,触发时机是根据下游SW的ingress的队列数量是否达到某个阈值
  • PFC(Priority-based Flow Control,基于优先级的流量控制)
  • PFC允许在一条以太网链路上创建8个虚拟通道(优先级队列),为每条虚拟通道指定一个优先等级,是基于Priority Group的也就是很多流在同一个优先级队列。分别实现独立的PAUSE机制。
queue 0
queue 1
queue 2
queue 3
queue 4
queue 5
queue 6
queue 7
server1
sw1_queue0
sw2_queue0
server2
sw1_queue1
sw2_queue1
sw1_queue2
sw2_queue2
sw1_queue3
sw2_queue3
sw1_queue4
sw2_queue4
sw1_queue5
sw2_queue5
sw1_queue6
sw2_queue6
sw1_queue7
sw2_queue7
  • 如果交换机使能PFC功能,向上游SW发送PFC Pause帧(只影响某个虚拟通道),上游某个优先级通道暂停发送报文。暂停时间由PFC Pause帧携带。逐级反压上游,快速响应。
  • 如果某个优先级队列被暂停,那么这个channel里面的所有流都会受影响,所以有一个不公平的问题
  • DSCP 差分服务代码点和PFC队列结合可以提供很多可能性
  • PFC是根据下游的ingress(输入)端口队列长度进行触发,交换机支持设定每个优先级的门限XOFF,达到门限XOFF之后发送pause。 相比于ECN是egress出口方向的参数进行处理的
  • 交换机处理发送Pause之后在途报文处理方式,预留一定的buffer处理,这个buffer大小只要足够,可以保证缓存时钟不会溢出,可以实现无损网络
  • 下游向上游发送RESUME帧通知重新开始发送
  • PFC存在的问题:PFC风暴、PFC死锁、不公平
  • PFC可以配合ECN,在egress方向发现问题后设置合适的阈值,影响接收端发送CNP报文提前影响发送端减低速率,从而可以做到在PFC可能发生前就降低速率,减少拥塞和一定程度避免PFC风暴
  • PFC风暴是什么?如果多级拓扑下,所有上游的某个队列都会被影响,从而快速扩散成风暴(在蓝牙mesh的技术里面也有类似的广播风暴)
  • PFC死锁是什么?PFC Pause发送之后,恢复依赖于发送RESUME。恢复依赖于交换机的ingress的队列占用降低,ingress的降低依赖于egress部分能够发送出去数据,如果egress的下游SW2在网络拓扑中形成类似环路,下游SW2也会收到pause,那么SW2的egress会阻塞,进一步造成SW2的ingress阻塞,SW2发送pause给SW1,造成SW1的egress阻塞,进一步造成SW1的ingress阻塞,那么SW1就无法恢复,就不会给SW1上游发送RESUME
PFC Pause
PFC Pause
PFC Pause
sw0
sw1
sw2
  • PFC死锁有不少解决办法,比如watchdog监控、结合ECN避免
PFC Pause
server1
sw1
sw2
server2

参考链接:
https://asterfusion.com/priority-based_flow_control_pfc/

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;