Назад | Перейти на главную страницу

объединение прерываний для захвата пакетов с высокой пропускной способностью?

У меня есть приложение, которое выполняет захват пакетов с карты 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. Не все функции будут доступны для вашего ядра, но это даст вам некоторые идеи и объяснения некоторых вещей, которые вы можете изменить для более детерминированной производительности.

Не зная, почему вы отбрасываете пакеты, невозможно понять, поможет это или нет. Ваш анализ в корне верен - если прерывания поступают (обслуживаются) реже, есть большая вероятность заполнения буферов при прочих равных условиях. Однако, если вы не знаете, почему вы теряете пакеты, вы не можете сказать, улучшит ли это изменение ситуацию или нет.

Лично я считаю, что установка качественных сетевых адаптеров с хорошими драйверами на качественный сервер решает все мои проблемы. Намного дешевле, чем целыми днями копаться в отладочных данных.