FreeBSD 7.3 ng_nat ng_queue 100%

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
vasaf
рядовой
Сообщения: 32
Зарегистрирован: 2009-04-09 12:25:38

FreeBSD 7.3 ng_nat ng_queue 100%

Непрочитанное сообщение vasaf » 2011-11-21 15:09:26

Стоит FreeBSD 7.3-RELEASE, amd64
Используется следующая схема прохождения трафика:
LAN -> FreeBSD -> Inet -> PPTPServer Т.е. пользователи из сети (примерно 500-700 человек) подрубаются через Фрю (на которой ipfw + ng_nat с alias_pptp.ko) к PPTP Серверу и пользуют Интернет через Фрю.
Работает все стабильно, пока в какой-то момент не появляется высокая задержка трафика (любого) при прохождении ноды ng_nat в нетграфе, в цифрах: 300-400мс против 3-5мс нормальных. В это время один из процессов ng_queue (всего их 4 согласно 4-м ядрам процессора) загружается на 100%.
Чтобы вернуть задержку в норму, единственное найденное решение это удаление ноды ng_nat и создание ее заново, но при этом уничтожаются все созданные PPTP тоннели, которые проходят через фрю на впн-сервер - это очень плохо.
Кто подскажет где посмотреть в чем может быть дело?

Доп. инфа:
Основная нагрузка на интерфейсе 90% из 100мбит это PPTP тоннели, в момент появления проблемы необязательно что канал загружен максимально.
Процессы ng_queue разнесены на разные ядра через cpuset.
Для поиска этой проблемы строение нод в системе нетграф было упрощено максимально: к netgraph подключается одна нода ng_nat и все.
Правил ipfw для прохождения созданных тоннелей всего штук 5:

Код: Выделить всё

00050 allow ip from серые_ИП to ВПН_Серверы in
00052 netgraph 3 ip from серые_ИП to ВПН_серверы out xmit em2
00054 allow ip from внешний_ИП to ВПН_серверы out xmit em2
00056 netgraph 10 ip from ВПН_серверы to внешний_ИП in recv em2
00058 allow ip from ВПН_серверы to серые_ИП

Код: Выделить всё

vmstat -z | grep tG
NetGraph items:            72,    16425,        0,      810, 154483843,        0
NetGraph data items:       72,    16425,        2,     5038, 19970851356,        0
Есть дропы пакетов UDP, но не думаю что это связано с моей проблемой. Убрать эти дропы пока не знаю как.

Код: Выделить всё

netstat -s -p udp
udp:
        70579151 datagrams received
        0 with incomplete header
        0 with bad data length field
        0 with bad checksum
        110034 with no checksum
        [b]641719 dropped due to no socket
        1310676 broadcast/multicast datagrams undelivered[/b]
        171 dropped due to full socket buffers
        0 not for hashed pcb
        68626585 delivered
        67564424 datagrams output
        0 times multicast source filter matched
Тюнинг:

Код: Выделить всё

net.inet.tcp.recvbuf_max=262144
net.inet.tcp.sendbuf_max=262144
net.inet.tcp.recvbuf_inc=16384
net.inet.tcp.sendbuf_inc=8192
kern.ipc.shmall=8388608
kern.ipc.somaxconn=8192
net.local.stream.recvspace=65535
net.local.stream.sendspace=65535

Код: Выделить всё

alias_pptp_load="YES"
if_em_load="YES"
Замечено, что при sysctl net.isr.direct=0 процесс ng_queueX перестает грузится в 100%, плавно снижаясь до рабочих величин, но при возрастают потери на канале.
Внешний интерфейс:
em2: <Intel(R) PRO/1000 Network Connection 6.9.6> port 0x5000-0x501f mem 0xb8800000-0xb881ffff,0xb8000000-0xb83fffff irq 19 at device 0.1 on pci4
em2: Using MSI interrupt

Что делать? Где смотреть?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

vasaf
рядовой
Сообщения: 32
Зарегистрирован: 2009-04-09 12:25:38

Re: FreeBSD 7.3 ng_nat ng_queue 100%

Непрочитанное сообщение vasaf » 2011-12-10 19:04:41

В ситуации с загрузкой процесса ng_queue под 100% какая может быть связь с нодой ng_nat (убив ее и создав заново нагрузка на процессе ng_queue сразу падает до нормальных величин) и с задержками на других сетевых интерфейсах.
Имеется 5 физических фейсов смотрящих в локальную сеть и один внешний, так вот нода ng_nat и все правила ipfw netgraph обрабатываются на внешнем интерфейса. Но почему-то когда ng_queue загружается под 100% на двух из пяти фейсах, смотрящих в локальную сеть, появляются такие же задержки как и на внешнем интерфейсе, причем никаких правил ipfw netgraph на них нет. Но как только убиваешь и создаешь ноду ng_nat, так везде задержка пропадает.

vasaf
рядовой
Сообщения: 32
Зарегистрирован: 2009-04-09 12:25:38

Re: FreeBSD 7.3 ng_nat ng_queue 100%

Непрочитанное сообщение vasaf » 2011-12-16 11:50:41

Скачал сорцы новых дров с сайта интела, собрал поставил. Версия 7.2.4.
Нагрузка на процессы ng_queue упала в разы, за последнюю неделю процесс ng_queueX в 100% не уходил.

Ответов в теме от других пользователей нема. Проблема вроде решилась.
Тему закрывайте.
Разговор "сам с собой" прошел успешно :-D