队首阻塞(Head of Line Blocking, HOL)是一种出现在缓存式通信网络交换中的一种现象,其交换结构通常由缓存式FIFO输入端、交换结构(Switch Fabric)、FIFO输出端构成。
HOL阻塞用一个现实生活中的例子说明,就如同你在一条单车道的马路上右转,但是前面有直行车,此时虽然右行线已经空闲,但是你也只能等待。
当在相同的输入端口上到达的分组报文被指向不同的输出端口时,就会出现HOL阻塞现象。
如上图所示,端口 1向端口 3 转发 100%带宽的流量 a,同时端口 2 向端口 3 转发 50%带宽的流量 b,向端口 4 转发 50%带宽的流量 C。如果没有任何预防机制,转发到端口 3 的流量会因为拥塞耗尽系统的共享 buffer,导致 Head-of-line (HOL) blocking,影响非拥塞端口的正常转发。云合芯片TM 提供 per-port per-queue 配置的 AOQ MAX (Accounting Output Queue)。当出端口队列从Share pool 中分配的 buffer 超过此队列的 AOQ MAX 门限时,直接对报文执行尾丢弃,以此防止 HO的发生。
造成HOL阻塞的根源是向所有转发方向之后一个队列,无法在不同的转发方向之间进行调度。如果向不同的转发方向有独立的队列,则可以通过在不同队列间的轮询调度,优化报文转发,避免HOL阻塞。
克服HOL阻塞的方法是使用VOQ(Virtual Output Queue),其思想是在输入端将发送到不同端口的分组报文虚拟成不同的队列,并且彼此互不影响,这样一来即使队首分组报文被阻塞,也不会影响发送到其他输出端口的分组报文转发。
除了VOQ技术之外,还有许多解决HOL阻塞的算法,如神经网络、iSLIP等。