Производительность приложений и соответствие прерываний
Цитирование руководства по настройке производительности RedHat
3.3.7. Настройка близости прерывания
Запросы прерывания имеют ассоциированное свойство smp_affinity, которое определяет процессоры, которые будут обрабатывать запрос прерывания. Чтобы повысить производительность приложений, назначьте привязку прерываний и привязку процессов к одному и тому же процессору или процессорам на одном и том же ядре. Это позволяет указанным прерываниям и потокам приложения совместно использовать строки кэша.
У меня есть приложение, которое получает и обрабатывает большие объемы данных UDP. Если я хочу сократить время между прибытием пакета UDP и приложением, полностью его обрабатывающим, следует ли назначить ту же привязку для сетевого адаптера, принимающего пакеты, и приложения? Или я должен назначить им разные сходства? Я чувствую, что приведенная выше цитата предполагает первое, но я бы подумал, что позднее может быть более полезным.
Любая помощь будет отличной.
Спасибо
1 ответ
В то время как только направленный тест может реально ответить на ваш вопрос, наиболее безопасным вариантом является запуск IRQ и приложения на одном процессоре / сокете, но на разных ядрах. Таким образом, доступная мощность ЦП максимизируется, и в то же время кэш L3, общий для всех последних серверов, обеспечивает быстрый обмен данными между IRQ и приложением.
Если вы действительно заинтересованы в уменьшении задержки между приемом и обработкой пакетов, вам следует настроить параметры буфера пакетов вашего Ethernet-адаптера и параметры объединения IRQ.
Вы можете использовать очень хороший ethtool для этого:
ethtool -c
дать вам обзор настроек объединения пакетов по умолчанию, в то время какethtool -C
позволит вам изменить их.ethtool -g
показывает настройки кольцевого буфера, в то время как сethtool -G
Вы можете изменить их.