dadv: (chuck)
Choose your future ([personal profile] dadv) wrote2014-11-17 09:34 pm
Entry tags:

dummynet и паника "bad switch -256!"

В продолжение темы.

После того, как Глеб исправил несколько проблем в ядре FreeBSD, нагруженные роутеры с mpd5/PPPoE у меня работают стабильно. Однако, где-то раз в год всё-таки на каком-нибудь из них нет-нет, да и произойдет паника и все следы ведут в dummynet. Но раньше по разным причинам не удавалось сохранить одновременно крешдамп и отладочное ядро, а сегодня-таки удалось.

По итогам предварительного разбирательства найдено подозрительное место в коде dummynet и оформлен PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=195102

Судя по коду, проблема общая и для 9.x, 10.x и CURRENT - это место практически неизменно во всех ветках. Теперь главное, чтобы PR не завис незамеченным на годы.

[identity profile] http://users.livejournal.com/_apm_/ 2014-11-17 05:35 pm (UTC)(link)
А в целом помогите.

Вот у меня pppoe/mpd5, ngcar и dummynet тоже.

Пора на десятку?

[identity profile] dadv.livejournal.com 2014-11-17 06:59 pm (UTC)(link)
Работает - не трогай. Вот у меня 8.4 скоро саппорт кончится, я подумываю 10.1 попробовать в той же конфигурации, да. Но у меня ещё и NanoBSD, там с пакетами будут проблемы из-за нового pkg. Надеюсь, решаемые.

[identity profile] http://users.livejournal.com/_apm_/ 2014-11-17 07:08 pm (UTC)(link)
нене, работает оно работает.

Но железо не вечно. Оно там уж прилично трудится, нужно переезжать на соседнее железо,
И вот я в раздумьях, чего брать то.

[identity profile] dadv.livejournal.com 2014-11-17 07:34 pm (UTC)(link)
В случае с NanoBSD переезд на новое железо заключается в заливании образа на новый носитель. Ну, может, ещё loader.conf подправить под другие сетевые и rc.conf тоже.

Для традиционной инсталляции переезд тоже может заключаться в dump/restore.

[identity profile] guest-o.livejournal.com 2014-12-03 08:35 pm (UTC)(link)
На десятку пока не очень пора. Там есть бага, что при создании или закрытии пачкой кучи соединений mpd зависает наглухо. Конкретно мы столкнулись с этим когда на одном из bras–ов запретили приём новых соединений, чтобы пользовательские сессии на другие сервера переехали. В итоге через сутки обнаружили, что сессий ещё осталось более 80 по данным мониторинга, хотя по факту mpd глухо висел, даже в логи не писал ничего.

[identity profile] dadv.livejournal.com 2014-12-04 07:02 pm (UTC)(link)
Не будешь репортить проблему - и в 11.1 будет не пора.

[identity profile] guest-o.livejournal.com 2014-12-04 07:16 pm (UTC)(link)
Багрепорт там уже есть, просто по нему движения пока нет. Завтра на работе буду, уточню номер.

[identity profile] guest-o.livejournal.com 2014-12-04 07:31 pm (UTC)(link)
Нашёл. Вот с этой граблей столкнулись: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=186114

[identity profile] guest-o.livejournal.com 2014-12-04 07:31 pm (UTC)(link)
Кстати, товарищ. Вы на ruBSD 14-го декабря в Москву не собираетесь?

[identity profile] dadv.livejournal.com 2014-12-05 06:01 am (UTC)(link)
Нет.

[identity profile] guest-o.livejournal.com 2014-12-09 12:44 pm (UTC)(link)
А имеет смысл в уже существующий репорт дописать чего-нибудь? Типа "у нас тоже всплыла эта проблема"? Я бы подебажил её, только не знаю, как. Да и там вроде репортер достаточно информации предоставил, даже не знаю, что там можно добавить.

[identity profile] dadv.livejournal.com 2014-12-09 12:51 pm (UTC)(link)
Чем больше отзывов от разных людей, тем лучше. Если можешь позволить себе подебажить и собрать хорошую статистику - можно оформить отдельный PR, а в старый добавить комментарий со ссылкой на свой.

Для дебага лучше всего почитать главу Kernel Debug в Developers Handbook (раньше эта глава была в основном Handbook, зачем убрали в девелоперский, непонятно). Первым делом нужно собрать отладочное ядро (kernel.debug) плюс добавить в его конфиг INVARIANTS/WITNESS/DIAGNOSTICS (для начала можно только INVARIANTS) с тем, чтобы вместо тупого зависания спровоцировать раннюю панику и получить крешдамп, с которым дальше по Handbook поступать.

Из-за высокой вероятности и даже желаемости паники тестовое ядро желательно загружать через nextboot (однократная загрузка тестового ядра), чтобы не получить циклический ребут из-за паники при старте.

[identity profile] guest-o.livejournal.com 2014-12-09 12:54 pm (UTC)(link)
Окэ, спасибо. Соберу тестовый стенд, попробую с помощью твоих скриптов создать соответствующую нагрузку и подебажить.

[identity profile] http://users.livejournal.com/_apm_/ 2014-12-08 11:04 am (UTC)(link)
И как жить?
9.3 или чего там?

[identity profile] guest-o.livejournal.com 2014-12-08 02:22 pm (UTC)(link)
Пока живём на 9.3, да. На ней всё ровно. Ну вот я тут с хозяином журнала общаюсь в ru-root по поводу стресс-теста на BRASах. С помощью написанных им скриптов можно будет потестить фрю 10.1. Вероятнее всего, этот баг всплывёт при создании/убивании кучи соединений. Если не всплывёт, то или попутно с чем-нибудь починили, или совпадение, и надо стресс-тестировать дальше :-) Потому как в баг-репорте пока движения нет: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=186114

[identity profile] http://users.livejournal.com/_apm_/ 2014-11-17 07:08 pm (UTC)(link)
Новый pkg это песня.

Я прям не знаю что и делать, я понимаю оно может хорошо.
Но у меня всё поперек.

У меня и привычки, и миилон скриптов всяких и пуппеты, всё лесом пошло.

[identity profile] dadv.livejournal.com 2014-11-17 07:35 pm (UTC)(link)
Аналогично. Допиливать придётся, чо.

(Anonymous) 2014-11-18 06:41 am (UTC)(link)
Если не затруднит - сообщите о результатах с 10.1
Использую 8-STABLE - работает отлично. В этом году пытался перейти на 9/10 - при небольшой нагрузке система паниковала стабильно раз в неделю-две.

[identity profile] dadv.livejournal.com 2014-11-18 06:44 am (UTC)(link)
Это будет, скорее всего, не раньше января.

[identity profile] coolcold.livejournal.com 2015-03-24 08:54 pm (UTC)(link)
Январь наступил, появились новости?

[identity profile] dadv.livejournal.com 2015-03-25 04:02 am (UTC)(link)
Вообще-то наступил март, но от этого не легче. Пока много других дел, десятку попробовать времени не было.