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

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

3.3.7. Настройка близости прерывания

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

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

Любая помощь будет отличной.

Спасибо

1 ответ

Решение

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

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

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

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