多队列网卡是一种技术,最初是用来解决网络IO QoS (quality of service)问题的,后来随着网络IO的带宽的不断提升,单核CPU不能完全处满足网卡的需求,通过多队列网卡驱动的支持,将各个队列通过中断绑定到不同的核上,以满足网卡的需求。
常见的有Intel的82575、82576,Boardcom的57711等,下面以公司的服务器使用较多的Intel 82575网卡为例,分析一下多队列网卡的硬件的实现以及linux内核软件的支持。
1.多队列网卡硬件实现
图1.1是Intel 82575硬件逻辑图,有四个硬件队列。当收到报文时,通过hash包头的SIP、Sport、DIP、Dport四元组,将一条流总是收到相同的队列。同时触发与该队列绑定的中断。

图1.1 82575硬件逻辑图
2.什么是RSS
RSS(Receive Side Scaling)是一种能够在多处理器系统下使接收报文在多个CPU之间高效分发的网卡驱动技术。
- 网卡对接收到的报文进行解析,获取IP地址、协议和端口五元组信息
- 网卡通过配置的HASH函数根据五元组信息计算出HASH值,也可以根据二、三或四元组进行计算。
- 取HASH值的低几位(这个具体网卡可能不同)作为RETA(redirection table)的索引
- 根据RETA中存储的值分发到对应的CPU
下图描述了完整的处理流程:

本文介绍了多队列网卡技术及其在解决网络IO QoS问题上的应用,重点讲解了Intel 82575网卡的硬件实现。RSS作为一项能够提升多处理器系统中接收报文分发效率的网卡驱动技术,通过解析报文信息并计算HASH值进行负载均衡。在DPDK中,RSS功能可以根据端口接收队列进行报文分发,并且RETA可动态配置,以实现灵活的负载调整。
最低0.47元/天 解锁文章
268

被折叠的 条评论
为什么被折叠?



