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

Coalescing для tg3/bcm5721

Итак, имеется Asus-платформа с двумя встроенными гигабитными картами BCM5721,

ядро 2.6.27 (планирую 2.6.30), драйвер tg3.

Работает как шлюз+NAT.

 

В данный момент vmstat показывает около 15k прерываний и 260 переключений контекста в секунду.

Загрузка сетевых карт: 50mbps и 7kpps в одну сторону, 20mbps и 6kpps в другую.

В час пик нагрузка в 6-7 раз выше, в conntrack до 270k записей.

Теоретически прерывание от сетевой карты даст 100% загрузку одного ядра CPU при 380-400mbps.

 

Вопрос: можно ли увеличить пропускную способность с помощью coalescing'a

и что куда менять? Сейчас значения следующие:

# ethtool -c eth0
...
rx-usecs: 20
rx-frames: 5
rx-usecs-irq: 0
rx-frames-irq: 5

tx-usecs: 72
tx-frames: 53
tx-usecs-irq: 0
tx-frames-irq: 5
...

Offload (ethtool -K) включен для всего, кроме udp fragmentation.

Короче, всё по умолчанию, ничего не менял (пока).

 

Igor Sysoev (см. http://lists.freebsd.org/pipermail/freebsd...ne/022227.html) использует под FreeBSD такие значения:

/boot/loader.conf:
hw.bge.rxd=512

/etc/sysctl.conf:
dev.bge.0.rx_coal_ticks=500
dev.bge.0.tx_coal_ticks=10000
dev.bge.0.rx_max_coal_bds=64
dev.bge.0.tx_max_coal_bds=128

Однако не совсем понятно, например, что такое bds и почему параметров всего 4, когда ethtool показывает 8.

И как у ethtool называется аналог hw.bge.rxd? Rx Ring Size?

 

В https://kerneltrap.org/mailarchive/linux-ne.../1441484/thread вообще рекомендуется отключить NAPI

(причём такое ощущение, что единственный способ это сделать - перекомпилировать драйвер карты)

и тюнить coalescing (но не приведено никаких советов).

 

В общем, интересует формула расчёта параметров для coalescing в зависимости от текущих intr/cs/mbps/kpps

для использования при трафике >350mbps, т.е. при загрузке ядер CPU от 90%.

И нужен ли/возможен coalescing при включённом NAPI?

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

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


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

Опробовал сысоевский патчик на Фре 7.1.

Загрузка процессора (e7300) при том же трафике упала со 130% до 100%.

 

Вывод: coalescing - штука стОящая, но вопросы относительно её применимости в Линуксе остаются.

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


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

И как у ethtool называется аналог hw.bge.rxd? Rx Ring Size?
ethtool -g/-G

 

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


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

Обновил на linux-роутере ядро с 2.6.27 до 2.6.30.

Загрузка процессора при том же трафике упала примерно раза в два.

Кто-нибудь знает, из-за чего такой прогресс?

 

Пока единственное предположение, что это из-за фирмвари:

# locate tg3
/lib/firmware/2.6.30-std-def-alt14/tigon/tg3.bin
/lib/firmware/2.6.30-std-def-alt14/tigon/tg3_tso.bin
/lib/firmware/2.6.30-std-def-alt14/tigon/tg3_tso5.bin
/lib/modules/2.6.27-ovz-smp-alt9/kernel/drivers/net/tg3.ko
/lib/modules/2.6.30-std-def-alt14/kernel/drivers/net/tg3.ko

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

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


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

Фирмварь просто вынесли из кода ядра.

Скорее из-за того, что драйвера постоянно апдейтят.

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


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

С учётом того, что bge coalescing patch во FreeBSD вызывает kernel trap при перезагрузке и выключении, пара обходных вариантов.

 

Грубый - в /etc/rc.conf:

dumpdev="NO"

dumpdir="NO"

Ядро будет автоматически перезапускаться через 20(?) секунд после kernel trap, не пытаясь создать дамп. Если попытается - повиснет полностью.

 

Занудный - явно гасить интерфейсы при остановке системы:

chmod +x /usr/local/etc/rc.d/ifbge_shutdown

#!/bin/sh
#
# PROVIDE: ifbge_shutdown
# REQUIRE: netif
# KEYWORD: nojail nostart shutdown
#

# Workaround for kernel trap ispired by coalescing patch to if_bge driver.
# Shutdown bge0,bge1,... before rebooting.

. /etc/rc.subr

name="ifbge_shutdown"

start_cmd=":"
stop_cmd="ifbge_shutdown"

ifbge_shutdown() {
        echo "if_bge..."
        for n in 0 1 2 3 4 5 6 7 8 9; do
                ifconfig bge$n down || break
                echo "bge$n: shutdown successful."
                sleep 1
        done
}

run_rc_command "$1"

 

UPD. Пишут, что kernel trap 12 в 7.1 может происходить даже без coalescing-патча:

http://svn.freebsd.org/viewvc/base?view=re...revision=192127

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

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


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

Join the conversation

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

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

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

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

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

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

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