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

freebsd процесс ng_queue ng_car vs dummynet

Есть 2 сервера vpn, на mpd. На обоих используется шейпер, на 1м ng_car, на 2м dummynet.

Процессоры похожие core2duo, трафика и абонов приблизительно одинаково. Используется ng_nat,ng_netflow.

На обоих процессы ng_queue0 и ng_queue1 более 40-60% использования.

машинка dummynet

last pid:  3961;  load averages:  3.29,  2.79,  2.68    up 6+17:19:48  22:30:47
105 processes: 8 running, 72 sleeping, 25 waiting
CPU:  5.2% user,  0.0% nice, 66.2% system, 21.4% interrupt,  7.2% idle
Mem: 227M Active, 350M Inact, 369M Wired, 199M Buf, 1006M Free
Swap: 5120M Total, 5120M Free

  PID USERNAME PRI NICE   SIZE    RES STATE   C   TIME    CPU COMMAND
    3 root     -68    -     0K     8K sleep   1  71.7H 74.46% ng_queue1
    2 root     -68    -     0K     8K sleep   0  53.0H 25.98% ng_queue0
   68 root     -68    -     0K     8K -       0  39.3H 21.09% dummynet
   32 root     -68    -     0K     8K WAIT    0  18.0H 19.97% irq259: igb0
   30 root     -68    -     0K     8K WAIT    0  18.5H 19.19% irq258: igb0
  861 root      51    0 51584K 36712K RUN     1 368:22  7.28% mpd5
   12 root     171 ki31     0K     8K RUN     0  37.9H  7.08% idle: cpu0
   41 root     -68    -     0K     8K RUN     1 478:09  5.86% irq264: igb1
   39 root     -68    -     0K     8K RUN     1 424:13  4.39% irq263: igb1
   11 root     171 ki31     0K     8K RUN     1  48.6H  4.05% idle: cpu1

 

vpn1# netstat -w1
            input        (Total)           output
   packets  errs      bytes    packets  errs      bytes colls
    107440     0   52102055     108138     0   58523851     0
    103402     0   51041090     101621     0   55673735     0
    102850     0   49716606     102009     0   56018853     0
    102684     0   48722125     102927     0   54884808     0
    105994     0   50865826     105481     0   57164811     0
    105159     0   49203094     103371     0   54377729     0
    106051     0   50517082     103913     0   55816048     0

 

на ng_car сейчас чуть меньше

last pid: 72449;  load averages:  1.24,  1.12,  1.01                               up 0+03:29:51  20:34:56
84 processes:  3 running, 64 sleeping, 17 waiting
CPU:  0.0% user,  0.0% nice, 59.7% system,  0.4% interrupt, 39.9% idle
Mem: 72M Active, 167M Inact, 98M Wired, 160K Cache, 199M Buf, 1565M Free
Swap: 3072M Total, 3072M Free

  PID USERNAME PRI NICE   SIZE    RES STATE   C   TIME    CPU COMMAND
   11 root     171 ki31     0K     8K RUN     1 124:29 43.80% idle: cpu1
   12 root     171 ki31     0K     8K CPU0    0 116:14 42.58% idle: cpu0
   26 root     -68    -     0K     8K -       0  55:46 40.19% em0 taskq
    3 root     -68    -     0K     8K sleep   1  57:09 39.79% ng_queue1
    2 root     -68    -     0K     8K sleep   0  57:08 37.79% ng_queue0
   13 root     -32    -     0K     8K WAIT    1   1:58  0.68% swi4: clock sio
  662 root      44    0 17656K 12080K select  1   2:29  0.00% mpd5

vpn2# netstat -w1
            input        (Total)           output
   packets  errs      bytes    packets  errs      bytes colls
     56433     0   32007475      56517     0   30849636     0
     52485     0   29743080      52370     0   28549218     0
     56965     0   33313992      57034     0   32036304     0
     59755     0   33892342      59755     0   32759495     0
     56719     0   32495709      56399     0   30993926     0

 

но если трафик вырастит, то и показатели ng_queue повысятся.

Чем обусловлен рост этого процесса ?

Какие параметры смотреть ?

Edited by Mechanic

Share this post


Link to post
Share on other sites

Странно у меня при в 2 раза большем трафе\ппс 70% айдл , шейпит dummynet, но сетевая ем и дрова яндекс, проц простой и7 920

Share this post


Link to post
Share on other sites

Интересуют параметры sysctl и loader.conf

ng_queue - это потоки для netgraph.

Мне в своё время (freebsd 6.2) помогла замена ng_nat на pf nat - нагрузка упала примерно вдвое, плюс сильно упростились настройки файрволла.

После этого можно попробовать заменить ng_netflow на pfflowd, чтобы netgraph не использовался вообще, но это, скорее всего, уже без разницы.

 

проц простой и7 920
наверное, и автомобиль простой порш кайен? ;-)

Share this post


Link to post
Share on other sites

ng_netflow - берется из Mpd

cat /boot/loader.conf
kern.ipc.maxpipekva=32000000
kern.ipc.maxsockbuf=1048576
kern.maxusers=512
kern.maxdsiz=1073741824
kern.dfldsiz=1073741824
kern.maxssiz=134217728
net.inet.tcp.syncache.hashsize=1024
net.inet.tcp.syncache.bucketlimit=100
net.inet.tcp.tcbhashsize=32768
net.graph.maxalloc=4096 #default 4096

#memory
#512M mem for kernel
vm.kmem_size=512M
vm.kmem_size_max=512M
#1G mem for kernel
#vm.kmem_size=1G
#vm.kmem_size_max=1G

#Intel em-driver
if_em_load="YES"   #for 6.9.21
hw.em.rxd=2048
hw.em.txd=2048
hw.em.rx_int_delay=600
hw.em.tx_int_delay=600
hw.em.rx_abs_int_delay=1000
hw.em.tx_abs_int_delay=1000

#Intel ET
#if_igb_load="YES"

#hw.igb.rxd=2048
#hw.igb.txd=2048
#dev.igb.0.enable_lro=0
#dev.igb.1.enable_lro=0

 

kern.sugid_coredump=0
kern.corefile=/var/tmp/%N.core

net.inet.icmp.icmplim=100

##kern.maxfilesperproc=32768
##kern.maxfiles=65536
kern.ipc.somaxconn=2048
kern.ipc.maxsockets=100000
kern.ipc.nmbclusters=100000

#kern.ipc.maxsockbuf=1048576
kern.ipc.maxsockbuf=2097152

#net.inet.ip.intr_queue_maxlen=10000
#net.inet.ip.fw.debug=0
net.inet.ip.fw.dyn_max=20480
net.inet.ip.fw.dyn_buckets=4096
net.inet.ip.fw.one_pass=1       # for dummynet+nat !!!!

net.inet.ip.fastforwarding=1
#net.inet.tcp.msl=7500
#net.inet.tcp.rfc1323=1

net.inet.ip.portrange.first=8192
net.inet.ip.portrange.last=65535
#net.inet.ip.portrange.randomized=0
net.inet.ip.intr_queue_maxlen=4096

#add hackers options ...
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
net.inet.ip.redirect=1 

#net.inet.udp.maxdgram=57344
net.inet.udp.recvspace=65535
net.inet.tcp.sendspace=65535
net.inet.tcp.recvspace=65535

net.graph.maxdgram=1024000
net.graph.recvspace=1024000

net.local.stream.recvspace=65535
net.local.stream.sendspace=65535

# Intel(R) PRO/1000 Network Connection 6.9.6
dev.em.0.rx_int_delay=600
dev.em.0.tx_int_delay=600
dev.em.0.rx_abs_int_delay=1000
dev.em.0.tx_abs_int_delay=1000
dev.em.0.rx_processing_limit=1024

# Intel(R) PRO/1000ET Network Connection

#dev.igb.0.low_latency=1000
#dev.igb.0.ave_latency=2000
#dev.igb.0.bulk_latency=4000
#dev.igb.0.rx_processing_limit=400      #1000
#dev.igb.0.enable_aim=1

#dev.igb.1.low_latency=1000
#dev.igb.1.ave_latency=2000
#dev.igb.1.bulk_latency=4000
#dev.igb.1.rx_processing_limit=400      #1000
#dev.igb.1.enable_aim=1

 

 

Share this post


Link to post
Share on other sites
vpn2# vmstat -i
interrupt                          total       rate
irq14: ata0                         7581          1
cpu0: timer                     11361735       2017
irq256: em0                      7840587       1392
cpu1: timer                     11361546       2017
Total                           30571449       5429

Share this post


Link to post
Share on other sites

vpn1# sysctl dev.em
dev.em.0.%desc: Intel(R) PRO/1000 Network Connection 6.9.6.Yandex[$Revision: 1.3
6.2.10 $]
dev.em.0.%driver: em
dev.em.0.%location: slot=25 function=0 handle=\_SB_.PCI0.ILAN
dev.em.0.%pnpinfo: vendor=0x8086 device=0x10bd subvendor=0x8086 subdevice=0x0001
class=0x020000
dev.em.0.%parent: pci0
dev.em.0.debug: -1
dev.em.0.stats: -1
dev.em.0.rx_kthreads: 2
dev.em.0.rx_int_delay: 900
dev.em.0.tx_int_delay: 900
dev.em.0.rx_abs_int_delay: 1800
dev.em.0.tx_abs_int_delay: 1800
dev.em.0.rx_kthread_priority: 127
dev.em.0.wake: 0

vpn1# sysctl dev.igb
dev.igb.0.%desc: Intel(R) PRO/1000 Network Connection version - 1.8.4
dev.igb.0.%driver: igb
dev.igb.0.%location: slot=0 function=0
dev.igb.0.%pnpinfo: vendor=0x8086 device=0x10c9 subvendor=0x8086 subdevice=0xa03c class=0x020000
dev.igb.0.%parent: pci1
dev.igb.0.debug: -1
dev.igb.0.stats: -1
dev.igb.0.flow_control: 3
dev.igb.0.enable_aim: 1
dev.igb.0.low_latency: 1000
dev.igb.0.ave_latency: 2000
dev.igb.0.bulk_latency: 4000
dev.igb.0.rx_processing_limit: 400
dev.igb.1.%desc: Intel(R) PRO/1000 Network Connection version - 1.8.4
dev.igb.1.%driver: igb
dev.igb.1.%location: slot=0 function=1
dev.igb.1.%pnpinfo: vendor=0x8086 device=0x10c9 subvendor=0x8086 subdevice=0xa03c class=0x020000
dev.igb.1.%parent: pci1
dev.igb.1.debug: -1
dev.igb.1.stats: -1
dev.igb.1.flow_control: 3
dev.igb.1.enable_aim: 1
dev.igb.1.low_latency: 1000
dev.igb.1.ave_latency: 2000
dev.igb.1.bulk_latency: 4000
dev.igb.1.rx_processing_limit: 400

last pid: 7569; load averages: 0.47, 0.57, 0.59 up 7+05:56:14 11:07:13

103 processes: 4 running, 72 sleeping, 27 waiting

CPU: 1.8% user, 0.0% nice, 33.9% system, 26.6% interrupt, 37.6% idle

Mem: 219M Active, 369M Inact, 369M Wired, 199M Buf, 996M Free

Swap: 5120M Total, 5120M Free

 

PID USERNAME PRI NICE SIZE RES STATE C TIME CPU COMMAND

3 root -68 - 0K 8K sleep 1 75.1H 62.35% ng_queue1

12 root 171 ki31 0K 8K RUN 0 43.8H 44.97% idle: cpu0

11 root 171 ki31 0K 8K RUN 1 56.3H 25.39% idle: cpu1

2 root -68 - 0K 8K sleep 0 54.6H 20.75% ng_queue0

32 root -68 - 0K 8K WAIT 0 19.3H 15.97% irq259: igb0

30 root -68 - 0K 8K WAIT 0 19.7H 14.36% irq258: igb0

861 root 47 0 51584K 36712K CPU1 1 391:45 4.20% mpd5

41 root -68 - 0K 8K WAIT 1 501:09 3.47% irq264: igb1

39 root -68 - 0K 8K WAIT 1 447:02 3.27% irq263: igb1

14 root -32 - 0K 8K WAIT 1 168:27 0.59% swi4: clock sio

899 root 47 0 17324K 13836K select 1 136:09 0.49% snmpd

35 root -68 - 0K 8K WAIT 0 129:19 0.20% irq261: igb1

26 root -68 - 0K 8K WAIT 0 75:16 0.10% irq256: igb0

после egrep '^dev\.(em|igb)\.' /etc/sysctl.conf | xargs sysctl

и убрал жесткую привязку процессов к ядрам

last pid: 14377;  load averages:  0.43,  0.50,  0.53                                        up 7+06:08:09  11:19:08
103 processes: 5 running, 71 sleeping, 27 waiting
CPU:  2.6% user,  0.0% nice, 39.7% system, 23.7% interrupt, 34.0% idle
Mem: 219M Active, 369M Inact, 370M Wired, 199M Buf, 996M Free
Swap: 5120M Total, 5120M Free

  PID USERNAME PRI NICE   SIZE    RES STATE   C   TIME    CPU COMMAND
   12 root     171 ki31     0K     8K RUN     0  43.8H 48.29% idle: cpu0
    2 root     -68    -     0K     8K CPU1    1  54.6H 39.45% ng_queue0
    3 root     -68    -     0K     8K RUN     1  75.2H 39.26% ng_queue1
   30 root     -68    -     0K     8K WAIT    0  19.8H 23.10% irq258: igb0
   32 root     -68    -     0K     8K WAIT    1  19.3H 12.06% irq259: igb0
   11 root     171 ki31     0K     8K RUN     1  56.4H 10.60% idle: cpu1
   39 root     -68    -     0K     8K WAIT    0 447:30  5.76% irq263: igb1
   41 root     -68    -     0K     8K WAIT    0 501:38  3.56% irq264: igb1
  861 root      46    0 51584K 36712K select  1 392:14  2.49% mpd5

 

при этом трафика

vpn1# netstat -w1
            input        (Total)           output
   packets  errs      bytes    packets  errs      bytes colls
     78761     0   36239246      77050     0   40603218     0
     76818     0   34644820      74683     0   39324546     0
     77396     0   34999952      75757     0   39036423     0
     74002     0   34453127      72652     0   39118048     0
     73485     0   34118037      72418     0   38579060     0
     77552     0   36123170      75736     0   41505664     0

 

 

Share this post


Link to post
Share on other sites

Рост ng_queue пропорционален росту графа в подсистеме Netgraph. Очевидно, что путь пакета в этом графе должен быть кратчайшим, отсюда следует, что навешивать доп. сервисы в mpd следует аккуратно и в первую очередь необходимо избавиться от NAT на NAS-ах.

Share this post


Link to post
Share on other sites

... что навешивать доп. сервисы в mpd следует аккуратно и в первую очередь необходимо избавиться от NAT на NAS-ах.

угу, а на больших скоростях и от rate-limit-та (ng_car) избавиться на NAS-ах

Share this post


Link to post
Share on other sites
угу, а на больших скоростях и от rate-limit-та (ng_car) избавиться на NAS-ах

Насколько я могу судить, оно не столько от скорости зависит, сколько от количества нод и глубины графа.

Share this post


Link to post
Share on other sites
... что навешивать доп. сервисы в mpd следует аккуратно и в первую очередь необходимо избавиться от NAT на NAS-ах.
угу, а на больших скоростях и от rate-limit-та (ng_car) избавиться на NAS-ах

-nat, -ng_car и что тогда этот нас будет делать ?! авторизовать и и маршрутизировать абонов ?

не слишком жирно такой функционал на одном сервере ?

Share this post


Link to post
Share on other sites
-nat, -ng_car и что тогда этот нас будет делать ?! авторизовать и и маршрутизировать абонов ?

не слишком жирно такой функционал на одном сервере ?

mpd + ipfw + dummynet на одном сервере, nat + netflow + bgp на втором.

Без mpd у меня нагрузка распределилась почти поровну.

Суммарная производительность такой связки оказалась выше, чем у двух параллельно работающих серверов с полным набором сервисов.

Share this post


Link to post
Share on other sites
-nat, -ng_car и что тогда этот нас будет делать ?! авторизовать и и маршрутизировать абонов ?

не слишком жирно такой функционал на одном сервере ?

mpd + ipfw + dummynet на одном сервере, nat + netflow + bgp на втором.

Без mpd у меня нагрузка распределилась почти поровну.

Суммарная производительность такой связки оказалась выше, чем у двух параллельно работающих серверов с полным набором сервисов.

Аналогично!

Share this post


Link to post
Share on other sites
... что навешивать доп. сервисы в mpd следует аккуратно и в первую очередь необходимо избавиться от NAT на NAS-ах.
угу, а на больших скоростях и от rate-limit-та (ng_car) избавиться на NAS-ах

-nat, -ng_car и что тогда этот нас будет делать ?! авторизовать и и маршрутизировать абонов ?

не слишком жирно такой функционал на одном сервере ?

Не слишком, так Вы сможете авторизовать до 2500 абонентов (одновременных сессий) на одном сервере, а в текущей ситуации сколько?

Да и в самом деле, что Core2 и Asus - это дорогое решение?

Share this post


Link to post
Share on other sites

сейчас нормально 1000-1200 , далее проблемнее

фактически если выкинуть nat и выдавать динамически ip-адреса, то можно и в текущей конфигурации выжать больше ?!

bgp у меня на отельном сервере, а снятие netflow не думаю, что потребляет значительный ресурс ( используется прямо в mpd)

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