пятница, 4 апреля 2008 г.

Война с dummynet

Интересно - я первый? Или до меня куча народа наступила на грабли с использованием mpd-5.0 во FreeBSD 7.0 вместе с dummynet?

Как оказалось система почему-то не захотела жить в одном из сегментов сети. И причем именно там. Потому как переехав на стол для теста - она сразу же начинала вести себя хорошо.
Но стоило вернуться в клиентскую сеть - и паника не заставляла себя ждать. Пара-тройка минут и double fault тут как тут.

Почесал репу, подумал. Для теста был остановлен mpd5. К удивлению - паники не было. Запуск же последнего неминуемо вел в панику.

Словил пару дампов. У одного из этих и почти у всех последующих оказался побит стек в дампе. Так что отследить траблу не удавалось. Но в одном из первых дампов уцелело упоминание ipfw. А как позже выяснилось - dummynet.

По собранной информации - в 7.0-STABLE коммитились патчи, уменьшающие аппетит netgraph к стеку к концу всех его вызовов. Да и народ из freebsd-ipfw@freebsd.org посоветовал до STABLE попробовать накатится. Попробовал. Так сказать - немножко полегчало. Паниковать стали не через 3-5 минут, а через 3-4 часа, или даже 1-2 суток. Ну тут как повезет.

Далее от одного из разработчиков приехал патч, мержевший изменения из HEAD на тему убирания рекурсии из dummynet. Помимо прочего эти изменения включали в себя новую sysctl переменную net.inet.ip.dummynet.io_fast, определявшую дословно следующее - либо полностью эмулировать канал с заданной пропускной способностью - включая задержки пакетов, либо просто срезать ширину канала при необходимости.
С дефолтным значением "полной эмуляции" мы выпали в панику менее чем через час. С вторым вариантом значения живем уже 1,5 суток. Посмотрим что будет дальше - а то рука уже напоготове до лучших времен заменить dummynet на ng_ipfw + ng_car. Только бы не оказалось так, что и тут будет проблема глубины стека......

4 комментария:

Vladimir Kobal комментирует...

Чем же война закончилась? Очень интересно, поскольку сами воюем с dummynet. Пока безуспешно :(.

Alexander комментирует...

Патчик прошел тестирование и был смержен из HEAD в STABLE. Так что, думаю в 7.0-STABLE уже должны быть изменения. Единственное, замеченное в виде патча неудобство - нужно выставить в net.inet.dummynet.....io_fast в единичку, чтобы он не пытался эмулировать реальный линк с заданными характеристиками, а просто подрезал скорость. С io_fast=0 он у меня иногда продолжал падать в панику.
Кроме того, желательно не использовать одновременно mpd-limit (ng_car) и dummynet - это повышало вероятность переполнения стека.
И наконец, я для себя решил эту граблю перетягиванием парочки серверов под Linux. :)

Vladimir Kobal комментирует...

А при одновременном использовании ng_car и dummynet машина падала даже с io_fast=1?

Alexander комментирует...

С io_fast=1 вроде бы проблем не было. Но могу ошибаться.