Ilya Evseev Опубликовано 18 декабря, 2009 (изменено) Итак, имеется 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? Изменено 18 декабря, 2009 пользователем Ilya Evseev Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ilya Evseev Опубликовано 19 декабря, 2009 Опробовал сысоевский патчик на Фре 7.1. Загрузка процессора (e7300) при том же трафике упала со 130% до 100%. Вывод: coalescing - штука стОящая, но вопросы относительно её применимости в Линуксе остаются. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
voron Опубликовано 19 декабря, 2009 И как у ethtool называется аналог hw.bge.rxd? Rx Ring Size?ethtool -g/-G Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ilya Evseev Опубликовано 22 декабря, 2009 (изменено) Обновил на 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 Изменено 22 декабря, 2009 пользователем Ilya Evseev Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
nuclearcat Опубликовано 23 декабря, 2009 Фирмварь просто вынесли из кода ядра. Скорее из-за того, что драйвера постоянно апдейтят. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ilya Evseev Опубликовано 30 января, 2011 (изменено) С учётом того, что 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 Изменено 30 января, 2011 пользователем Ilya Evseev Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...