У меня есть приложение, которое выполняет захват пакетов с карты Ethernet. Время от времени мы видим, что пакеты отбрасываются (мы подозреваем, что из-за переполнения буфера сетевой карты или ядра). Я пытаюсь понять, поможет ли включение объединения прерываний или ухудшит ситуацию. С одной стороны, на ЦП должно быть меньше работы, поскольку должно быть меньше прерываний для обработки, с другой стороны, кажется, что если IRQ не обрабатываются так часто, существует более высокая вероятность переполнения буфера. Значит ли это, что, может быть, мне стоит включить его и увеличить размер настроек rmem_max?
ОБНОВЛЕНО, ВКЛЮЧАЯ сведения об ОС / аппаратном обеспечении:
Dell PowerEdge 1950, двухъядерный четырехъядерный процессор Xeon X5460 с тактовой частотой 3,16 ГГц, ОС Broadcom NetXtreme II BCM5708 Linux
proc/sys/net/core
dev_weight 64
netdev_budget 300
rmem_default 110592
somaxconn 128
wmem_max 16777216
xfrm_aevent_rseqth 2
message_burst 10
netdev_max_backlog 65536
rmem_max 16777216
warnings 1
xfrm_acq_expires 30
xfrm_larval_drop 1
message_cost 5
optmem_max 20480
rps_sock_overflow_entries 0
wmem_default 110592
xfrm_aevent_etime 10
Хорошо, вы не предоставили основную информацию (например, конкретный дистрибутив ОС или версию ядра). Это важно, потому что значения по умолчанию для sysctl / ядра различаются в разных дистрибутивах, а некоторые настройки не отображаются в некоторых системах Linux. Вы работаете с сервером из 2008 года, так как мы узнаем, что ваша ОС и ядро не из одной эпохи?
Однако, глядя на параметры вашей сети, я бы увеличил размеры буфера по умолчанию. Недавняя установка системы для высокочастотной торговли, которую я развернул, имела гораздо более высокую wmem_default
и rmem_default
настройки. Попробуйте для начала "8388608" и посмотрите, поможет ли это. Это базовое изменение, но обычно первый шаг ...
Я бы также посмотрел на изменение приоритетов реального времени вашего (предположительно настраиваемого) приложения. Используете ли вы какую-либо форму привязки к ЦП (набор задач, cgroups) в вашем приложении или скрипте-оболочке? Как насчет приоритета вашего приложения в реальном времени? Посмотрите в команда chrt и ее параметры чтобы увидеть, что подходит для вашей ситуации. Ваше приложение многопоточное?
К счастью, ЦП серии 5400 не поддерживает гиперпоточность, но как обстоят дела с другими настройками BIOS? Вы отключили управление питанием и C-состояния? Есть ли в системе какие-нибудь ненужные демоны? Является irqbalance
Бег?
Теперь, что касается оборудования, которое вы используете, если это для использования HFT, вы отстаете; буквально ТРИ скачка в процессоре и архитектурных изменениях ... Nehalem (серия 5500) принес большой скачок в технологиях по сравнению с серией 5400, которую вы используете. Уэстмир (5600) был даже лучше. Sandy Bridge был достаточно большим изменением по сравнению с 5500/5600, чтобы стимулировать еще одно обновление оборудования в моей среде.
Также похоже, что вы используете встроенные сетевые адаптеры. Были некоторые препятствия, которые нам нужно было преодолеть, имея дело с Broadcom ... Но вы еще не достигли этого. Как выглядит загрузка ЦП при обнаружении отброшенных пакетов? С какой скоростью потока данных вы сталкиваетесь во время захвата? это может просто быть случаем, когда ваша система не успевает.
Здесь есть много ручек, которые можно настроить / настроить. Однако лучшее понимание того, с чем вы работаете, поможет нам сузить круг вопросов.
Изменить: вы упомянули Red Hat. Опции для EL5 и EL6 различаются, но приведенные выше предложения применимы теоретически.
Изменить: хорошо, что вы используете RHEL 6. Вы можете многое сделать. Попробуйте установить приоритет своего приложения и протестируйте. Еще одно полезное руководство - это Руководство по настройке RHEL MRG. Не все функции будут доступны для вашего ядра, но это даст вам некоторые идеи и объяснения некоторых вещей, которые вы можете изменить для более детерминированной производительности.
Не зная, почему вы отбрасываете пакеты, невозможно понять, поможет это или нет. Ваш анализ в корне верен - если прерывания поступают (обслуживаются) реже, есть большая вероятность заполнения буферов при прочих равных условиях. Однако, если вы не знаете, почему вы теряете пакеты, вы не можете сказать, улучшит ли это изменение ситуацию или нет.
Лично я считаю, что установка качественных сетевых адаптеров с хорошими драйверами на качественный сервер решает все мои проблемы. Намного дешевле, чем целыми днями копаться в отладочных данных.