Назад | Перейти на главную страницу

Переключение контекста ЦП в секунду увеличивается с увеличением сетевого трафика

У меня есть сервер с операционной системой ubuntu, на нем есть несколько приложений, которые работают с сетью. С увеличением сетевого трафика переключение контекста ЦП и прерывания также увеличиваются на 40-60 Кбит / с. Что я должен исправить оптимизацию ядра, возможно оптимизацию NIC или что?

ОБНОВИТЬ

Прежде всего, спасибо за ответы. У меня 8 CPU. Моя кошка / 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 Gigabit Ethernet Driver bnx2 v2.1.6 (7 марта 2011 г.)

ОБНОВЛЕНИЕ 2

Я сделал: ethtool -k eth0

И посмотрите: large-receive-offload: off

Как на нем заработать?

Спасибо.

Я предполагаю, что это законные прерывания из-за нагрузки на сеть, а не из-за проблем с оборудованием / драйверами. Так:

Вы можете инвестировать в TCP-разгрузка сетевая карта (TOE), если вы имеете дело с TCP-трафиком. Он выполняет некоторую обработку TCP / IP в микросхеме сетевой карты и вызывает меньше прерываний (и переключений контекста). Проверьте, поддерживает ли это ваше ядро ​​/ ОС / приложение / трафик.

Или взгляните на Большая разгрузка приема (LRO), который представляет собой легкий подход.

Это действительно огромное количество прерываний. Однако это часто является проблемой APIC.

cat / proc / interrupts

должен сказать. Если вы видите, что ваши прерывания попадают только в CPU0, попробуйте

echo "2"> / proc / irq / "somenumber" / smp_affinity

Что должно подтолкнуть irqs процесса somenumber к CPU2.

Аппаратные прерывания - нормальная часть работы компьютера. Ваш NIC собирается «эй! Эй! Эй! Эй!» сообщая вашему процессору, что он требует внимания.

Чрезмерно аппаратные прерывания обычно вызваны плохими драйверами. Итак, первое, на что я хотел бы обратить внимание, это драйверы вашей сетевой карты.