Server computers often include one or more input/output (I/O) devices. For example, a server computer may include one or more I/O adapter devices for communicating with a network and/or direct-attached storage device. Each I/O device may communicate over multiple, possibly asynchronous interfaces, such as PCI Express (PCIe) and/or Ethernet. For example, a host server computer may send I/O transactions over a PCIe bus to the I/O adapter device, and the I/O adapter device may send those I/O transactions over an Ethernet cable for processing by another server.
The physical resources of the I/O adapter device, however, may be limited. For example, the I/O device may have a limited amount of fast memory for storing an I/O transaction being processed by the I/O device. Thus several or even as few as one I/O transaction may occupy all available memory on the I/O adapter device, causing congestion and delay in the processing of the I/O transactions.
Moreover, congestion and delay, due to limited physical resources on the I/O adapter device, may be further exacerbated in I/O devices implementing virtualized interfaces. An I/O adapter device may implement a virtualized interface, such as for example Single Root I/O Virtualization (SR-IOV). A virtualized interface allows the I/O adapter device to present itself as multiple virtual devices to the host server computer. Virtual machines running on the host server computer may then use a virtual device on the I/O adapter device as if the virtual device were a physical device. When multiple virtual machines attempt to use the I/O adapter device, they may experience intermittent and excessive delays.