Есть ли у кого-нибудь какие-либо данные или базовые вычисления, которые могут дать ответ, когда требуется объединение кадров (NAPI) и когда достаточно одного прерывания на кадр?
Мое оборудование: IBM BladeServer HS22, аппаратное обеспечение Broadcom 5709 Gigabit NIC (MSI-X) с двумя четырехъядерными процессорами Xeon E5530. Основное назначение - прокси-сервер Squid. Коммутатор - хорошая серия Cisco 6500.
Наша основная проблема заключается в том, что в периоды пиковой нагрузки (трафик 100 Мбит / с, всего 10 000 ппс) эта задержка и потеря пакетов увеличиваются. Я сделал много настроек и обновил ядро до 2.6.38, и это улучшило потерю пакетов, но задержка все еще мала. Пинги спорадические; прыжки даже до 200 мс в локальной сети Gbps. Средний ответ Squid изменяется с 30 мс до 500 + мс, хотя загрузка процессора / памяти в порядке.
Прерывания достигают примерно 15 000 в секунду во время пика. Ksoftirqd не использует много процессора; Я установил irqbalance для балансировки IRQ (по 8 для eth0 и eth1) по всем ядрам, но это не сильно помогло.
Сетевые адаптеры Intel, похоже, никогда не сталкивались с подобными проблемами, но из-за факта наличия блейд-системы и аппаратного обеспечения с фиксированной конфигурацией мы застряли с Broadcoms.
Все указывает на NIC как на главного виновника. Лучшая идея, которая у меня есть сейчас, - попытаться уменьшить количество прерываний, сохраняя при этом как низкую задержку, так и высокую пропускную способность.
К сожалению, bnx2 не поддерживает adaptive-rx или tx.
NAPI против Адаптивные Прерывания нити ответа обеспечивает отличный вид прерываний умеренности , но нет информации бетонной о том , как рассчитать оптимальный Ethtool COALESCE настройки для данного временного решения. Есть ли лучший подход, чем просто метод проб и ошибок?
Нужна ли вышеупомянутая рабочая нагрузка и конфигурация оборудования даже NAPI? Или он должен быть в состоянии жить по одному прерыванию на пакет?