The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Не получается раскидать очереди сетевухи по ядрам."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Открытые системы на сервере (Др. сетевые сервисы / Linux)
Изначальное сообщение [ Отслеживать ]

"Не получается раскидать очереди сетевухи по ядрам."  +/
Сообщение от Rom1 (ok) on 05-Май-10, 13:18 
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-го процессора.

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

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Не получается раскидать очереди сетевухи по ядрам."  +/
Сообщение от tux2002 email(ok) on 05-Май-10, 18:35 
>Создается впечатление что больше чем по первым четырем ядрам раскидать не могу
>эти очереди.
>Может там какие нюансы есть?

А сколько всего ядер? cat /proc/cpuinfo?


Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

2. "Не получается раскидать очереди сетевухи по ядрам."  +/
Сообщение от Rom1 (ok) on 05-Май-10, 19:16 
>А сколько всего ядер? cat /proc/cpuinfo?

Всего в системе 16 ядер (там по 4 ядра на проц с гиперртредингом). Вывод /proc/cpuinfo не буду постить, ибо портянка огромная.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

3. "Не получается раскидать очереди сетевухи по ядрам."  +/
Сообщение от Rom1 (ok) on 06-Май-10, 11:34 
Короче маску надо использовать шестнадцатиричную, причем записывать её надо безо-всяких префиксов типа "0x" или суффикса "h", а прямо как десятичную. Например echo 10 > /proc/irq/1271/smp_affinity - где 10 это 10 HEX (5-е ядро)!
Вот скриптик:
#!/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


Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру