The OpenNET Project
 
Поиск (ключи):    ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
  WIKI НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

Решение проблемы с kernel panic на FreeBSD (dummynet, swi1:net, trap number = 12) (freebsd panic ipfw crash dummynet)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: freebsd, panic, ipfw, crash, dummynet,  (найти похожие документы)
From: Александр aka Radist <alex@brovis.net.ua.> Newsgroups: email Date: Mon, 09 Feb 2009 17:02:14 +0000 (UTC) Subject: Решение проблемы с kernel panic на FreeBSD (dummynet, swi1:net, trap number = 12) Вначале немного истории и лирики - решение в самом конце. Есть у меня сервер с FreeBSD (7.0). Материнка Microstar AMD 9650 на четыре ядра. Занимается VPN (poptop) и шейпингом (dummynet). Когда резко увеличили канал в интернет (с 20 до 100 мегабит) сервер начал падать пару раз в сутки. При падении выдавал что-то похожее: Fatal trap 12: page fault while in kernel mode current process = 11 (swi1: net) (на одном ядре) и current process = dummynet (на другом) trap number = 12 panic: page fault Подозрения на железо. Поменяли все (включая корпус). Не помогло. Поменяли версию операционки. Ставили 5.4, 6.2 потом поставили 7.1-RC2. Не помагает. Причем в половине случаев даже не сам перегружается. (Заготовили пару бубнов и начили разучивать шаманские танцы:) Временно решили проблему поднятием резерва с перехватом (резервной сервак постоянно пингует основной, когда ответа нет, меняет себе маки и отвечат на ВПН сам). Но это не дело (причем иногда он на пинги отвечал, зараза, нужно что-то другое анализировать или ставить аппаратные вачдоги). В /var/log/messages перед моментом падения появлелись сообщения ipfw: ouch!, skip past end of rules, denying packet. Интернет по этому поводу молчит. Все решения сводятся к манипуляцием с ядром и sysctl и заменой железа. Как правило замена железа помагала. (Как потом выснелось, в большинстве случаев ставилось более новое железо и просто падала общая нагрузка и глюки исчезали.) Раскопали, что в ряде прочессоров AMD 9550-9650 есть глюки с кешем. Попробывали на относительно стором двухядерном - то-же самое. Попутно опеределили, что версия 7.1-RC2 имеет в том числе два прекрасных усовершенствования. 1. При максимальной загрузке по процесу dummynet (более 90%) на предыдущих версиях резко повышался пинг (с 5 до 300 милисекунд) и держался таким пока загрузка не спадала. В новой версии при загрузке 100% пинги не повышаютя и шейпинг остается на приемлемом уровне (правда не понятно за счет чего это достигается, но все равно приятно) 2. Появилось пару новых ключей в sysctl которые снизили нагрузку на процессы dummynet и sw1: net что благоприятно отобразилось на загрузке всей машины и общей latency системы. Потом обратили внимание, что сервер пару раз падал на галзах при операциях с фаерволом. Добавление, удаление правил. Стали копать дальше. У нас в середине фаервола для каждого юзверя создается три правила которые отправляют пакеты на шейпинг. Одно для входящешго и два для исходящего (так надо). При изменении параметров тарифных пакетов клиента правила дропались, менялись параметры пайпов и новые правила создавались. Также аналогично правила создавались и для клиентов, которые вышли за лимит и т.д. Два раза в сутки все правила пересоздавались (в 12 и 8 - ночью скорости для клиентов в два раза выше). Падения сервера были примерно в 18-19 (час пик) и в 12 часов (как правило) . Значит проблема в манипуляциями с фаерволлом. Стали перед удалением правил и пайп делать команду ipfw add XXX skipto YYY all from any to any и давать задержку до 300 секунд перед удалением, чтобы явно все пакеты из пайп ушли. Стало лучше, но падения остались. Думали про altq. Подходит с большим скрипом. Во первых не шейпит входящие пакеты. Да можно их шейпить на исходящем интерфесе, но исходящие в моем случае - это динамически сосздаваемые и так-же динамически умирающие tun интерфейсы числом до 500. И как их обллуживать красиво и помощью altq - это тот еще вопрос. Да конечно, можно поставить еще одну машину, только для altq. (но это не решение проблемы - это борьба с последствиями). Второй скользкий вопрос - это поведение altq пр изагрузке процессора до 100%. Интернет говорит, что это поведение не очень, по крайней мере хуже dummynet. (не проверяли на практике, но dummynet на 7.2 при 100% загрузки себя ведет себя прекрасно) Накопали в инете переписку с коммитерами еще по 4 версии FreeBSD. (сейчас не смог найти что-бы дать ссылку) Речь шла о появлении сообщений ipfw: "ouch!, skip past end of rules, denying packet". Это сообщение появляется когда правило с которого ушли пакеты на dummynet удалено в то время пока в dummynet еще есть пакеты. По умолчанию такие пакеты дропаются (или разрешаются в зависимости от параметров ядра.) Как для меня представлялась система dummynet. Что-то вроде natd. Существуют трубы (pipe) и queue со своими параметрами. Правилом фаэрвола на них пересылается пакеты. После должной обработки пакеты возвращаются на фаэрвол (если другое поведение не определено настройками - пакет может просто разрешатся). Причем пакет возвращается не на правило с номером большим чем правило отправившее пакет на dummynet как это есть в natd, а пакет возвращается на СЛЕДУЮЩЕЕ правило. И в переписке сказано, что пайпа ДОЛЖНА иметь номер правила фаэрвола (очевидно последнего используемого, т.к. правил может быть много) с которого ушел пакет. Иначе там толи нул толи хз. И как оказалось, СИСТЕМА ПАДАЕТ КОГДА УДАЛЯЕТСЯ ПРАВИЛО КОТОРОЕ ОТПРАВЛЯЕТ ПАКЕТЫ НА DUMMYNET, причем без разницы, есть ли в данный момент пакеты на обработке dummynet. Причем, когда загрузка меньше 1 (в еденицах из top), то все нормально, а когда загрузка превышает 1 - вероятность падежа повышается прямо пропорционально загрузке. Решение: Никогда не удалять правила фаервола, которые отправляют пакеты в DUMMYNET. Создать при старте или при необходимости, определить пайпы или queue и не торгать их больше. Надо запретить пакеты - или deny раньше по фаерволу или дать пользователю пару бит в сек. Надо отменить шейпинг - говорим "bw 0" или сказать skipto. Да, есть мнение, что наличее ненужных pipe (так как скорость на них не лимитируется) только уменьшает производительность (занимают память и dummynet с частотой Hz (из параметров ядра) их обходит), но лучше так, чем kernel panic. После замены логики - сервер без перезагрузок более недели. P.S. Не пробывали только менять правила фаэрвола через сеты (ipfw set см. man ipfw) - быть может там другая ситуация

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, terminus, 14:53, 09/02/2009 [ответить] [смотреть все]
  • +/
    Спасибо за статью! А в рассылки FreeBSD писали о данной проблеме?
     
  • 1.2, Alive, 15:05, 09/02/2009 [ответить] [смотреть все]
  • +/
    Познавательно. Спасибо.
     
  • 1.3, stasav, 15:10, 09/02/2009 [ответить] [смотреть все]
  • +/
    Люди никак не научатся юзать таблицы =) Оттеда все ваши проблемы )
     
  • 1.4, Аноним, 15:35, 09/02/2009 [ответить] [смотреть все]
  • +/
    хм есть такой же сервер примерно фря 6 2 канал 10 мегабит проблем пока таких неб... весь текст скрыт [показать]
     
  • 1.5, xor2003, 15:36, 09/02/2009 [ответить] [смотреть все]  
  • +/
    это временное решение. правильное - багрепорт
     
     
  • 2.19, wtf, 20:38, 09/02/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    это не баг В списках рассылки об этом есть упоминание http lists freebsd org... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.21, Sem, 23:37, 09/02/2009 [^] [ответить] [смотреть все]  
  • +/
    Паника - всегда баг ... весь текст скрыт [показать]
     
  • 3.30, User294, 20:32, 10/02/2009 [^] [ответить] [смотреть все]  
  • +/
    Наверняка это такая, гм, фича ... весь текст скрыт [показать]
     
  • 1.6, byteplayer, 15:39, 09/02/2009 [ответить] [смотреть все]  
  • +/
    На такой тачке должен стоять FreeBSD 7.1 + mpd 5.2, который использует для нарезок на каждом туннеле ng_car, параметры которого передаются от FreeRadius, который, в свою очередь берёт их из базы данных в момент коннекта юзера. Так можно хоть 300М роутить с тыщей туннелей, а кто-то может смог и более, а на рортор в юзер-левеле много не промаршрутизируешь.
     
     
  • 2.28, Radist, 20:13, 10/02/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    ИМХО mpd не подойдет, т к судя по описанию работает в один поток, а хочется исп... весь текст скрыт [показать] [показать ветку]
     
  • 1.7, stasav, 15:48, 09/02/2009 [ответить] [смотреть все]  
  • +/
    ng_car не выход, в случае частичной зарезки скорости по диапазонам адресов он не подходит, так как вешается на интерфейс.

     
  • 1.8, mummy, 15:52, 09/02/2009 [ответить] [смотреть все]  
  • +/
    Никогда не было проблем. Перегружал так
    1) Выключить ограничение
    /sbin/ipfw add 999 allow all from any to any
    sleep 3

    2) Генерируем файл /tmp/fw.tmp:

    disable firewall
    flush
    pipe flush
    queue flush
    add 1    allow tcp from 192.168.99.2 to me 22
    add 2    deny tcp from any to me 22
    add 1000 pipe 1 ip from 192.168.1.11 to any
    add 1001 pipe 2 ip from any to 192.168.1.11
    ...
    ...
    enable firewall

    3) Проверка правил на ошибки и перегрузка настроек
    /sbin/ipfw -qn /tmp/fw.tmp
    if [ "$?" != "0" ]; then
          echo "There was errors in rules."
          exit 1
    fi
    /sbin/ipfw -q /tmp/fw.tmp

     
     
  • 2.16, mummy, 20:24, 09/02/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    P S У меня sysctl net inet ip fw one_pass 1 net inet ip fw one_pass 1 Forces ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.26, Radist, 18:50, 10/02/2009 [^] [ответить] [смотреть все]  
  • +/
    Не проходит, т к шейпов у меня несколько - на юзера, на групу, на тип трафика и... весь текст скрыт [показать]
     
  • 2.25, Radist, 18:47, 10/02/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    У меня время пересоздавания до т 1110 сячи правил на загруженой машине сейчас ... весь текст скрыт [показать] [показать ветку]
     
  • 1.9, Buba, 16:13, 09/02/2009 [ответить] [смотреть все]  
  • +/
    Тут говорилось про altq но шейпер лучше вынести на отдельную машину и использовать полноформатный altqd (в нём присутвует возможность обреза входящего трафа и динамические очереди) в NetBSD у него возможностей больше чем у dummynet и работает стабильно у меня на 100мегабитной нагрузке уже больше года.
     
  • 1.10, Samm, 17:07, 09/02/2009 [ответить] [смотреть все]  
  • +/
    Спасибо за описание проблемы. Оформили ли вы PR по результатам?
     
     
  • 2.22, dansoftware, 13:49, 10/02/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Это старая и до сих пор нерешенная проблема http www freebsd org cgi query-pr... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.23, Samm, 13:53, 10/02/2009 [^] [ответить] [смотреть все]  
  • +/
    Тут нигде не сказано про панику ... весь текст скрыт [показать]
     
     
  • 4.24, dansoftware, 14:11, 10/02/2009 [^] [ответить] [смотреть все]  
  • +/
    Справедливое замечание Тем не менее, на этот PR я наткнулся, когда разбирался с... весь текст скрыт [показать]
     
  • 2.27, Radist, 18:52, 10/02/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Ничего не формлял В силу различн 1110 х причин ... весь текст скрыт [показать] [показать ветку]
     
  • 1.11, Аноним, 17:32, 09/02/2009 [ответить] [смотреть все]  
  • +/
    Автор, можешь расшифровать это предложение Чем первое утверждение отличается от... весь текст скрыт [показать]
     
     
  • 2.12, terminus, 17:52, 09/02/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    цитата из http nuclight livejournal com 124348 html Подобное выведение па... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.14, Аноним, 18:38, 09/02/2009 [^] [ответить] [смотреть все]  
  • +/
    Спасибо, так понятнее Могу, однако заметить, что сообщения вполне безобидны и... весь текст скрыт [показать]
     
  • 1.13, cvsup, 18:17, 09/02/2009 [ответить] [смотреть все]  
  • +/
    конечно, ведь проще подковать блоху, чем оповестить  мантейнера
     
  • 1.15, wtf, 19:38, 09/02/2009 [ответить] [смотреть все]  
  • +/
    Вся проблема в этом net.inet.ip.fw.one_pass если выставить в 0 то ipfw:ouch!, skip past end of rules, denying packet не будет, если эта переменная всеже необходима то я решал проблему отказом от ipfw flush.
    Да и интернет не молчит http://www.google.ru/search?q=ipfw:+ouch!,+skip+past+end+of+rules,+denying+packet.++&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru-RU:unofficial&client=firefox-a
     
     
  • 2.17, mummy, 20:26, 09/02/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Может выставить в 1 По-умолчанию ведь 0 ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.18, wtf, 20:33, 09/02/2009 [^] [ответить] [смотреть все]  
  • +/
    да в 1, при этом параметры пакет проходит только через первое подходящее правило, при 0 он проходит через все правила, отсюда и ошибка - во время флуша пакет не находит следующего правила в которое он был отправлен.
     
  • 1.20, pashaumka, 23:36, 09/02/2009 [ответить] [смотреть все]  
  • +/
    не знаю как у вас с mpd, но у меня работа построена на pppoed & ppp  - 100 мбит канал и при подключении/отключении создаются и удаляются правила - серваки жужжат и не парятся...150 сессий - 10% загрузки железок. всё железо на интеловых серверных матерях
     
     
  • 2.29, Radist, 20:25, 10/02/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    У меня 600 сессий ВПН и одновременно ломятся в инет до 100.

    Сейчас прошло уже более месяца. Серваки ни разу (сплюнуть три раза через плечо) не ребутнулись

    З.І. Похожая проблема обнаружилась еще на одном серваке (АМД, два ядра, 6.5 фря, занимается НАТ в пять потоков, т.к. в один поток не справляется). Правил фаєрвола до 300, но есть пару пайп. Иногда при нагрузке близкой к 4 (в еденицах топа), когда удалял правило фаєрвола, все єто чудо просто ребуталось (даже без дампа и сообщений в логах). Исправил по образу и подобию, пока все гуд.

    З.З.І. Спользовать общие пайпі на несколько юзеров немог, т.к. используется система бонусов и у каждого юзверя своя скорость.

    Испольщовать таблиці (имеестя в виду tablearg), можно, но только если не удалять соответствующие правила, а править параметрі пайп. Тоесть все то-же самое.

     
     
  • 3.31, Аноним, 12:27, 12/02/2009 [^] [ответить] [смотреть все]  
  • +/
    Так и знал, что машину времени уже изобрели ... весь текст скрыт [показать]
     
     
  • 4.32, Radist, 20:28, 13/02/2009 [^] [ответить] [смотреть все]  
  • +/
    >>6.5 фря
    >
    >Так и знал, что машину времени уже изобрели.

    Sorry, 6.2

     
  • 1.33, Pahanivo, 12:51, 08/05/2009 [ответить] [смотреть все]  
  • +/
    хотелось бы взглянуть на ipfw -a list у афтора ))
     
  • 1.34, ak, 19:17, 08/05/2009 [ответить] [смотреть все]  
  • +/
    Наблюдаю аналогичную проблему на FreeBSD + mpd4 на больших нагрузках (сотни тунелей, десятки килобит в секунду). Причем как на AMD, так и Intel. Как с net.inet.ip.fw.one_pass: 1 так и 0. Как с net.inet.ip.dummynet.io_fast=1, так и 0. Но действительно, на системах, где правила активно удаляются, намного чаще.

    есть очень схожие багрепорты:
    http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/121382
    http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/118128
    оба открыты. Все собираюсь дописать, собираю информацию. Напишите плз туда свое наблюдение.

     
     
  • 2.35, ak, 11:50, 12/05/2009 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    >десятки килобит в секунду

    *десятки мегабит в секунду, сори

     
  • 1.36, napTu, 22:11, 16/03/2010 [ответить] [смотреть все]  
  • +/
    интересная статейка, а я то думал отчего у меня паник был постоянный после пересборок ядра, обновлений фри...

    Что интересно, решилось пересборкой ядра с режимом отладки. После этого не падает.

    Правда нет mpd, работает как основной шлюз с авторизацией stargazer, но правила постоянно добавляются-удаляются в зависимости от активности абонентов(не в моменты подключения-отключения)
    Последовательность следующая:
    ipfw delete $rulenum
    ipfw pipe delete $rulenum
    ...
    ipfw pipe $rulenum config bw $speed2
    ipfw add $rulenum3 pipe $rulenum ip from...

     
  • 1.37, napTu, 22:16, 16/03/2010 [ответить] [смотреть все]  
  • +/
    а, кстати, говорят что то подправили в dummynet с месяц назад, связанное с падениями при 100% загрузке
    у меня недавно упал сервак при выключении dummynet_io_fast в 0 на ядре 7.2p3
    Знающие люди порекомендовали обновиться на последние патчи.
     
  • 1.38, napTu, 10:09, 26/05/2010 [ответить] [смотреть все]  
  • +/
    недавно понадобилось грохнуть все правила с pipe. Упали...
    FreeBSD 7.2-RELEASE-p7
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:



    АКЦИЯ! ПОДПИШИСЬ на журнал Linux Format до 31 января 2012 года и выиграй СУПЕРПРИЗ!

    Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке, посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.

    Каждый, кто оформит подписку, получает бонус- объёмные наклейки на системный блок и подарки: с одним из первых выпусков журнала в 2012 году- диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную версию журнала в pdf-формате.

    Подробнее о проведении акции вы можете прочитать на странице сайта.


      Закладки на сайте
      Проследить за страницей
    Created 1996-2012 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    RUNNet TopList