网络加速技术

下面的文章介绍几种硬件网络加速技术:

RSS

Receive Side Scaling利用多核能力加速网络包的处理。

                                     RSS使用前后CPU负载对比

网络加速技术
原来的方式是一个核负责处理网络包,处理完之后通过中断方式通知需要这些网络包的应用在的CPU。这种方式会因为单核处理能力称为整个网络处理的瓶颈。如上图所示。

为了减少锁竞争,一个核负责几个队列。RSS通过从网络包包头(header)提取e.g.(源地址目的地址)通过Toeplitz算法计算32-bit哈希码,提取LSB(最小有效位)作为索引(Index),并根据RSS转发表(RSS Direction Table)转发至某个队列。
如下图所示:

网络加速技术
通常相同目的地的包都会转发到同一个队列,因此被同一核处理,因此核亲和性加并行处理能够提高网络包的处理速度。

现代NIC的网络包处理都是批处理的,只有处理包达到一定数量或时间才会产生一次系统中断,这种方法称为中断调制(Interrupt Moderation)

Flow Director

RSS存在一定的问题,就是接受这些包的应用不一定和处理包的应用在同一个CPU里面。为了补充这个RSS的这个缺点,Flow Director技术出现了。在服务器设计中有一种叫做Session persistence,跟这个技术的思想很像。一个数据流应该指定到某个核处理,这个核运行的需要这个数据流的应用。

要指定哪个核来处理数据流,有两种方式:

手动模式 --External Programmed

简称EP模式,由程序指定。当系统管理员了解数据流的特点可能喜欢这个。

自动模式 – Application Targeting Routing

简称ATR模式,通过对数据包进行抽样,来探测数据包可能来自于哪个CPU。通过数据流的特点不可预测时使用这个模式,这个模式也是默认的模式。

为了使数据流(应该就是连接的意思)和CPU编号建立Map关系,可以在多个方面获取信息,e.g.出去的数据包

通常ATR模式下,通过取样来填充数据流和CPU编号的映射表(Perfect-Match Table)。数据流通过数据包包头计算出的Hash值来表示,每次数据包进来之后,数据包的包头提取出来计算Hash值,如果匹配到映射表的表项,那这个网络包就会发到这个表项记录的CPU;否则,回退到普通RSS模式。

数据流的标识需要比较大的表项空间,Intel的映射表是8K个。

Reference List

  1. https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/intel-ethernet-flow-director.pdf