Перейти к содержимому
Калькуляторы

Не получается раскидать очереди сетевухи по ядрам.

Linux 2.6.26-2-amd64 #1 SMP Tue Mar 9 22:29:32 UTC 2010 x86_64 GNU/Linux

 

Сервер с 2 процессорами:

Intel(R) Xeon(R) CPU E5530 @ 2.40GHz

 

Двухпортовая сетевая на чипе 82575EB, 8 очередей на прием, 8 на передачу:

01:00.0 Ethernet controller: Intel Corporation Device 10c9 (rev 01)
01:00.1 Ethernet controller: Intel Corporation Device 10c9 (rev 01)

# ethtool -i eth0
driver: igb
version: 1.0.8-k2
firmware-version: 1.2-3
bus-info: 0000:01:00.0

# ethtool -i eth1
driver: igb
version: 1.0.8-k2
firmware-version: 1.2-3
bus-info: 0000:01:00.1

 

С какими параметрами драйвер грузится, не в курсе, но выглядит это так: (лишнее повырезал)

#cat /proc/interrupts
1263:    PCI-MSI-edge      ahci
1264:    PCI-MSI-edge      eth1
1265:    PCI-MSI-edge      eth1-rx3
1266:    PCI-MSI-edge      eth1-rx2
1267:    PCI-MSI-edge      eth1-rx1
1268:    PCI-MSI-edge      eth1-rx0
1269:    PCI-MSI-edge      eth1-tx0
1270:    PCI-MSI-edge      eth0
1271:    PCI-MSI-edge      eth0-rx3
1272:    PCI-MSI-edge      eth0-rx2
1273:    PCI-MSI-edge      eth0-rx1
1274:    PCI-MSI-edge      eth0-rx0
1275:    PCI-MSI-edge      eth0-tx0

 

Задача - раскидать все очереди по ядрам процессоров c 4 по 15:

printf %d 0x8000 >/proc/irq/1270/smp_affinity # 1270: eth0
printf %d 0x4000 >/proc/irq/1271/smp_affinity # 1271: eth0-rx3
printf %d 0x2000 >/proc/irq/1272/smp_affinity # 1272: eth0-rx2
printf %d 0x1000 >/proc/irq/1273/smp_affinity # 1273: eth0-rx1
printf %d 0x0800 >/proc/irq/1274/smp_affinity # 1274: eth0-rx0
printf %d 0x0400 >/proc/irq/1275/smp_affinity # 1275: eth0-tx0
printf %d 0x0200 >/proc/irq/1264/smp_affinity # 1264: eth1
printf %d 0x0100 >/proc/irq/1265/smp_affinity # 1265: eth1-rx3
printf %d 0x0080 >/proc/irq/1266/smp_affinity # 1266: eth1-rx2
printf %d 0x0040 >/proc/irq/1267/smp_affinity # 1267: eth1-rx1
printf %d 0x0020 >/proc/irq/1268/smp_affinity # 1268: eth1-rx0
printf %d 0x0010 >/proc/irq/1269/smp_affinity # 1269: eth1-tx0

 

Но не выходит каменный цветочек...

Крутятся они все только на первых чётырех ядрах. Т.е. например значение битовой маски (16dec / 10h) указывает на 5-й по счету процессор, счетчики interrupts бегают на 1-м. Но тем не менее при считывании этого же значения, выходит правильное значение - маска для 5-го процессора.

 

Создается впечатление что больше чем по первым четырем ядрам раскидать не могу эти очереди.

Может там какие нюансы есть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Кажется, про это писали здесь:

http://forum.nag.ru/forum/index.php?showto...mp;#entry460834

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Кажется, про это писали здесь:

http://forum.nag.ru/forum/index.php?showto...mp;#entry460834

Тред совсем не о том.

 

Проблема в том что делаю, например направляю прерывание на 5-й по счету процессор: echo 16> /proc/irq/1271/smp_affinity, после этого делаю cat /proc/irq/1271/smp_affinity получаю 16, а счетчики начинают бегать на 1-м ядре!

Думаю что может проблема с драйвером сетевой, он достаточно старой версии.

 

Еще вопрос в тему - откомпилировал свежий драйвер, хочу его подоткнуть, но хочу сперва знать с какими значениями загружается старый - как это узнать? ethtool подробностей не выдает. lsmod молчит, загружен говорит и всё, а с какими параметрами он мог быть загружен в версии driver: igb, version: 1.0.8-k2, firmware-version: 1.2-3 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ThreeDHead

CPU маска шестнадцатеричная, а не десятичная.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ThreeDHead

CPU маска шестнадцатеричная, а не десятичная.

Да нормально всё: 16 DEC = 10 HEX = 10000 BIN = 5 ядро, а крутится на первом, типа перекрутился...
Изменено пользователем ThreeDHead

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ThreeDHead

CPU маска шестнадцатеричная, а не десятичная.

Во блин! Спасибо! Прям шестнадцатиричное и надо запихивать, как будто десятичное.

 

Короче эхать надо прям 10h, типа echo 10 > /proc/irq/1271/smp_affinity

Изменено пользователем ThreeDHead

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну вот точно, если не изменяя ничего попросить вывести значение, он же выводит "ffffffff".

Всега считал её десятичной и в примерах везде десятичная.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Короче вот скриптик со ссылки Ilya Evseev, помодифицировал его чуть, работает нормально:

#!/bin/sh
#
#  irq2smp -- distribute hardware interrupts from Ethernet devices by CPU cores.
#
#  Should be called from /etc/rc.local.
#

ncpus=`grep -ciw ^processor /proc/cpuinfo`
test "$ncpus" -gt 1 || exit 1

n=0
for irq in `cat /proc/interrupts | grep eth | awk '{print $1}' | sed s/\://g`
do
    f="/proc/irq/$irq/smp_affinity"
    test -r "$f" || continue
    cpu=$[$ncpus - ($n % $ncpus) - 1]
    if [ $cpu -ge 0 ]
    then
        mask=`printf %x $[2 ** $cpu]`
        echo "Assign SMP affinity: eth$n, irq $irq, cpu $cpu, mask 0x$mask"
        echo "$mask" > "$f"
        let n+=1
    fi
done

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Даже специальная прога есть для этих целей: http://laas.mine.nu/jens/eth-affinity-1.2.3.tar.gz

Сам правда не пробовал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Даже специальная прога есть для этих целей: http://laas.mine.nu/jens/eth-affinity-1.2.3.tar.gz
Делает то-же самое, только написана на Си? Много бытсрее работает наверное :)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.