文章目录
- PFC
- PFC Storm
PFC
PFC是一种流量控制机制,用于保证网络中的无损传输,常用于RDMA网络中,以下具体介绍其机制。
如图所示,发送方的出端口发送数据包给接收方的入端口。在发送方的出端口,数据包在至多八个队列中排队发送,每个队列对应于一个优先级(这八个队列的数据发送是互相独立的,可以分开控制)。在接收端口,报文在相应的入端口队列中进行缓冲。
一旦入端口队列的长度大于一个特定的阈值(XOFF),接收方发送一个PFC暂停帧给对应的上游出队列。在出队列收到暂停帧后,它停止发送报文。一个暂停帧携带哪个优先级的通道需要被暂停和暂停的时间信息。一旦入队列长度低于另一个阈值(XON),接收方就发送一个带有零暂停时间的暂停帧来恢复数据的传输。
入端口需要为每个优先级通道保留一部分的缓冲空间,称之为headroom。其至少为BW*RTT,即需要为on-flight的报文保留的缓冲空间(当接收方发送暂停帧时,on-flight的数据大小为BW*RTT/2;当暂停帧从接收方传输到发送方的过程中,发送方又发送了大小为BW*RTT的数据)。
PFC是链路层协议,用于控制两个直接在链路层相连的端口之间的数据传输
PFC Storm
介绍一种PFC Storm,起源于NIC的接收pipeline出现的bug,这个bug放慢了NIC的接收过程,接收缓冲区就会不断地被无法及时处理的报文填满,结果就是这个NIC不断地发送PFC暂停帧。PFC Storm形成流程如下:
- 服务器0的NIC不断地向其ToR交换机发送暂停帧
- ToR交换机暂停其所有端口的接收,包括所有到Leaf交换机的上游端口
- Leaf交换机暂停Spine交换机
- Spine交换机暂停其余的Leaf交换机
- 其余的Leaf交换机暂停它们的ToR交换机
- ToR交换机暂停连接到它们的服务器
在这种情况下,一个单独的出问题的NIC就可以阻塞整个网络的传输。