Ilya Evseev Posted December 18, 2009 Posted December 18, 2009 (edited) Итак, имеется 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 December 18, 2009 by Ilya Evseev Вставить ник Quote
Ilya Evseev Posted December 19, 2009 Author Posted December 19, 2009 Опробовал сысоевский патчик на Фре 7.1. Загрузка процессора (e7300) при том же трафике упала со 130% до 100%. Вывод: coalescing - штука стОящая, но вопросы относительно её применимости в Линуксе остаются. Вставить ник Quote
voron Posted December 19, 2009 Posted December 19, 2009 И как у ethtool называется аналог hw.bge.rxd? Rx Ring Size?ethtool -g/-G Вставить ник Quote
Ilya Evseev Posted December 22, 2009 Author Posted December 22, 2009 (edited) Обновил на 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 December 22, 2009 by Ilya Evseev Вставить ник Quote
nuclearcat Posted December 23, 2009 Posted December 23, 2009 Фирмварь просто вынесли из кода ядра. Скорее из-за того, что драйвера постоянно апдейтят. Вставить ник Quote
Ilya Evseev Posted January 30, 2011 Author Posted January 30, 2011 (edited) С учётом того, что 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 January 30, 2011 by Ilya Evseev Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.