PFC (Priority Flow Control)

An enhancement of Pause Frame. Similar to pause frame but instead it allows to pause based on priority/class.

[!important]
Priority/class is just a way to categorise. There will be some priority that's "lossless" which means it will be sending pause frame. "Lossy" priority will be dropping instead of pausing as it don't care if it's need to pause.

PFC frame only be send out for the lossless priority. The number of priority ranged from 0 to 7

[!danger]
PFC and Pause Frame does not store in prio queue ingress or egress buffer. Instead will be consumed directly.

Pasted image 20250303125056.png

Mechanism to create loss-less network by pausing data from the sender when buffer exceeds certain threshold (XOFF).

When the buffer doesn't exceed anymore, it enables the buffer to go through again (XON)

For example in this case,

  1. if traffic sends out from Switch 1 prio 0 -> Switch 2 prio 2. And buffer queue of switch 2 reaches XOFF:
    • Switch 2 prio 2 will sends out PFC frame because it's lossless
    • However Switch 1 prio 0 receives this PFC frame and will ignore, continue to send traffic
    • So it's important for lossless to communicate with lossless prio only.
  2. IF traffic sends out from Swtich 1 prio 2 -> Switch 2 prio 2 And buffer queue of switch 2 reaches XOFF:
    • Switch 2 prio 2 will sends out PFC frame because it's lossless
    • Switch 1 prio 2 will receive the frame and pause itself
      • It only let sender know to pause when this switch is congested (reaches XOFF threshold) as a result, sender will pause its egress port

So during the first PFC frame from Switch 2 to Switch 1, any packets will arrive to Headroom Buffer. Also see: How a port works

Pasted image 20250303131440.png

Note that: Normally we keep it consistent by only letting the same prio talk to each other

[!danger]
By default, since we have multi prio, the XOFF threshold will be /8 since all the prio share the same bandwidth.