一、PAUSE帧概念
PAUSE帧是以太网在全双工模式下,MAC控制子层发出的流量控制帧。IEEE802.3协议为MAC控制子层提供了一个全双工流量控制结构框架,MAC控制子层是介于逻辑链路控制子层和介质访问控制子层间的可选功能。
交换控制电路要防止缓冲区溢出,可以利用MAC控制子层来控制以太网介质访问控制子层的操作。当已用缓冲区容量达到一个预先设定的阈值时,端口向全双工链路对方发出停止发送数据的请求,这个请求通过MAC控制子层产生的控制帧实现。
同样,端口可以接收由其他站点MAC控制子层产生的控制帧,控制帧夹在客户数据帧流中发送,接收方会根据帧的内容将控制帧分离出来,提交到MAC控制子层中的流量控制模块,流量控制模块解析控制帧的内容,提取帧中的控制参数,根据控制参数决定暂停发送的时间。
PAUSE帧中携带了时间参数。收到PAUSE帧的设备通过简单的解析,就可以确定停止发送的时长。对端设备出现拥塞的通常情况下,本端端口通常会连续收到多个PAUSE帧。只要对端设备的拥塞状态没有解除,相关的端口就会一直发送PAUSE.
二、PAUSE帧格式
PAUSE帧的帧长为64字节,结构非常简单。如下图所示:
PAUSE帧的目的MAC地址是保留的MAC地址0180-C200-0001(多播地址,第一个字节最低位为1的所有地址),源MAC则是发送PAUSE帧的设备的MAC地址。
Length/Type域是十六进制数0x8808.
MAC Control Opcode域的值是0x0001.其实,PAUSE帧是MAC控制帧的一种,其他类型的MAC控制帧使用不同的opcode值,此处不做详细说明。后面会谈到和PAUSE类似的PFC帧,PFC帧中该域的取值是0x0101.
MAC Control Parameters域需要根据MAC Control Opcode的类型来解析。对于PAUSE帧而言,该域是个2字节的无符号数,取值范围是0~65535.该域的时间单位是pause_quanta,每个pause_quanta相当于512比特时间
以太网PAUSE/PFC帧格式
以太网控制帧PAUSE帧和正常数据帧格式的区别是目的地址是全局地址且长度/类型是固定的0x8808 以识别是否是PAUSE/PFC帧。对PFC帧又分为8个优先级分类,每个2字节;以及Class-Enable-Ventor 低8bit是控制class0~7 是否反压的使能bit位。
三、PAUSE Time
当一个设备从对端设备接收到PFC XOFF时,它将需要一些时间(称为响应时间)来排出已经在发出的数据包。IEEE 802.3 31B.3.7定义了在一个XOFF时需要等待多少个pause_quanta。一个pause_quanta等于以MAC的数据速率传输一个帧的512位所需要的时间。是发送端来设置的,如下图所示,在不同的运行速度下,需要采取的pause_quanta不一样。需要注意的是对于10Gb/s,如果是10GBase-T (双绞线传输)协议中quanta值为74,如果不是10Gbase-T,比如10Gbase-R (光纤传输)quanta 值为60,这里取两者的平均值。此外对于800Gb/s (协议标准是以太网技术联盟制定的)未看quanta 介绍,这里定义400G的两倍,结合25Gb/s以上的速率与quanta值的倍数关系,可以认为1810 对于800G是足够的。
Pause quanta
PAUSE 帧这个对于MAC 上层模块的Buffer 的headroom设置至关重要,用以吸收路径中流水,使得发送的数据包正常传输且不会丢弃。
PAUSE 处理需要注意:
- PAUSE帧发送不能中断当前的完整报文。
- 新的PAUSE报文暂停时间会覆盖上一个暂停时间。
- 接受侧Pause time down to 0 OR receive XON帧(quanta值为0)都可以使得XOFF->XON。
- PAUSE帧发送间隔需由内部counting 控制,防止pause期间占用过多的端口带宽。
- PAUSE帧的quanta 寄存器可配置,且复位值一般为0XFFFF。