URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 78196
[ Назад ]

Исходное сообщение
"Распределение прерываний в Linux"

Отправлено Lt_Flash , 10-Янв-08 20:53 
Всем доброго времени суток. Столкнулся с такой проблемой. Есть сервер на двух ксеонах двухъядерных, есть две встроенные сетевухи. Так вот, как я ни бился, получаю вот такое распределение прерываний:

cat /proc/interrupts
           CPU0       CPU1       CPU2       CPU3
  0:         92          0          0     920176   IO-APIC-edge      timer
  1:          0          0          0         10   IO-APIC-edge      i8042
  9:          0          0          0          0   IO-APIC-fasteoi   acpi
12:          0          0          0        105   IO-APIC-edge      i8042
14:          0          0          0       8182   IO-APIC-edge      ide0
15:          0          0          0      82386   IO-APIC-edge      ide1
16:          0          0          0   58325689   IO-APIC-fasteoi   eth0, eth1
25:          0          0          0    1221194   IO-APIC-fasteoi   eth2
NMI:          0          0          0          0
LOC:     920225     920209     920190     920171
ERR:          0

То есть обе встроенные сетевухи оказываются на одном, 16ом прерывании. Да, я знаю как переместить 16е прерывание на обработку на другой ЦПУ. Но это не снимает проблемы - в итоге тот ЦПУ, на котором это 16е прерывание объедается до 100% и начинают лагать пакеты. Загрузка достаточно большая.

В то же время есть другая машина, на Пентиум Д проце, два ядра. Тут картинка другая:

cat /proc/interrupts
           CPU0       CPU1
  0:         86          0   IO-APIC-edge      timer
  1:       2612          0   IO-APIC-edge      i8042
  8:        775          0   IO-APIC-edge      rtc
  9:          1          0   IO-APIC-fasteoi   acpi
12:        112          0   IO-APIC-edge      i8042
14:          9          0   IO-APIC-edge      ide0
16:  202278197 4078061401   IO-APIC-fasteoi   uhci_hcd:usb4, eth0, eth2
17:  145073284  195782914   IO-APIC-fasteoi   eth1
18:          0          0   IO-APIC-fasteoi   uhci_hcd:usb3
19:     145867    1176662   IO-APIC-fasteoi   uhci_hcd:usb1, ehci_hcd:usb5
20:          0          0   IO-APIC-fasteoi   uhci_hcd:usb2
NMI:          0          0
LOC:  340654287  346272838
ERR:          0
MIS:          0

Видно, что ОБА проца обслуживают 16е прерывание, где находятся одна встроенная сетевуха и одна дополнительная. В то время как вторая встроенная встала на 17е прерывание.

Всвязи с чем вопрос - есть ли какой-то способ перенести на первой машине одну из встроенных сетевух с 16го на какое-то другое прерывание и соответственно заставить работать ее отдельно? Я знаю, как вынести прерывание на другой проц, хочу чтобы допустим на 16м была одна сетевуха и обрабатывалась ЦПУ0, а вторая была на любом другом прерывании и обрабатывалась ЦПУ1 (например). Заранее благодарен всем!

ЗЫ. Покорежил чуток еще одну машину, где две ПЦИ-Е сетевухи...Там перестановка их во всех возможных комбинациях из слота в слот ничего не дала вообще - обе твердо сидели на одном и том же прерывании.

ЗЫЗЫ. Ядро вышеприведенных машин 2.6.21.7 (знаю что есть новее уже) с СМП-поддержкой, собранное из исходников с кернел.орг.


Содержание

Сообщения в этом обсуждении
"Распределение прерываний в Linux"
Отправлено Romik , 10-Янв-08 21:52 
Тут решается схожая проблема, посмотрите.
http://www.asteriskguru.com/tutorials/pci_irq_apic_tdm_ticks...