Какие нагрузки сети требуют опроса NIC против прерываний?


18

Есть ли у кого-нибудь какие-либо данные или базовые вычисления, которые могут дать ответ, когда требуется объединение кадров (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? Или он должен быть в состоянии жить по одному прерыванию на пакет?


Должно быть, это сложный вопрос ... Спасибо за награду, @Holocryptic! Я пробовал некоторые настройки "ethtool -c" для объединения, но пока никаких заметных отличий.
Вим Керхофф,

Нет проблем. Я просто видел, как он там задержался на пару дней, и это казалось хорошим вопросом. Надеюсь, у кого-то есть что-то для вас.
Голокриптик

Еще одно обновление ... мы перешли на blade-серверы IBM HS23 с сетевыми картами Emulex 10 Гбит / с. На этой неделе мы набрали более 800 000 пакетов в секунду, без падений. Нам пришлось много настраивать (исправлять драйверы ядра Linux), чтобы сбалансировать нагрузку IRQ, но теперь это работает фантастически.
Вим Керхофф

Ответы:


6

Отличный вопрос, который заставил меня кое-что почитать, чтобы попытаться понять это. Хотел бы я сказать, что у меня есть ответ ... но, может быть, некоторые намеки.

Я могу, по крайней мере, ответить на ваш вопрос: «Должно ли оно быть в состоянии жить по одному прерыванию на пакет». Я думаю, что ответ да, на основе очень загруженного брандмауэра, к которому у меня есть доступ:

Выход Sar:

03:04:53 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
03:04:54 PM        lo     93.00     93.00      6.12      6.12      0.00      0.00      0.00
03:04:54 PM      eth0 115263.00 134750.00  13280.63  41633.46      0.00      0.00      5.00
03:04:54 PM      eth8  70329.00  55480.00  20132.62   6314.51      0.00      0.00      0.00
03:04:54 PM      eth9  53907.00  66669.00   5820.42  21123.55      0.00      0.00      0.00
03:04:54 PM     eth10      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:04:54 PM     eth11      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:04:54 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:04:54 PM      eth2 146520.00 111904.00  45228.32  12251.48      0.00      0.00     10.00
03:04:54 PM      eth3    252.00  23446.00     21.34   4667.20      0.00      0.00      0.00
03:04:54 PM      eth4      8.00     10.00      0.68      0.76      0.00      0.00      0.00
03:04:54 PM      eth5      0.00      0.00      0.00      0.00      0.00      0.00      0.00
03:04:54 PM      eth6   3929.00   2088.00   1368.01    183.79      0.00      0.00      1.00
03:04:54 PM      eth7     13.00     17.00      1.42      1.19      0.00      0.00      0.00
03:04:54 PM     bond0 169170.00 201419.00  19101.04  62757.00      0.00      0.00      5.00
03:04:54 PM     bond1 216849.00 167384.00  65360.94  18565.99      0.00      0.00     10.00

Как вы можете видеть, учитывается очень большое количество пакетов в секунду, и на этой машине не было выполнено никаких специальных настроек ethtool. Ох ... Чипсет Intel, хотя. : \

Единственное, что было сделано, - это ручная балансировка irq с / proc / irq / XXX / smp_affinity для каждого интерфейса. Я не уверен, почему они решили пойти по этому пути, а не с irqbalance, но, похоже, это работает.

Я также подумал о математике, необходимой для ответа на ваш вопрос, но я думаю, что слишком много переменных. Итак ... Подводя итог, на мой взгляд, ответ - нет, я не думаю, что вы можете предсказать результаты здесь, но при достаточном сборе данных вы сможете настроить его на лучший уровень.

Сказав все это, я чувствую, что вы как-то привязаны к аппаратному обеспечению ... как в какой-то микропрограмме или ошибке взаимодействия.


Некоторые полезные фон здесь: alexonlinux.com/...
DictatorBob

1
Я согласен с основным утверждением «да, проблем быть не должно», но, видя, что у них проблемы, скорее всего, проблема с прошивкой или драйвером. Я совсем не «настроил» свою рабочую станцию, и она может потянуть 65 тысяч фунтов, не потревожив; 15KIPS не должно быть ничего для современного процессора. Я использую исключительно Broadcom NIC, 5709 является наиболее распространенным на сегодняшний день. Этот тест был запущен на FreeBSD, но не на Linux.
Крис С

Спасибо за идеи. Я попробовал irqbalance, но не заметил никакой разницы. Я играл с большим количеством настроек coalesce (ethtool -c), но не заметил никакой разницы. Одним из блейдов на самом деле является балансировщик нагрузки, выдвигающий до 120000 пакетов в секунду. Я заметил, что при загрузке iptables NAT и conntrack загрузка ЦП ksoftirqd достигает 100%. Выгрузите эти модули и сбросьте их до 0. На серверах Squid (макс. 10000 пакетов / сек) я сбросил 17000 (!!!) правил iptables, и сразу же уменьшились задержки. Я думал, что пробовал это раньше, но, видимо, нет ...
Вим Керхофф

3

Конечно, учитывая возможности процессора, чипсета и шины по сравнению с таким небольшим объемом трафика, у вас нет никаких оснований для НУЖНОЙ какой-либо формы управления прерываниями. У нас есть несколько 64-битных машин RHEL 5.3 с сетевыми картами 10 Гбит / с, и их прерывания совсем не плохи, это в 100 раз меньше.

Очевидно, у вас есть фиксированная конфигурация (я использую лезвия HP, которые очень похожи), поэтому замена сетевых адаптеров для Intel теперь простой вариант, но я бы сказал, что я начинаю замечать ряд подобных проблем в этом и других форумах. с этим конкретным NIC Broadcom. Когда-либо на самих сайтах SE возникали проблемы с такого рода несоответствиями, и переход на сетевые адаптеры Intel абсолютно помог.

Что я бы порекомендовал, так это выбрать один блейд и добавить адаптер Intel на эту машину, вам, очевидно, придется добавить межсоединение или, как IBM их называет, чтобы получить сигнал, но попробовать ту же настройку программного обеспечения, но с этим другим NIC (возможно, отключите Broadcom, если можете). Проверьте это и посмотрите, как вы справляетесь. Я знаю, что для того, что я описал, требуется пара дополнительных аппаратных средств, но я думаю, что ваш представитель IBM с радостью одолжит вам их. Это единственный способ узнать наверняка. Пожалуйста, дайте нам знать, что вы узнали, мне искренне интересно, есть ли проблема с этими сетевыми картами, даже если это странный случай. Кроме того, на следующей неделе я собираюсь встретиться с Intel и Broadcom, чтобы обсудить что-то совершенно не связанное, но я непременно расскажу об этом с ними и сообщу, найду ли я что-нибудь интересное.


1

Вопрос о прерываниях заключается в том, как они влияют на общую производительность системы. Прерывания могут препятствовать обработке земли пользователем и ядром, и, хотя вы, возможно, не видите большой загрузки ЦП, происходит много переключений контекста, и это сильно сказывается на производительности. Вы можете использовать vmstatи проверять systemстолбец, csзаголовок для прерываний и переключений контекста в секунду (прерывания включают в себя часы, поэтому вы должны их взвешивать), это тоже стоит проверить.


1

Краткий прямой ответ:

Если вы включите опрос, вы сократите переключатели контекста (обычно из-за прерываний) с того, чем они являются сейчас (15kips в вашем случае), до заранее определенного числа (обычно от 1k до 2k).

Если у вас есть трафик выше заранее определенного числа, то вы должны иметь лучшее время отклика, включив опрос. Обратное также верно. Я бы не сказал, что это «необходимо», если контекстные переключатели не влияют на производительность.


1

В завершение: с выгруженными модулями NAT и conntrack плюс минимизированным набором правил iptables мы получаем потрясающую производительность. Балансировщик нагрузки IPVS сделал более 900 Мбит / с / 150 кбит / с. При этом используются те же чипсеты Broadcom bnx2.

Итак, сделаем вывод: обработка прерываний кажется хорошей, и настройки по умолчанию для Debian с ядром 2.6.38 / 3.0.x, по-видимому, работают приемлемо.

Определенно, я бы предпочел использовать сетевые карты Intel, чтобы мы могли использовать стандартные пакеты Debian. Борьба с несвободной прошивкой bnx2 была огромной тратой времени.


Просто еще одно обновление. Недавно спектакль снова деградировал без видимой причины. Мы рассмотрели все предыдущие оптимизации безуспешно. Сетевые адаптеры Intel по-прежнему не являются экономичным вариантом (инвестиции от 30 до 40 000 долл. США в новые межкомпонентные соединения, коммутаторы 10 ГБ и т. Д.). НО, мы нашли несколько более новых блейдов IBM HS22, которые все еще используют дерьмовый bnx2, но с более новыми прошивками. Производительность намного лучше - мы преодолели барьер в 150 000 пакетов / сек.
Вим Керкхофф
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.