LINUX.ORG.RU

сетевые карты и прерывания


0

0

Есть сервак о двух головах (каждая голова о двух ядрах) и есть сетевые карточки. Тоже две. Проблема в том, что каждая карточка вешается на одно прерывание и соответственно ею занимается одно ядро. Две карточки - два ядра. Если ли в природе метода (железо или программное что-то), чтобы карточка могла генерировать два прерывания (допустим несколько очередей TX или RX) или больше, а то получается такая картина:

cat /proc/interrupts

CPU0 CPU1 CPU2 CPU3
222: 0 460265173 0 0 eth0
223: 2627956489 0 0 0 eth2


В результате два адра работают (прерывания ручками перекидывал, все равно любых два работают), но надо рапределить их равномерно. На сервере, обрабатывается в основном сетейо трафик (+ его шейперение, просчет) и получается, что часть ресурсов просто незадействовано.
mpstat тоже самое показывает - два ядра по 70-80% загружены, а других два - 98% idle...

Linux, Fedora 7.

anonymous

Ответ на: комментарий от Chumka

Нет, не получается, они разводятся только в режиме "одна карточка - один процессор (читай ядро). и в документации косвенно об этом говорится:

"balance" out multiple NICs in a multi-processor machine. By tying a single NIC to a single CPU, you should be able to scale the amount of traffic your server can handle nicely.

Хорошо, тогда другой вариант. На том сервере на самом деле 4 карточки, из которых сейчас используются только две: аплинк и юзерские сегменты. Может попробовать объединить их в два виртаульных устройства (bounding) по две карточки в каждом и тогда загрузка "размажется" по ядрам? Потому что грусно взирать на такую картину:
%idle intr/s
ALL 56,39 51397,03
CPU0 37,62 9400,99
CPU1 43,00 41995,05
CPU2 73,00 0,00
CPU3 71,29 0,00

На CPU0 прерываний меньше, потому что там драйвер сетевухи в napi работает, а так трафик там одинаковый, все что пришло в первую карточку уходит через вторую юзерам и наоборот.


anonymous
()
Ответ на: комментарий от anonymous

>Нет, не получается, они разводятся только в режиме "одна карточка - один процессор (читай ядро). и в документации косвенно об этом говорится

А где в ядре читать, в каком драйвере. В документации говорится не совсем про это, а про ВОЗМОЖНОСТЬ привязать одну карту к определенному cpu.

Из той же доки пример:

CPU0 CPU1 CPU2 CPU3
...
31: 93707 106211 107988 93329 IO-APIC-level eth0

Т.е. прерывания по 4 процам (или ядрам) распределены.

А насчет бондинга не могу сказать, сомневаюсь что это поможет в плане распределения прерываний

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.