随着网络流量的增加,每秒 CPU 上下文切换次数也会增加

随着网络流量的增加,每秒 CPU 上下文切换次数也会增加

我的服务器装有 ubuntu 服务器操作系统,上面有一些与网络相关的应用程序。随着网络流量的增加,CPU 上下文切换和中断也以每秒 40 - 60 k 的速度增加。我必须修复内核优化、NIC 优化还是其他什么?

更新

首先感谢您的回答。我有 8 个 CPU。我的 cat /proc/interrupts

          CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU7       
  0:    6938741    6966303    6934714    6881839    6895772    6883046    6952545    6909960   IO-APIC-edge      timer
  1:          0          0          1          0          0          1          1          1   IO-APIC-edge      i8042
  8:          0          1          0          0          0          0          0          0   IO-APIC-edge      rtc0
  9:          0          0          0          0          0          0          0          0   IO-APIC-fasteoi   acpi
 12:          0          1          0          0          1          1          2          1   IO-APIC-edge      i8042
 16:          0          0          0          0          0          0          0          0   IO-APIC-fasteoi   ehci_hcd:usb1, uhci_hcd:usb2
 17:          0          0          0          0          0          0          0          0   IO-APIC-fasteoi   uhci_hcd:usb3
 18:          0          0          0          0          0          0          0          0   IO-APIC-fasteoi   uhci_hcd:usb4
 19:          0          0          0          0          0          0          0          0   IO-APIC-fasteoi   uhci_hcd:usb5
 21:         21         23         22         21         23         21         23         21   IO-APIC-fasteoi   ipmi_si
 22:          3          5          6          6          2          5          3          6   IO-APIC-fasteoi   uhci_hcd:usb6, hpilo
 23:          0          0          0          0          0          0          0          0   IO-APIC-fasteoi   radeon
 41:     275729        555        587        549     275294        563        583        600   PCI-MSI-edge      cciss0
 42:          2          0          2          1          1          1          2          1   PCI-MSI-edge      cciss1
 46:   31600723   31636789   31668261   31721092   31643480   31719981   31650284   31692948   PCI-MSI-edge      eth0
NMI:          0          0          0          0          0          0          0          0   Non-maskable interrupts
LOC:   42250721   42318004   19164905   20751945   32012455   25335850   15889990   15935085   Local timer interrupts
SPU:          0          0          0          0          0          0          0          0   Spurious interrupts
PMI:          0          0          0          0          0          0          0          0   Performance monitoring interrupts
IWI:          0          0          0          0          0          0          0          0   IRQ work interrupts
RES:  104005816   96594384   40149041   34906154   77175689   55787936   28455228   25633969   Rescheduling interrupts
CAL:     204860     543304    1318717    1176681     431344     876239    1046465    1257472   Function call interrupts
TLB:     308034     229917     230598     299353     362103     478994     256456     212019   TLB shootdowns
TRM:          0          0          0          0          0          0          0          0   Thermal event interrupts
THR:          0          0          0          0          0          0          0          0   Threshold APIC interrupts
MCE:          0          0          0          0          0          0          0          0   Machine check exceptions
MCP:       1263       1263       1263       1263       1263       1263       1263       1263   Machine check polls
ERR:          0
MIS:          0

我有很大:

 RES:  104150407   96747853   40291367   35052019   77327041   55940217   28595113   25775538   Rescheduling

这取决于什么?

我的网卡:bnx2:Broadcom NetXtreme II 千兆以太网驱动程序 bnx2 v2.1.6(2011 年 3 月 7 日)

更新2

我做了:ethtool -k eth0

并参见:large-receive-offload: off

我该如何做呢?

谢谢。

答案1

我认为这些是由于网络负载而导致的合法中断,而不是硬件/驱动程序问题导致的。因此:

您可以投资TCP卸载网卡(TOE),如果您处理 TCP 流量。它在网卡芯片中执行一些 TCP/IP 处理,并引发较少的中断(和上下文切换)。检查您的内核/操作系统/应用程序/流量是否支持它。

或者,看看大型接收卸载(LRO),这是一种轻量级方法。

答案2

硬件中断是计算机操作的正常部分。您的 NIC 会发出“嘿!嘿!嘿!嘿!”的声音,告诉您的 CPU 它需要注意。

过多的硬件中断通常是由不良驱动程序引起的。因此,我首先要检查的是您的 NIC 驱动程序。

答案3

这确实是大量的中断。不过,这通常是 APIC 问题。

猫/ proc /中断

应该会告诉你。如果你只看到中断到达 CPU0,请尝试

回显“ 2”> / proc / irq /“ somenumber” / smp_affinity

这应该将进程“somenumber”的中断请求推送到 CPU2 上。

相关内容