ksoftirqd потребляет> 80% ЦП на встроенной платформе - PullRequest
1 голос
/ 28 июля 2010

мы проектируем SOHO роутер на базе процессора MIPS, подключенного к 24-портовому коммутатору.Процессор работает с NAT (настроенным с помощью iptables), правил iptables, dhcp и т. Д. У него нет никакого ускорения H / W для этих функций.При тестировании NAT в режиме полной сетки (то есть один порт WAN, а другие - порт LAN), мы наблюдаем значительное замедление работы системы, особенно консоль реагирует очень медленно, а также происходит потеря пакетов.

«top»показывает, что ksoftirqd потребляет более 80% процессорного времени.

Что может быть причиной такого поведения?Работает ли Linux NAT в пользовательском пространстве?

Ответы [ 2 ]

6 голосов
/ 28 июля 2010

ksoftirqd s потоки ядра вождение ... мягкие IRQ, такие вещи, как TIMER_SOFTIRQ, SCSI_SOFTIRQ, TASKLET_SOFTIRQ, и что относится к вашему делу, NET_TX_SOFTIRQ и NET_RX_SOFTIRQ. Они реализованы в нижних половинах ядра, так как отложенная работа от верхних половин - фактических обработчиков прерываний в драйверах устройств, где задержка является критической.

Фактический обработчик прерываний или аппаратный IRQ для сетевой карты связан с получением данных на устройство как можно быстрее. Он ничего не знает о NAT и другой обработке TCP / IP. Он знает об обработке своей шины (скажем, PCI), специфике карты (кольцевые буферы, регистры управления / конфигурации), DMA и немного об Ethernet. Он передает / получает пакеты (точнее, skbuf s) через очереди в / из нижней половины.

Взгляните на ethtool(8), если вы еще этого не сделали. Посмотрите, можете ли вы настроить аппаратное обеспечение / драйверы для выгрузки контрольной суммы / сегментации и т.д.

Надеюсь, это немного поможет.

Edit:

Как уже упоминалось в комментариях, проверьте оборудование NIC для уменьшения прерываний и драйвер поддержки для поддержки NAPI .

1 голос
/ 28 июля 2010

ksoftirqd - обработчик IRQ.Вы можете проверить / proc / interrupts , чтобы увидеть, какой IRQ загружен.

Процессор перегружен: используйте более сильную модель или используйте более простые правила iptables.Linux NAT запускается в пространстве ядра, ksoftirqd - в пространстве ядра.

...