У меня есть сервер с операционной системой 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 собирается «эй! Эй! Эй! Эй!» сообщая вашему процессору, что он требует внимания.
Чрезмерно аппаратные прерывания обычно вызваны плохими драйверами. Итак, первое, на что я хотел бы обратить внимание, это драйверы вашей сетевой карты.