摘要: 中断: 当网卡接收到数据包后,会触发硬中断,通知CPU来收包。硬中断是一个CPU和网卡交互的过程。这其实会消耗CPU资源。特别是在使用速度极快的万兆网卡 之后,大量的网络交互使得CPU很大一部分资源消耗在网卡中断处理上。此时,瓶颈并不在网卡,而是在CPU上。因此,现在的网卡都采用多队列的技术,用于 充...
中断:
当网卡接收到数据包后,会触发硬中断,通知CPU来收 包。硬中断是一个CPU和网卡交互的过程。这其实会消耗CPU资源。特别是在使用速度极快的万兆网卡之后,大量的网络交互使得CPU很大一部分资源消耗在 网卡中断处理上。此时,瓶颈并不在网卡,而是在CPU上。因此,现在的网卡都采用多队列的技术,用于充分利用多核心CPU。
SMP IRQ affinity
为了防止多个设置发送相同的中断, Linux设计了一套中断请求系统, 使得计算机系统中的每个设备被分配了各自的中断号, 以确保它的中断请求的唯一性. 从2.4 内核开始, Linux改进了分配特定中断到指定的处理器(或处理器组)的功能. 这被称为SMP IRQ affinity, 它可以控制系统如何响应各种硬件事件. 允许你限制或者重新分配服务器的工作负载, 从而让服务器更有效的工作.。
以网卡中断为例,在没有设置SMP IRQ affinity时, 所有网卡中断都关联到CPU0, 这导致了CPU0负载过高,而无法有效快速的处理网络数据包,导致了瓶颈。 通过SMP IRQ affinity, 把网卡多个中断分配到多个CPU上,可以分散CPU压力,提高数据处理速度。
RPS和RFS
RPS(Receive Packet Steering)
RFS主要是把软中断的负载