Привязка прерываний к ядру для сетевых карт
IVB 13 декабря, 2013 - 18:06
Всем доброго времени суток.
Возникла задача - привязать прерывания пяти сетевых карт (из которых 4 объединены в bond) к ядрам процессора.
Попробовал через postup() - но он вызывается при поднятии 5-й сетевой, и bond0, а на поднятие сетевух из bond0 postup() не реагирует. Пришлось сделать вот так:
postup() { [ "${IFACE}" = "bond0" ] && /root/bin/irq-affinity.sh net1 net2 net3 net4 [ "${IFACE}" = "net5" ] && /root/bin/irq-affinity.sh net5 }
Вроде, и аккуратно смотрится - но все равно как-то не изящно (тем более, "левый" скрипт вызывается).
Может, есть более простое решение?
»
- Для комментирования войдите или зарегистрируйтесь
/bin/echo 1 >
например аналогичное этому поместить в postup и все.
Нащяльника, мая сервира паставиль, фрибизьдя инсталя сделаль, апачи сабраль, пыхапе патключиль, сапускаю, а ано - ажамбех пашамбе эшельбе шайтанама!
_passer написал(а):
Я немного не про это. Если Вы обратили внимание - я как раз и использую postup().
Работа скрипта, кторый я использую (irq-affinity.sh) меня как раз устраивает (он универсальный, поддерживает до 64 очередей, "понимает" два варианта распределения очередей - когда TxRx вместе, или когда tx и rx отдельно).
Меня интересовало, есть ли в Gentoo какие-то "стандартные" средства для "прибивания" прерываний (наподобие ethtool_ring_XXX или ethtool_pause_XXX).
нету А что, где то есть ?
нету
А что, где то есть ?
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
Если не секрет
Не могли бы вы рассказать, для чего такое может понадобится? Можно ссылкой на ресурс. Заранее спасибо.
Для обработки большого
Для обработки большого количества траффика с малыми задрежками - при переходе обработки прерывания на другое ядро по irqbalance "срывает" очеред конвеера блока исполнения и нужно начинать с последней точки сохранения состояния.
Аналогичная техника используется для "прибивания" qemu или iptables к процам.
Вообще идея прибивания используется при обработке потока мелких транзакций на SMP/NUMA машине .
Фича чисто для нормального прода и дома никак никогда совершенно не нужна ;)
http://www.intel.com/content/www/us/en/ethernet-controllers/82575-82576-82598-82599-ethernet-controllers-interrupts-appl-note.html
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
Спасибо
Спасибо, за обстоятельный ответ.
Неравномерное распределение прерываний от сетевой карты
У вышеописанной задачи появилось продолжение.
Система почти 3 месяца очень красиво работала - графики загрузки всех процессоров были довольно близки друг к другу. Убедившись, что все работает, заглядывать в графики перестали.
Сейчас же наблюдается очень нехорошая картинка: загрузка первого процессора в 3-4 раза превышает загрузку остальных, а когда первый упирается в 100% - загрузка остальных падает еще сильнее.
Вот текущее содержимое файла /proc/interrupts
Как видно из приведенных данных - только net5 более-менее равномерно распределяет прерывания (и то на CPU0 их больше), а остальные (с net1 по net4) как-то слишком уж предпочитают CPU0 - на нем на каждой сетевой почти в 200 раз больше прерываний, чем на остальных процессорах.
Хотелось бы понять, почему это происходит, и как это можно побороть.
net5 - Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
net1-4 - Intel Corporation 82576 Gigabit Network Connection (rev 01), объединены в bond
За все время работы принципиальных изменений в работу системы не вносилось. Как-то увязать моменты, когда распределение прерываний "ломалось" и "чинилось", с другими графиками, я пока не могу...
Прорицаю сборку дебажного
Прорицаю сборку дебажного ядра ....
ибо:
"Распределение осуществляется на базе расчета хеш функции (остаток от деления) от совокупности таких данных: protocol, source and destination IP, and source and destination port. Технология называется: Receive-side scaling (RSS). В документации написано, что программируема, тоесть теоретически можно выполнять расчет хеш функции например, на базе мак адресов и номеров вланов."
П.С а у тебя точно интел ?
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
slepnoga написал(а): Прорицаю
Ой, не хочется...
Стоп-стоп-стоп...
Я всю жизнь считал, что распределение пакетов в сетевушке по разным прерываниям - сугубо аппаратная задача самой сетевушки.
Ведь для того, чтобы ядро что-то сделало для анализа протокола и адреса - этот пакет должен в ядро попасть, т.е. прерывание уже произойдет.
Единственное, что может быть - способами распределения можно управлять при помощи ethtool.
По крайней мере, lspci говорит именно так, и драйвера собраны именно под эти сетевушки
Стоп-стоп-стоп...Я всю жизнь
Милай чиловик, нету больше железного железа из железа, все вокруг давно уже software defunide hardware/networks/storage/brain/hand/sex/ ........
Поэтому нормальная интеловская сетевая представляет собой специализированный микроконтроллер/микрокомпьютер со своей рамой ос/прошивкой, асиком и процом к этому асику. Или ты думаешь, что все навороты вроде tso multicast и hardware mac acl сделаны путем выжигания связей в плис'ке ? Разочарую - это прошивка, т.е блоб. Плюс интела в том, что блоб нормальный, айсик крутой и ethtool может/умеет писать в регистры ппзу карты, ну и ко всему великолепию интеля выкладываю sdk для писания дополнений.
Поэтому да, __карта__ считает хеш пакета и решает на какой irq его засунуть....
П.С
вот сделать подсчет хешей на железке можно ( и это дешевле) - но у интела оно программируемое ( на тему от чего именно считать хеш .
П.П.С т.е, если у тебя пакеты без ИП адреса напримет - в данномк случае все, труба. Более серьезно мона поглядеть темы на наге
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
slepnoga
Т.е. я правильно считаю. "Аппаратное" - не обязательно на ПЗУ. Если на карте собран микрокомпьютер - то это все равно аппаратная часть карты.
Разговор ведь зашел о пересборке ядра :)
Пакетов без IP там не должно быть. Но это в теории. Трафик внешний, поэтому там может быть вообще всё, что угодно.
А за наводку на NAG спасибо, обязательно посмотрю, можно ли в моих сетевушках перепрограммировать алгоритм распределения.