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

Производительность приложений и соответствие прерываниям

Цитирование Руководство по настройке производительности RedHat

3.3.7. Установка привязки прерывания

Запросы на прерывание имеют связанное свойство сродства smp_affinity, которое определяет процессоры, которые будут обрабатывать запрос прерывания. Чтобы повысить производительность приложения, назначьте привязку прерывания и привязку к одному и тому же процессору или процессорам на одном ядре. Это позволяет указанным потокам прерывания и приложения совместно использовать строки кэша.

У меня есть приложение, которое получает и обрабатывает большие объемы данных UDP. Если я хочу сократить время между прибытием UDP-пакета и полной обработкой пакета приложением, должен ли я назначить такое же соответствие сетевой карте, получающей пакеты, и приложению? Или я должен назначить им разные сходства? Мне кажется, что цитата выше предполагает первое, но я бы подумал, что второе может быть более полезным.

Любая помощь была бы замечательной.

Спасибо

Хотя только направленный тест может реально ответить на ваш вопрос, самый безопасный вариант - запускать IRQ и приложение на одном и том же процессоре / сокете, но на разных ядрах. Таким образом, доступная мощность ЦП максимизируется, и в то же время кэш L3, общий для всех последних серверов, обеспечивает быстрое совместное использование данных между IRQ и приложением.

Если вы действительно заинтересованы в уменьшении задержки между приемом и обработкой пакетов, вам следует настроить буфер пакетов вашего Ethernet-адаптера и параметры объединения IRQ.

Для этого вы можете использовать очень хороший ethtool:

  • ethtool -c дать вам обзор настроек объединения пакетов по умолчанию, а ethtool -C позволяют вам изменить их.
  • ethtool -g показывает настройки кольцевого буфера, а с ethtool -G вы можете изменить их.