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

FreeBSD 8.2 ng_queue*

Добрый день друзья! Наблюдается такая проблема. Один из процессов ng_queue нагружается в 2 раза больше , а то и в 3 . Другие стоят курят. После этого соответсвтенно , почти нет скорости на сервере и пинг вырастает в 7 раз. Можно ли привезать каждый cpu к процессу?

Характерстики сервера HP- Proliant DL160-g6 Intel® Xeon® CPU E5504 @ 2.00GHz, RAM 4 GB. Сетевухи igb драйвер Intel® PRO/1000 Network Connection version - 2.2.3.

На сервер MPD5 + NG_NAT Шейпер NG_CAR. Вечером обычно 800 сессий на сервер PPTP . 300-350 мбит/с RX. 150-200 мбит/с TX.

# cat /usr/local/etc/mpd5/mpd.conf

startup:

set user admin master admin

set console self 192.168.53.1x 5005

set console open

set web self 0.0.0.0 5006

set web open

set radsrv peer 192.168.53.x master

set radsrv peer 192.168.53.1x master

set radsrv open

 

default:

load pptp_server

 

pptp_server:

set ippool add poolvpn 172.16.1.2 172.16.254.254

create bundle template BP

set iface idle 10800

set iface enable tcpmssfix

set iface enable proxy-arp

set ipcp ranges 172.16.1.1/32 ippool poolvpn

set ipcp no vjcomp

set ipcp dns 8.8.8.8 8.8.4.4

log +echo +radius +rep +auth +bund +iface +link

 

create link template L pptp

set link enable report-mac

set link action bundle BP

set link disable multilink

set link yes acfcomp protocomp

set link no pap chap

set link yes chap-msv2 chap-msv1

load radius

set link keep-alive 30 180

set link max-children 3000

set link mtu 1460

set link enable peer-as-calling

set pptp self 172.18.0.1

set link enable incoming

 

radius:

set radius config /usr/local/etc/mpd5/radius.conf

set radius server 192.168.53.x passwd 1812 1813

set radius retries 5

set radius timeout 20

set radius me 192.168.x.x

set auth enable radius-auth

set auth disable internal

#ACCT

set auth enable radius-acct

set auth acct-update 0

 

# cat /etc/rc.firewall

#!/bin/sh

 

ngctl mkpeer ipfw: nat 60 out

ngctl name ipfw:60 nat

ngctl connect ipfw: nat: 61 in

ngctl msg nat: setaliasaddr 87.x.x.x.90

fwcmd="/sbin/ipfw"

 

${fwcmd} -f flush

${fwcmd} add 10000 netgraph 61 all from any to any in via igb1

${fwcmd} add 10001 netgraph 60 all from 172.16.0.0/16 to any out via igb1

 

 

#uname -a

FreeBSD vnpx 8.2-STABLE FreeBSD 8.2-STABLE #1 r227345: Tue Nov 8 21:23:29 UTC 2011 root@vnp8:/usr/src/sys/amd64/compile/GENERIC.64.118 amd64

 

 

#top -SHP

last pid: 89916; load averages: 3.15, 2.99, 2.83 up 39+18:48:14 17:04:06

123 processes: 7 running, 84 sleeping, 32 waiting

CPU 0: 1.9% user, 0.0% nice, 40.2% system, 21.8% interrupt, 36.1% idle

CPU 1: 2.6% user, 0.0% nice, 55.6% system, 6.8% interrupt, 35.0% idle

CPU 2: 3.8% user, 0.0% nice, 50.0% system, 6.8% interrupt, 39.5% idle

CPU 3: 2.3% user, 0.0% nice, 49.6% system, 7.1% interrupt, 41.0% idle

Mem: 1233M Active, 168M Inact, 498M Wired, 32M Cache, 213M Buf, 36M Free

Swap: 16G Total, 12M Used, 16G Free

 

PID USERNAME PRI NICE SIZE RES STATE C TIME WCPU COMMAND

13 root -16 - 0K 64K CPU1 1 162.1H 67.97% {ng_queue2}

11 root 171 ki31 0K 64K RUN 0 668.3H 40.97% {idle: cpu0}

11 root 171 ki31 0K 64K CPU2 2 731.3H 36.77% {idle: cpu2}

11 root 171 ki31 0K 64K RUN 1 696.7H 35.79% {idle: cpu1}

11 root 171 ki31 0K 64K CPU3 3 755.2H 35.35% {idle: cpu3}

13 root -16 - 0K 64K sleep 3 162.2H 33.69% {ng_queue3}

13 root -16 - 0K 64K sleep 2 162.4H 33.50% {ng_queue1}

13 root -16 - 0K 64K sleep 2 162.6H 31.05% {ng_queue0}

12 root -68 - 0K 528K WAIT 0 50.4H 15.48% {irq256: igb0:que}

77224 root 48 0 68276K 34700K select 3 37:06 6.49% {mpd5}

12 root -68 - 0K 528K WAIT 2 21.8H 4.20% {irq258: igb0:que}

12 root -68 - 0K 528K WAIT 3 18.3H 3.86% {irq259: igb0:que}

12 root -68 - 0K 528K CPU1 1 35.9H 3.08% {irq261: igb1:que}

12 root -68 - 0K 528K WAIT 2 34.9H 2.88% {irq262: igb1:que}

12 root -68 - 0K 528K WAIT 1 18.4H 2.88% {irq257: igb0:que}

12 root -68 - 0K 528K WAIT 3 34.6H 2.69% {irq263: igb1:que}

12 root -68 - 0K 528K WAIT 0 36.1H 2.59% {irq264: igb1:que}

1271 root 47 0 38332K 7820K select 2 694:11 2.59% snmpd

0 root -68 0 0K 272K - 3 409:36 0.78% {igb0 que}

12 root -32 - 0K 528K WAIT 2 328:31 0.00% {swi4: clock}

14 root -16 - 0K 16K - 0 112:40 0.00% yarrow

1110 root 44 0 6920K 1032K select 0 76:53 0.00% syslogd

0 root -68 0 0K 272K - 3 61:57 0.00% {igb1 que}

0 root -68 0 0K 272K - 0 35:13 0.00% {igb1 que}

0 root -68 0 0K 272K - 3 28:53 0.00% {igb1 que}

0 root -68 0 0K 272K - 3 28:31 0.00% {igb1 que}

17 root 20 - 0K 16K syncer 0 16:31 0.00% syncer

1411 root 44 0 26132K 2348K select 1 1:29 0.00% sshd

 

# netstat -h -w 1

input (Total) output

packets errs idrops bytes packets errs bytes colls

101K 0 0 62M 111K 0 84M 0

113K 0 0 71M 122K 0 94M 0

108K 0 0 68M 114K 0 87M 0

100K 0 0 62M 111K 0 84M 0

114K 0 0 72M 125K 0 96M 0

110K 0 0 71M 124K 0 96M 0

105K 0 0 67M 120K 0 92M 0

108K 0 0 65M 117K 0 89M 0

107K 0 0 67M 116K 0 89M 0

108K 0 0 68M 119K 0 92M 0

106K 0 0 67M 119K 0 92M 0

109K 0 0 70M 120K 0 92M 0

106K 0 0 67M 114K 0 85M 0

^C

Edited by roysbike

Share this post


Link to post
Share on other sites

Один из процессов ng_queue нагружается в 2 раза больше , а то и в 3 .

Наверняка из-за ng_nat.

Попробуйте сделать два правила NAT, в каждое направляйте половину локальных адресов.

Ещё лучше - замените ng_nat на pf NAT.

Он однопоточный, но настолько быстрый, что на сервере с mpd и ng_car узким местом не станет.

 

Можно ли привезать каждый cpu к процессу?

Можно, но для ng_queue незачем.

Система автоматически создаёт столько ng_queue, сколько у процессора ядер.

 

То, что гипертрединг отключен - правильно.

 

Количество очередей у карт можно уменьшить до двух на каждую.

 

300-350 мбит/с RX. 150-200 мбит/с TX.

Мизерная нагрузка для Ксеона/i7 с интеловскими картами.

Share this post


Link to post
Share on other sites

Спасибо за посказку. Ночью ядро пересоберу и попробую .

не подскажешь , что для pf nat нужно добавть в sysctl ?

pf.conf

#!/bin/sh

 

ext_if="igb0"

int_if="igb1"

 

set limit states 16000000

set optimization aggressive

set skip on lo0

scrub in all

nat on $ext_if from 172.16.0.0/16 to any -> ($ext_if)

pass in on $int_if from any to any

pass out on $ext_if from $ext_if to any

 

Что то вроде этого?

Share this post


Link to post
Share on other sites

Спасибо за посказку. Ночью ядро пересоберу и попробую .

не подскажешь , что для pf nat нужно добавть в sysctl ?

pf.conf

#!/bin/sh

 

ext_if="igb0"

int_if="igb1"

 

set limit states 16000000

set optimization aggressive

set skip on lo0

scrub in all

nat on $ext_if from 172.16.0.0/16 to any -> ($ext_if)

pass in on $int_if from any to any

pass out on $ext_if from $ext_if to any

 

Что то вроде этого?

 

Это конфиг, а не скрипт!

 

 

Добавлять ничего в sysctl не нужно, все крутилки pf в его конфиге.

 

Ядро пересобирать не нужно, оно и так работает, как весь нетграф и много прочего - модули загружаются автоматом, в худшем случае руками. ПФ сам загружает модуль.

 

Скруб не обязателен, пасс на выход имеет смысл делать на всех интерфейсах from any to any, на вход решайте сами.

 

 

Share this post


Link to post
Share on other sites

Ночью ядро пересоберу и попробую .

Пересобирать не надо.

При выполнении /etc/rc.d/pf будут предупреждения на отсутствующий ALTQ, но их можно игнорировать.

 

что для pf nat нужно добавть в sysctl ?

Ничего.

Если pf NAT используется совместно с ipfw для фильтрации и шейпинга,

то в начало /etc/rc.d/ipfw рекомендуется вставить строку "# BEFORE: pf".

 

Что то вроде этого?

Мой /etc/pf.conf:

int_if="vlan1"
ext_if="vlan2"
ext_ip="1.2.3.4"
nat_net="10.20.0.0/20"

set limit { states 200000, frags 50000, src-nodes 30000 }
set optimization aggressive
set state-policy if-bound
set block-policy return
set skip on { lo0, $int_if }
nat on $ext_if from $nat_net to any -> $ext_ip

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