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...