Jump to content
Калькуляторы

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?

Edited by Ilya Evseev

Share this post


Link to post
Share on other sites

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

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

 

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

Share this post


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

 

Share this post


Link to post
Share on other sites

Обновил на 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

Edited by Ilya Evseev

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

С учётом того, что 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

Edited by Ilya Evseev

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this