队头阻塞

队头阻塞(英語:Head-of-line blocking,缩写:HOL blocking)在计算机网络的范畴中是一种性能受限的现象。它的原因是一列的第一个数据包(队头)受阻而导致整列数据包受阻。例如它有可能在缓存式输入的交换机中出现,有可能因为传输顺序错乱而出现,亦有可能在HTTP流水线中有多个请求的情况下出现。

交换机中的队头阻塞

一个交换机有可能由缓存式输入端口、交换架构以及缓存式的输出端口所组成。如果在输入端口处使用了先進先出(FIFO)的策略,那么就只有最先进入的数据包可以被处理。而此时如果最先进入的数据包由于目标输出端口正忙而无法被处理的话,那么更晚到达的数据包就没有办法被处理(即便是更晚到达的数据包的目标输出端口并没有处于忙碌的状态)。输出正忙的情况有:

  • 存在输出的竞态关系;
  • 或者更常见的情况是输出缓存已满,从而导致了阻塞现象(例如多个输入的数据传输速率超过了输出的传输速率)。

如果没有队头阻塞的话,新到达的数据包就有可能绕开被阻碍的数据包而被导向它们各自的(没有处于阻塞状态的)目标输出端口了。这种现象有可能在缓存式输入的系统中对性能造成极大的影响。

解决队头阻塞

解决这个问题的其中一个方法是使用虚拟输出队列[1]。只有在缓存式输入的交换机中才会出现队头阻塞的情况。如果交换机内部的带宽足够的话,缓存输入就是没有必要的了——所有的缓存都可以在输出处被处理,从而也避免了队头阻塞。这样的无缓存式输入架构在中小型规模的以太网交换机中非常常见。

参考资料

  1. ^ Nick McKeown; Adisak Mekkittikul; Venkat Anantharam; Jean Walrand. Achieving 100% Throughput in an Input-Queued Switch (PDF). IEEE Transactions on Communications. August 1999, 47 (8): 1260–1267 [2016-03-19]. doi:10.1109/26.780463. (原始内容 (PDF)存档于2022-06-24).