Hardware Flow Control:
- Hardware flow control in ESXi manages network traffic by pausing and resuming data transmission between devices to prevent packet loss from congestion.
- It is typically enabled by default and configured through the ESXi driver, though it can be controlled using command-line tools like esxcli for manual adjustments or to make settings persistent.
- Pause Frames are related to Ethernet flow control and are used to manage the pacing of data transmission on a network segment.
- Sometimes, a sending node (ESXi host, switch, and so on) may transmit data faster than another node can accept it. In this case, the overwhelmed network node can send pause frames back to the sender, pausing the transmission of traffic for a brief period of time.
Priority Flow Control
- Priority Flow Control (PFC) is an extension of the standard Ethernet flow control mechanism (IEEE 802.3x) that operates on individual traffic priorities rather than the entire network link
- Selective Pausing: Unlike traditional flow control which pauses all traffic on a link when congestion occurs, PFC allows the ESXi host or switch to apply pause functionality to specific classes of traffic (defined by IEEE 802.1p CoS values). This means that lower-priority, non-loss-sensitive traffic can be temporarily halted without affecting high-priority, time-sensitive traffic flowing on the same physical link.
- Lossless Ethernet: The main goal of PFC is to prevent packet loss due to congestion in data center bridging (DCB) networks, which is crucial for storage protocols that assume a lossless network fabric.
- Hardware Support: PFC functionality is dependent on the network adapter hardware and driver support within ESXi. The configuration typically involves enabling Data Center Bridging Exchange (DCBX) protocols to ensure the ESXi host and the connected physical switch agree on the PFC settings.
- For ESXi configuration, PFC usually requires explicit configuration and coordination on both the ESXi host and the connected physical switch ports to ensure a matching configuration.
- In summary, PFC in ESXi provides a granular, hardware-level mechanism to manage network congestion, ensuring zero packet loss for critical workloads by selectively pausing traffic flows based on priority
VMware ESXi 7.x
VMware ESXi 8.x
** Before proceeding of enabling the hardware flow control, please make sure the drivers and firmware of the ethernet cards on the hypervisor are according to the Broadcom's compatibility guide: Broadcom Compatibility Guide
To enable the hardware flowcontrol, following is the command:
1. List pause parameters of all NICs
esxcli network nic pauseParams list
2. Set pause parameters for a NIC
esxcli network nic pauseParams set
Cmd options:
-a|--auto=<bool> Enable/disable auto negotiation.
-n|--nic-name=<str> Name of NIC whose pause parameters should be set. (required)
-r|--rx=<bool> Enable/disable pause RX flow control.
-t|--tx=<bool> Enable/disable pause TX flow control.
Example: esxcli network nic pauseParams set -n vmnic2 --rx=true --tx=true
* If the physical NIC interface is in Down state, you will not be able to enable the pauseParams on that interface *
To make the changes persistent across reboots:
- Modify the local.sh file located at the /etc/rc.local.d/ directory
- Add the command to be executed above the line exit 0
- Reference KB relating to config to stay persistent across reboots: Persistent across reboots
Configuration of Priority Flow Control:
esxcli system module parameters list --module <driver_name>
esxcli system module parameters set -m nmlx5_core -p "pfctx=0x08 pfcrx=0x08 trust_state=2"esxcli system module parameters set -m nmlx5_rdma -p "dscp_force=26"
If these configurations are not setup on the host or if the NIC drivers doesn't support the PFC or if physical switch (ESXi NICs connecting to physical switch ports) ports doesn't support PFC, then PFC is in a disabled state