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

Ухудшение пинга и потери при >500 VPN юзеров

Сервер на Linux 2.6.18 терминирует PPTP. При количестве клиентов более 500, пинг сильно скачет от 1 до 400 мс и появляются потери 5 - 10 на 1000 пакетов. NAT отсутствует, шейпинг отсутствует.

Пингую внутренний сервер, т.е. трафик проходит транзитом через VPN и сразу на сервер.

HZ в ядре 1000, загружал ядро с HZ 250, на ситуацию это не влияет.

PPTP в юзерспейс.

 

Сетевушки вот такие:

Realtek Semiconductor Co., Ltd. RTL-8169 Gigabit Ethernet

driver: r8169

version: 2.2LK-NAPI

 

Подскажите в чем может быть проблема и как продиагностировать?

Edited by SokolovS

Share this post


Link to post
Share on other sites

Причем в основном пинг около 2 мс, но иногда на 4-5 пингов подскакивает на уровень от 100-400.

Транзитный трафик порядка 50-60 Мбит в пике.

При ~500 и более юзерах примерно так:

top - 23:21:35 up 8 days, 13:37,  1 user,  load average: 6.55, 10.44, 12.25
Tasks: 950 total,  48 running, 902 sleeping,   0 stopped,   0 zombie
Cpu(s):  8.3% us, 22.3% sy,  0.1% ni, 18.9% id,  0.0% wa,  6.5% hi, 43.9% si,  0.0% st
Mem:   2070088k total,  1309244k used,   760844k free,   717928k buffers
Swap:  2008084k total,        0k used,  2008084k free,   237448k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
4953 root      16   0  2620 1528  796 R    6  0.1   0:04.54 top
25882 root      16   0  1624  592  460 R    6  0.0   0:22.43 pptpctrl
2631 root      15   0  1620  636  460 S    5  0.0   0:47.05 pptpctrl
10068 root      15   0  1884  848  460 S    4  0.0  13:27.69 pptpctrl
23928 root      15   0  2016  984  460 R    4  0.0 541:44.76 pptpctrl
20712 root      15   0  1888  856  460 S    4  0.0  16:51.05 pptpctrl
2259 zabbix    20   5  2032  428  336 S    3  0.0  61:23.58 zabbix_agentd
21026 root      15   0  1756  708  460 R    3  0.0 156:56.35 pptpctrl
    6 root      34  19     0    0    0 R    3  0.0 402:30.85 ksoftirqd/1
2258 zabbix    21   5  2028  416  324 S    3  0.0  60:37.35 zabbix_agentd
2052 root      16   0  1624  660  460 R    3  0.0   2:59.17 pptpctrl
    3 root      34  19     0    0    0 S    3  0.0 380:09.75 ksoftirqd/0
27856 root      15   0  1752  724  460 S    3  0.0  20:53.51 pptpctrl
19952 root      16   0  1624  592  460 R    3  0.0   1:30.71 pptpctrl
15005 root      15   0  1620  608  460 R    3  0.0   5:26.62 pptpctrl
6846 root      15   0  1624  660  460 S    2  0.0   3:42.44 pptpctrl
22669 root      15   0  1620  576  460 S    2  0.0   0:36.41 pptpctrl
23600 root      15   0  1620  612  460 S    2  0.0   1:25.39 pptpctrl
3469 root      15   0  1620  560  460 S    2  0.0   0:07.88 pptpctrl
11698 root      15   0  1620  616  460 R    2  0.0   8:50.72 pptpctrl
20862 root      15   0  1620  668  460 S    2  0.0   2:25.13 pptpctrl
7949 root      15   0  1620  672  460 R    2  0.0  10:13.71 pptpctrl
15940 root      15   0  1756  704  460 R    2  0.0  19:13.38 pptpctrl
23020 root      15   0  1620  588  460 R    2  0.0   7:14.14 pptpctrl
6595 root      15   0  1624  676  460 R    2  0.0  14:09.27 pptpctrl
18975 root      15   0  1620  676  460 S    2  0.0   7:08.20 pptpctrl
16515 root      15   0  1620  612  460 R    2  0.0   1:57.41 pptpctrl
18486 root      15   0  1620  600  460 R    2  0.0   1:42.89 pptpctrl
27132 root      15   0  1624  584  460 S    2  0.0   0:59.51 pptpctrl
11944 root      15   0  1624  560  460 R    1  0.0   1:01.02 pptpctrl
25137 root      15   0  1620  636  460 R    1  0.0   5:58.47 pptpctrl
12103 root      15   0  1624  568  460 D    1  0.0   0:22.76 pptpctrl

Edited by SokolovS

Share this post


Link to post
Share on other sites
oprofile
Рано ещё его читать.

Dmesg ни на что не ругается ?

Share this post


Link to post
Share on other sites
oprofile
Рано ещё его читать.

Вот и я так подумал, камень то грузит не на 100%, т.е. нехватки процессорного времени нет.

 

Dmesg ни на что не ругается ?
Есть вот такой варнинг... больше ничего нет

BUG: warning at kernel/cpu.c:51/unlock_cpu_hotplug()
[<c0137598>] unlock_cpu_hotplug+0x2c/0x54
[<c02914f2>] store_speed+0x99/0xa2
[<c0291459>] store_speed+0x0/0xa2
[<c0290309>] store+0x31/0x41
[<c0197227>] sysfs_write_file+0xa5/0xcf
[<c0197182>] sysfs_write_file+0x0/0xcf
[<c0161ef7>] vfs_write+0xa6/0x14b
[<c0162783>] sys_write+0x3c/0x63
[<c0102be5>] sysenter_past_esp+0x56/0x79

Share this post


Link to post
Share on other sites

Вот и я так подумал, камень то грузит не на 100%, т.е. нехватки процессорного времени нет.

Чтоб узнать, например, что прерывания грузят проц на 30% и нужно включить NAPI, вовсе не обязательно ждать, пока система загнется. Считайте, что профайлер - тот же top, но не риалтаймовый, а статистический. Имхо, от общей статистики больше толку, чем от моментальных величин в любой момент времени.

Share this post


Link to post
Share on other sites

2EvilShadow: а разве решение использовать NAPI не сам драйвер сетевушки принимает?

У меня в пике больше 20 kpps не бывает.

Edited by SokolovS

Share this post


Link to post
Share on other sites

Он может просто быть собран без поддержки NAPI :)

Share this post


Link to post
Share on other sites
Он может просто быть собран без поддержки NAPI :)
См. первый пост

 

Меня вот что смущает.

# cat /proc/interrupts

...

11: 249357177 3425257197 XT-PIC libata, ohci1394, eth3, eth4

...

 

Обе сетевушки висят на однмо прерывании. Это вобще нормально?

Edited by SokolovS

Share this post


Link to post
Share on other sites
iptables покажи ?
#!/bin/sh

# Сменим на каталог размещения скрипта
FWDIR=`dirname $0`
cd $FWDIR

# Исполняемый файл iptables
IPTABLES="iptables"

# Интерфейсы
LO_IFACE="lo"
LAN_IFACE="eth3"
SRV_IFACE="eth5"
INET_IFACE="eth4"
CLIENT_IFACE="ppp+"

# Сети и адреса
LOCAL_NET="x.x.x.x/16"
OFFICE_NET="x.x.x.x/22"
LAN_IP="x.x.x.x"
GRAY_NET="x.x.x.x/16"
# Белая сеть
OUR_NETWORK="x.x.x.x/22"

# Названия цепочек
LOCAL="ZLOCAL"
BILLING="ZBILLING"

# Очистить таблицы
$IPTABLES -F
$IPTABLES -X

# Политика по умолчанию IPv4
$IPTABLES -P FORWARD DROP

##########################################
# Билинг, forward трафик
##########################################
$IPTABLES -N $BILLING

# [ACCOUNTING] Считаем трафик на собственную белую подсеть
$IPTABLES -A $BILLING -d $OUR_NETWORK -j ULOG --ulog-prefix "FWD_IN"

# [ACCOUNTING] Считаем трафик на серую подсеть
$IPTABLES -A $BILLING -o $CLIENT_IFACE -d $GRAY_NET -j ULOG --ulog-prefix "FWD_IN"

# Разрешаем трафик в выданную подсеть для машин со статическими адресами
$IPTABLES -A $BILLING -i $SRV_IFACE -s $OUR_NETWORK -j RETURN
$IPTABLES -A $BILLING -o $SRV_IFACE -d $OUR_NETWORK -j RETURN

# Разрешаем трафик в выданную подсеть для юр.лиц
$IPTABLES -A $BILLING -i $INET_IFACE -s $OUR_NETWORK -j RETURN
$IPTABLES -A $BILLING -o $INET_IFACE -d $OUR_NETWORK -j RETURN

# Разрешаем трафик на собственную подсеть для VPN-клиентов
$IPTABLES -A $BILLING -i $CLIENT_IFACE -s $OUR_NETWORK -j RETURN
$IPTABLES -A $BILLING -o $CLIENT_IFACE -d $OUR_NETWORK -j RETURN

# Разрешаем на серую подсеть для VPN-клиентов
$IPTABLES -A $BILLING -i $CLIENT_IFACE -s $GRAY_NET -j RETURN
$IPTABLES -A $BILLING -o $CLIENT_IFACE -d $GRAY_NET -j RETURN

# Все остальное удалить
$IPTABLES -A $BILLING -j DROP

##########################################
# Disable conntrack for transit
##########################################
$IPTABLES -t raw -A PREROUTING -i $CLIENT_IFACE -s $OUR_NETWORK -j NOTRACK
$IPTABLES -t raw -A PREROUTING -d $OUR_NETWORK -j NOTRACK

$IPTABLES -t raw -A PREROUTING -i $CLIENT_IFACE -s $GRAY_NET -j NOTRACK
$IPTABLES -t raw -A PREROUTING -d $GRAY_NET -j NOTRACK

##########################################
# Цепочка для локальной сети
##########################################
$IPTABLES -N $LOCAL
$IPTABLES -A $LOCAL -p TCP -i $LAN_IFACE -s $OFFICE_NET --dport 10050 -j ACCEPT         # Zabbix Agent
$IPTABLES -A $LOCAL -p TCP -i $LAN_IFACE --dport 22 -j ACCEPT                           # SSH
$IPTABLES -A $LOCAL -p TCP -i $LAN_IFACE --dport 1723 -j ACCEPT                         # PPTP 
$IPTABLES -A $LOCAL -p GRE -i $LAN_IFACE -j ACCEPT                                      # GRE

##########################################
# Разрешающие INPUT правила
##########################################
$IPTABLES -A INPUT -p ICMP --icmp-type echo-request -j ACCEPT                       # Ping (все пинги)
$IPTABLES -A INPUT -p UDP -m udp --sport 32769:65535 --dport 33434:33523 -j ACCEPT  # Traceroute

# Отправить в цепочку для локальной сети
$IPTABLES -A INPUT -i $LAN_IFACE -s $LOCAL_NET -j $LOCAL

# Разрешать все loopback пакеты
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -j ACCEPT

# Удалять все входящие пакеты не ESTABLISHED,RELATED
$IPTABLES -A INPUT -p ALL -m state ! --state ESTABLISHED,RELATED -j DROP

# Цепочки по forward трафку
$IPTABLES -A FORWARD -j $BILLING
$IPTABLES -A FORWARD -j ACCEPT

# Сохранить основные правила
/sbin/service iptables save

 

В форвард цепочке трафик отправляется в ulog-acctd, но его отключение на ситуацию не влияет.

 

ещё XT-PIC смущает

APIC не работает?

Да, apic отключен отпцией noapic в параметрах ядра.

Share this post


Link to post
Share on other sites
Он может просто быть собран без поддержки NAPI :)
См. первый пост

Самое главное:
Чтоб узнать, например, что прерывания...
Я к тому, что профайлер - штука полезная всегда

Share this post


Link to post
Share on other sites
Сервер на Linux 2.6.18 терминирует PPTP. При количестве клиентов более 500, пинг сильно скачет от 1 до 400 мс и появляются потери 5 - 10 на 1000 пакетов. NAT отсутствует, шейпинг отсутствует.

Пингую внутренний сервер, т.е. трафик проходит транзитом через VPN и сразу на сервер.

HZ в ядре 1000, загружал ядро с HZ 250, на ситуацию это не влияет.

PPTP в юзерспейс.

 

Сетевушки вот такие:

Realtek Semiconductor Co., Ltd. RTL-8169 Gigabit Ethernet

driver: r8169

version: 2.2LK-NAPI

 

Подскажите в чем может быть проблема и как продиагностировать?

Проблема - userspace pptp

Диагностика - mpstat -P ALL 10

 

Общий совет - если процессоров(ядер) >1, то каждая сетевая должна быть на своем отдельном прерывании, соотвественно, каждое прерывание на отдельном процессоре(ядре).

Но с юзерспейс pptp это все равно не спасет.

Share this post


Link to post
Share on other sites

Вот уже натсраиваю новый сервер с accel-pptp. Кстати как быть когда ядер 4? Я так понимаю irqbalance нужно запускать?

Share this post


Link to post
Share on other sites

Вот уже натсраиваю новый сервер с accel-pptp. Кстати как быть когда ядер 4? Я так понимаю irqbalance нужно запускать?

Замечено что после установки accel только одно ядро загружается. Второе простаивает пока прерывания одной из сетевок на другое ядро не посадишь

Share this post


Link to post
Share on other sites

Хм. Как тогда быть если ядер >2

Share this post


Link to post
Share on other sites

не загоняйся с ядрами, реализация PPP в ядре однопоточная

вобщем пробуй accel-pptp, если на поптопе у тебя было 500 в переделе, то с accel-pptp 1000 коннектов будет лафа серваку, он будет отдыхать

Share this post


Link to post
Share on other sites

У нас со sdy_moscow пока большой лафы не получилось.

Share this post


Link to post
Share on other sites

да, может быть я и преувеличил с лафой, но то что он потянет 1000 коннектов у меня нет сомнений

Share this post


Link to post
Share on other sites

Ivantey просто поторопился.... :-)

 

Сегодня подшаманили с файрволом и ВОТ ОНО ЧУДО - нагрузка на проц по моим прикидкам снизилась в 2-3 раза....

Итог

1. ставим ассел

2. контрак или отключаем или маскируем в цепочке рау (ГРЕ протокол, 1723 порт тсп, ИП клиентов) в иптаблес (я так в итоге сделал, т.к. хочу кое-что все-таки отслеживать и НАТить).

3. файрвол настраиваем с умом - чтоб гре и пакеты юзеров лишних проверок не проходили.

 

И УРА! ЗАРАБОТАЛО!

 

З.Ы. если ве-же нужен НАТ - то тут походу ничего не поможет - контрак реально больше 500 сесий активных юзверей не вытянет...

 

ХЕВ - кстати в 0.8.2какие то проблемы... make server не выполняется в каком-то конфигуре происходит сбой из-за пермишенов.... попозже сравню файлы...

Edited by sdy_moscow

Share this post


Link to post
Share on other sites
З.Ы. если ве-же нужен НАТ - то тут походу ничего не поможет - контрак реально больше 500 сесий активных юзверей не вытянет...
вытянет, нужно отрубать только conntrack_gre, а не весь conntrack
ХЕВ - кстати в 0.8.2какие то проблемы... make server не выполняется в каком-то конфигуре происходит сбой из-за пермишенов.
только что проверил, всё нормально
Edited by xeb

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