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

Kernel trap на FreeBSD 8.2 с большим количеством MAC+VLANs

Имеется роутер с FreeBSD 8.2-p4, сетевые "em", трафик <200 mbps, клиентов <1000.

 

Если трафик к клиентам маршрутизируется через внутренний layer3, роутер работает стабильно месяцами.

 

Если клиентские vlan'ы (<100) дотянуты до роутера и роутер шлёт в них трафик напрямую,

то каждые несколько дней роутер виснет намертво (см.картинку).

 

Вопрос 1: кто-нибудь с этим сталкивался?

Гугл нашёл очень похожее описание - http://forum.pfsense.org/index.php?topic=40769.0

но там дискуссия ведётся с сентября и закончилась ничем в январе.

 

Вопрос 2: что в этой ситуации лучше/хуже - откат на 7.4, обновление до 8-STABLE, обновление до 9-RC?

 

На других роутерах такой проблемы нет, но там либо другие сетевые (не Интел),

либо существенно меньше нагрузка, либо более старая версия FreeBSD.

freebsd82-kerntrap.JPG

Share this post


Link to post
Share on other sites

Вопрос 2: что в этой ситуации лучше/хуже - откат на 7.4, обновление до 8-STABLE, обновление до 9-RC?

Обновить до 9-RELEASE.

Share this post


Link to post
Share on other sites

Вопрос 2: что в этой ситуации лучше/хуже - откат на 7.4, обновление до 8-STABLE, обновление до 9-RC?

Обновить до 9-RELEASE.

стандартная фраза техподдержки дибилинк, которая не даст полной уверенности.

надо лечить причину а не следствие

 

автор, научитесь пользоваться ddb, kgdb. навыки ещё пригодятся.

я так понял PPTP у вас? arp нужен.

на вскидку напомню - flowtable?

я бы смотрел чего в 8-м фрейме - arpintr с дампом памяти.

Share this post


Link to post
Share on other sites

Ещё можно попробовать воспользоваться netgraph для работы с валанами.

Share this post


Link to post
Share on other sites

посмотрел сейчас исходник. без дампа памяти - гадание на кофейно гуще.

говорите виснет раз в несколько дней - значит можно воспроизвести проблему.

поэтому сохраните дамп памяти, выложите куда-нибудь, вместе с бинарником ядра.

также настройте DDB, чтобы сам большинство работы сделал и послал резет процессору.

 

 

netisr есть возможность выключить? (это конечно не решение проблемы, а воркарауд)

Share this post


Link to post
Share on other sites

Вопрос 2: что в этой ситуации лучше/хуже - откат на 7.4, обновление до 8-STABLE, обновление до 9-RC?

Обновить до 9-RELEASE.

стандартная фраза техподдержки дибилинк, которая не даст полной уверенности.

надо лечить причину а не следствие

ТС вообще хотел обновляться до 9-RC :)

 

пусть выложит во время работы vmmstat -z

Share this post


Link to post
Share on other sites
стандартная фраза техподдержки дибилинк, которая не даст полной уверенности.надо лечить причину а не следствие

Для начала обновится, потом, если не пройдёт лечится.

Там же много всего в коде исправляли.

Share this post


Link to post
Share on other sites

Там ровно ничего нет про откат системы назад, есть только как починить нерабочее новое ядро. А ведь новом ядре и системе могут всплыть еще более крутые глюки, и возможность отката должна быть.

 

И ржачные моменты про:

Если вы установили версию ядра отличную от той, с которой были собраны ваши системные утилиты, например, ядро от -CURRENT на системе -RELEASE, большая часть системных команд, таких как ps(1) и vmstat(8) не будут больше работать. Вам потребуется перекомпилировать и установить систему той же версии исходных текстов, что и ядро. Это одна из причин, по которой не следует использовать версию ядра, отличную от версии всей остальной системы.

Вообще, архаизм.

Share this post


Link to post
Share on other sites

Там ровно ничего нет про откат системы назад, есть только как починить нерабочее новое ядро. А ведь новом ядре и системе могут всплыть еще более крутые глюки, и возможность отката должна быть.

Качаешь с фтп нужный тебе генерик, распаковываешь в /boot/kernel, ребутишься со старым новым ядром. Какие проблемы?

Share this post


Link to post
Share on other sites

Качаешь с фтп нужный тебе генерик, распаковываешь в /boot/kernel, ребутишься со старым новым ядром. Какие проблемы?

Большие, рабочую ос получить можно в базовом варианте, а весь пересобранный мир, как-то сложно...

Share this post


Link to post
Share on other sites

А как быть с обновленным юзерспейсом? Как его откатить назад?

 

Точно так же. Причем не факт что у вас будет не работать что-либо кроме ps/vmstat (что работает со структурами ядра). В плане обновления в пределах major-ветки проблем обычно минимум.

Share this post


Link to post
Share on other sites

А как быть с обновленным юзерспейсом? Как его откатить назад?

Каким образом связаны поддержка вланов в ядре и обновленный юзерспейс? Идите буратиньте в другом месте, гражданин ;)

Share this post


Link to post
Share on other sites

В том, что топикстартеру посоветовали накатить новую систему, чтоб избавиться от бага, это значит обновить _всё_, и возможно наловить новых глюков.

Share this post


Link to post
Share on other sites

автор, научитесь пользоваться ddb, kgdb. навыки ещё пригодятся.

Уважаемый, я умею ими пользоваться, но чтобы ловить проблему, необходимо одно из трёх:

1) watchdog, который перезапустит повисший сервер,

2) "специально подготовленный сержант", который нажмёт ресет,

3) готовность к даунтайму не менее получаса днём и х.з. сколько ночью.

 

Встроенного ватчдога там нет, внешнего тоже (пока?) нет, остальное неприемлемо.

 

я так понял PPTP у вас?

Нет. Причём здесь PPTP? Ему не был бы нужен прямой доступ в клиентские vlan'ы.

 

на вскидку напомню - flowtable?

Ок, попробую выключить, но вряд ли дело в нём.

На других серверах с ядром 8.2 (конфиг ядра и системы одинаковые) и похожей нагрузкой ничего не виснет.

Главное отличие - вместо Интелов на них используются встроенные Броадкомы.

 

также настройте DDB, чтобы сам большинство работы сделал и послал резет процессору.

Получит ли DDB управление, если даже kdb_backtrace виснет раньше, чем успевает распечатать полный листинг и отправить сервер в ребут?

 

netisr есть возможность выключить? (это конечно не решение проблемы, а воркарауд)

Что значит выключить?

Его можно вызывать либо из обработчика прерывания от сетевой карты, либо в отдельном потоке(потоках).

У меня используется первый вариант:

# sysctl net.isr
net.isr.numthreads: 1
net.isr.defaultqlimit: 256
net.isr.maxqlimit: 10240
net.isr.bindthreads: 0
net.isr.maxthreads: 1
net.isr.direct: 1
net.isr.direct_force: 1

/boot/loader.conf

ichwd_load="YES"
netgraph_load="YES"
dummynet_load="YES"
ng_ipfw_load="YES"
ng_netflow_load="YES"

kern.coredump=0
kern.hz=4000

# Intel network cards
hw.em.rxd=4096
hw.em.txd=4096
hw.em.enable_msi=1
hw.em.rx_int_delay=600
hw.em.tx_int_delay=600
hw.em.rx_abs_int_delay=1000
hw.em.tx_abs_int_delay=1000

/etc/sysctl.conf

kern.ipc.somaxconn=512

net.inet.ip.fw.verbose=1

net.link.ether.inet.log_arp_wrong_iface=0

net.inet.ip.dummynet.io_fast=1
net.inet.ip.dummynet.expire=0
net.inet.ip.fastforwarding=0
net.inet.ip.redirect=0

net.inet.ip.fw.dyn_buckets=2048         # default=256
net.inet.ip.dummynet.hash_size=512      # default=64

# Drop SYN without RST on closed ports
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1

# Igor Sysoev settings for Intel network cards:
# http://dadv.livejournal.com/49013.html

dev.em.0.rx_int_delay=600
dev.em.0.tx_int_delay=600
dev.em.0.rx_abs_int_delay=1000
dev.em.0.tx_abs_int_delay=1000
dev.em.0.rx_processing_limit=1024

dev.em.1.rx_int_delay=600
dev.em.1.tx_int_delay=600
dev.em.1.rx_abs_int_delay=1000
dev.em.1.tx_abs_int_delay=1000
dev.em.1.rx_processing_limit=1024

 

В том, что топикстартеру посоветовали накатить новую систему, чтоб избавиться от бага, это значит обновить _всё_, и возможно наловить новых глюков.

Понимаю Ваш сарказьм, коллега, но в данном случае переезд на Линукс рискует принести ещё больше головняка :)

Share this post


Link to post
Share on other sites

 

Если клиентские vlan'ы (<100) дотянуты до роутера и роутер шлёт в них трафик напрямую,

то каждые несколько дней роутер виснет намертво (см.картинку).

 

Вопрос 2: что в этой ситуации лучше/хуже - откат на 7.4, обновление до 8-STABLE, обновление до 9-RC?

 

Попробуйте поставить http://people.freebsd.org/~avg/stop_scheduler_on_panic.8.x.diff

Если usb-клавиатура то и http://people.freebsd.org/~avg/stop_scheduler_on_panic.usb.diff и попробуйте снять дамп. http://www.freebsd.org/doc/en/books/developers-handbook/kerneldebug.html#KERNELDEBUG-OBTAIN

Если дамп снимется, тогда будет что обсуждать.

 

В 9-Stable эти MFC уже есть.

Edited by Сильвер

Share this post


Link to post
Share on other sites

пусть выложит во время работы vmmstat -z

Смотреть надо только на все строки, или только с ненулевым failures?

Без виланов всё красиво:

# vmstat -z | egrep -v ' 0$'
ITEM                     SIZE     LIMIT      USED      FREE  REQUESTS  FAILURES

64 Bucket:                268,        0,      173,        9,      219,       13
128 Bucket:               524,        0,     2297,        6,     3399,      687

# netstat -m | grep -i den
0/0/0 requests for mbufs denied (mbufs/clusters/mbuf+clusters)
0/0/0 requests for jumbo clusters denied (4k/9k/16k)
0 requests for sfbufs denied

За подсказку в любом случае спасибо! :)

Share this post


Link to post
Share on other sites

На других серверах с ядром 8.2 (конфиг ядра и системы одинаковые) и похожей нагрузкой ничего не виснет.

Главное отличие - вместо Интелов на них используются встроенные Броадкомы.

Если это главное и единственное отличие, то логично предположить, что проблема в дровах Интела в связке с Фряхой.

В 9-ке более новые дрова на интеловские карты.

 

И как вы делаете Вланы - цисколайк?

Share this post


Link to post
Share on other sites

Если это главное и единственное отличие, то логично предположить, что проблема в дровах Интела в связке с Фряхой.

В 9-ке более новые дрова на интеловские карты.

Более новые - не есть обязательно хорошо.

Потому что в них могли не починить этот баг, а добавить другие.

На форуме pfsense написано, что у них данная проблема возникла именно после очередного обновления.

Поэтому я и рассматриваю откат на 7.4 как один из вариантов.

К сожалению, фактов для принятия решения пока маловато.

 

И как вы делаете Вланы - цисколайк?

Вот так:

for n in `jot - 100 199`; do
   v="vlan$n"
   a="10.10.$n.2/24"
   ifconfig $v create
   ifconfig $v inet $a vlan $n vlandev em0 up
done

Share this post


Link to post
Share on other sites

В том, что топикстартеру посоветовали накатить новую систему, чтоб избавиться от бага, это значит обновить _всё_, и возможно наловить новых глюков.

Только я в этом мире гружу фрю с флешек с подмонтированием винтов где нужно и куда нужно или еще кто-то? В виртуалке пересобрал мир+ядро+пактыпортапгрейдом, проверил, что все запускается, mdconfig прицепил образ, проинсталил систему потом в chroot проинсталил пакеты, нарисовал конфиги, при первом старте подправил ошибки. Геморойно немного, зато старую флешку потом воткнуть можно, если новая заглючит и парк серверов нада планировать изначально под такую схему.

Share this post


Link to post
Share on other sites

Только я в этом мире гружу фрю с флешек с подмонтированием винтов где нужно и куда нужно или еще кто-то?

 

С флэшками не балуюсь, но у меня есть резервный сервер, на котором и тренируюсь, в конце-концов погасить-поднять порты на каталисте можно и из дома.

Share this post


Link to post
Share on other sites

тема почему я презираю фряшников перешла в другие тематические темы :))))

 

 

на счет netisr, да неверно выразился, директ-ладно.

 

у вас роутер или сервер доступа?

 

kern.hz=4000 зачем это?

net.inet.ip.dummynet.io_fast=1 ?

 

 

если ватчдога нет, плата не на Intel-чипах чтоли? на других тоже не интел?

 

пы.сы. ватчдог DDB-у может помешать сделать свою работу.

 

 

 

стоит 7.2 с mpd5.3 на PPPoE серверах и молча работает... уже больше 3-х лет наверное.

 

 

В том, что топикстартеру посоветовали накатить новую систему, чтоб избавиться от бага, это значит обновить _всё_, и возможно наловить новых глюков.

полностью согласен.

надо выяснить причину падений. вплоть до анализа данных в mbuf-е

Edited by Giga-Byte

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