Перейти к содержимому
Калькуляторы
NAT под FreeBSD.  

198 пользователей проголосовало

  1. 1. Кто и какой использует NAT



NAT под FreeBSD. Кто и какой использует NAT на своих BRAS-Freebsd

Ну я так и понял. SMT лишнее, ИМХО, хотя до того, как вы начнёте испытывать с этим проблемы, ещё далеко. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну я так и понял. SMT лишнее, ИМХО, хотя до того, как вы начнёте испытывать с этим проблемы, ещё далеко. :)

Какого плана проблемы? Для распихивания прерываний по ядрам SMT подходит очень даже неплохо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сетевая обработка пакетов и SMT (HTT) плохо сочетаются друг с другом. Источник - документация Intel на сетевые карты и, собственно, данный форум.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Узким местом всё же был не PF, а слабая сетевая и процессор. Стоило обновить сервер, как гигабит стал проходить просто прекрасно. Проблемы с GRE удалось решить блоком правил:

Возьму на заметку, только гре уже почти нигде у меня нет :)

А почему не написали одним правилом?

inet тоже можно выкинуть, тогда и ipv6 будет работать.

 

pass quick on $ext_if inet proto gre all no state

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну да, логично. Поправлю, спасибо.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сетевая обработка пакетов и SMT (HTT) плохо сочетаются друг с другом. Источник - документация Intel на сетевые карты и, собственно, данный форум.

Что такое сетевая обработка пакетов? Может быть обработка сетевых пакетов? Пруфлинк-то будет? ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

pf nat:

[#gw:/]# pfctl -si
Status: Enabled for 42 days 08:24:47      	Debug: Urgent

State Table                      	Total 			Rate
 current entries       			198624
 searches                	516907969205   	141266.9/s
 inserts                  	10844834275 		2963.8/s
 removals         			10844635651 		2963.8/s
Counters
 match                    	22404854572 		6123.1/s
 bad-offset                 			0        	0.0/s
 fragment               			60212        	0.0/s
 short                          	38507        	0.0/s
 normalize                          	0        	0.0/s
 memory                     			0        	0.0/s
 bad-timestamp                      	0        	0.0/s
 congestion                 			0        	0.0/s
 ip-option             			245766        	0.1/s
 proto-cksum                  	1649317        	0.5/s
 state-mismatch       			8756473        	2.4/s
 state-insert           			25891        	0.0/s
 state-limit                        	0        	0.0/s
 src-limit                 			40        	0.0/s
 synproxy                   			0        	0.0/s

[#gw:/]# top -SPH
last pid: 81900;  load averages:  0.05,  0.06,  0.07                                                                               			up 42+08:31:22  20:48:43
139 processes: 13 running, 96 sleeping, 30 waiting
CPU 0:  1.3% user,  0.0% nice,  1.3% system,  7.6% interrupt, 89.9% idle
CPU 1:  0.0% user,  0.0% nice,  0.0% system, 70.9% interrupt, 29.1% idle
CPU 2:  0.0% user,  0.0% nice, 28.2% system,  0.0% interrupt, 71.8% idle
CPU 3:  1.3% user,  0.0% nice,  0.0% system,  0.0% interrupt, 98.7% idle
CPU 4:  3.8% user,  0.0% nice,  1.3% system,  0.0% interrupt, 94.9% idle
CPU 5:  0.0% user,  0.0% nice,  1.3% system,  0.0% interrupt, 98.7% idle
CPU 6:  0.0% user,  0.0% nice,  0.0% system, 30.4% interrupt, 69.6% idle
CPU 7:  0.0% user,  0.0% nice,  0.0% system, 32.9% interrupt, 67.1% idle
Mem: 403M Active, 2250M Inact, 689M Wired, 16K Cache, 414M Buf, 537M Free
Swap: 4096M Total, 4096M Free

 PID USERNAME PRI NICE   SIZE	RES STATE   C   TIME   WCPU COMMAND
  10 root 	171 ki31 	0K   128K RUN 	4 918.6H 100.00% {idle: cpu4}
  10 root 	171 ki31 	0K   128K CPU5	5 910.7H 100.00% {idle: cpu5}
  10 root 	171 ki31 	0K   128K CPU3	3 954.3H 98.83% {idle: cpu3}
  10 root 	171 ki31 	0K   128K CPU0	0 938.2H 96.53% {idle: cpu0}
  10 root 	171 ki31 	0K   128K RUN 	2 954.3H 82.47% {idle: cpu2}
  10 root 	171 ki31 	0K   128K CPU6	6 911.7H 76.37% {idle: cpu6}
  11 root 	-44	- 	0K   528K CPU7	7 359.0H 71.09% {swi1: netisr 0}
  10 root 	171 ki31 	0K   128K RUN 	7 903.9H 69.14% {idle: cpu7}
  11 root 	-44	- 	0K   528K CPU1	1 381.3H 63.67% {swi1: netisr 7}
  10 root 	171 ki31 	0K   128K RUN 	1 576.7H 33.35% {idle: cpu1}
0 root 	-68	0 	0K   224K CPU2	2 114.3H 24.27% {dummynet}
  11 root 	-68	- 	0K   528K WAIT	0  35.1H  5.18% {irq256: igb0:que}
  11 root 	-68	- 	0K   528K WAIT	0  34.2H  5.13% {irq259: igb1:que}
  11 root 	-68	- 	0K   528K WAIT	1  29.9H  4.25% {irq257: igb0:que}
  11 root 	-68	- 	0K   528K WAIT	1  27.5H  3.17% {irq260: igb1:que}
0 root 	-68	0 	0K   224K -   	3 641:02  1.95% {igb0 que}
  11 root 	-32	- 	0K   528K CPU6	6 588:00  1.66% {swi4: clock}
0 root 	-68	0 	0K   224K -   	5 587:38  0.68% {igb0 que}
6 root  	44	- 	0K	16K pftm	2 326:22  0.34% pfpurge
12728 bind  	44	0   240M   209M ucond   4  71:31  0.15% {named}
0 root 	-68	0 	0K   224K -   	3 130:31  0.10% {igb1 que}
12728 bind  	44	0   240M   209M kqread  5  73:48  0.10% {named}
12728 bind  	44	0   240M   209M ucond   0  71:33  0.10% {named}
12728 bind  	44	0   240M   209M ucond   0  71:27  0.10% {named}
12728 bind  	44	0   240M   209M ucond   0  71:31  0.05% {named}
12728 bind  	44	0   240M   209M ucond   3  71:29  0.05% {named}
12728 bind  	44	0   240M   209M ucond   4  71:27  0.05% {named}
82723 root  	44	0   211M   190M select  2 143:38  0.00% snmpd
  13 root  	44	- 	0K	16K -   	5 101:55  0.00% yarrow

 

[#gw:/]# netstat -hW -w 1
       	input    	(Total)   		output
  packets  errs idrops  	bytes	packets  errs  	bytes colls
 	172K 	0 	0   	110M   	186K 	0   	160M 	0
 	166K 	0 	0   	107M   	178K 	0   	152M 	0
 	168K 	0 	0   	108M   	180K 	0   	154M 	0
 	165K 	0 	0   	104M   	177K 	0   	150M 	0

 

[#gw:/]# cat /var/run/dmesg.boot | grep -i cpu
CPU: Intel® Xeon® CPU   		X3450  @ 2.67GHz (2666.65-MHz K8-class CPU)
FreeBSD/SMP: Multiprocessor System Detected: 8 CPUs

 

igb0@pci0:1:0:0:    	class=0x020000 card=0xa03c8086 chip=0x10c98086 rev=0x01 hdr=0x00
vendor 	= 'Intel Corporation'
class  	= network
subclass   = ethernet
igb1@pci0:1:0:1:    	class=0x020000 card=0xa03c8086 chip=0x10c98086 rev=0x01 hdr=0x00
vendor 	= 'Intel Corporation'
class  	= network
subclass   = ethernet

 

Стоит ли переходить на ipfw nat?

Изменено пользователем mlevel

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

Стоит ли переходить на ipfw nat?

Я удивился вашим показателям. Явно не стоит. MPD5 используете? я так понял шейпер dummynet.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А чему удивляетесь-то? Я вот удивляюсь, почему у автора всего две очереди net.isr, и обе по 70 процентов процессора тратят.

 

У меня PF с dummynet, и такого поведения на таких же обьёмах нет:

 

# atop -1 2

 


ATOP - Stella                                     	2012/01/22  17:35:38                                     	---1--                                          2s elapsed
PRC | sys    0.00s | user   0.01s  |              | #proc 	35 | #trun      1 | #tslpi    34  | #tslpu 	0 | #zombie    1 | clones   0/s |           	| #exit    0/s |
CPU | sys      80% | user      0%  | irq 	140% |              | idle    180% | wait      0%  |              | steal 	0% | guest 	0% |  curf 3.39GHz | curscal 100% |
cpu | sys      20% | user      0%  | irq      56% |              | idle 	24% | cpu000 w  0%  |              | steal 	0% | guest 	0% |  curf 3.39GHz | curscal 100% |
cpu | sys      60% | user      0%  | irq   	1% |              | idle 	39% | cpu001 w  0%  |              | steal 	0% | guest 	0% |  curf 3.39GHz | curscal 100% |
cpu | sys   	0% | user      0%  | irq      48% |              | idle 	52% | cpu002 w  0%  |              | steal 	0% | guest 	0% |  curf 3.39GHz | curscal 100% |
cpu | sys   	0% | user      0%  | irq      35% |              | idle 	65% | cpu003 w  0%  |              | steal 	0% | guest 	0% |  curf 3.39GHz | curscal 100% |
CPL | avg1    0.35 | avg5    0.27  |              | avg15   0.20 |              |           	| csw 101605/s | intr 54408/s |              |           	| numcpu 	4 |
MEM | tot 	8.0G | free    2.9G  | cache   0.2M | inact   3.4G | wired   1.4G |           	| activ  29.4M |              |              |           	|              |
SWP | tot 	1.0G | free    1.0G  |              |              |              |           	|              |              |              |  vmcom   0.0M | vmlim   0.0M |
NET | transport    | tcpi 	1/s  | tcpo 	1/s | udpi 	0/s | udpo   182/s | tcpao    0/s  | tcppo    0/s | tcprs    0/s | tcpie    1/s |  tcpor    0/s | udpip    3/s |
NET | network      | ipi 155172/s  | ipo    182/s | ipfrw 66e3/s | deliv    3/s |           	|              |              |              |  icmpi    1/s | icmpo    0/s |
NET | igb0 	57% | pcki 86042/s  | pcko 68151/s | si  575 Mbps | so  349 Mbps | coll 	0/s  | mlti 	0/s | erri 	0/s | erro 	0/s |  drpi 	0/s | drpo 	0/s |
NET | igb1 	56% | pcki 68613/s  | pcko 71566/s | si  352 Mbps | so  565 Mbps | coll 	0/s  | mlti   354/s | erri 	0/s | erro 	0/s |  drpi 	0/s | drpo 	0/s |
NET | vlan305  55% | pcki 68879/s  | pcko 71467/s | si  353 Mbps | so  551 Mbps | coll 	0/s  | mlti   354/s | erri 	0/s | erro 	0/s |  drpi 	0/s | drpo 	0/s |
NET | vlan400   0% | pcki 	0/s  | pcko   182/s | si    0 Kbps | so 2181 Kbps | coll 	0/s  | mlti 	0/s | erri 	0/s | erro 	0/s |  drpi 	0/s | drpo 	0/s |

 PID 	RUID     	EUID       	THR      SYSCPU   	USRCPU      VGROW      RGROW   	RDDSK      WRDSK      ST 	EXC 	S      CPUNR      CPU      CMD        1/1
65912 	root     	root         	1   	0.00s        0.00s     	0K     	0K          0K     	0K      --   	- 	S          2   	0%      atop
83551 	dyr          dyr              1   	0.00s        0.00s     	0K        32K          0K     	0K      --   	- 	R          2   	0%      atop
 896 	root     	quagga       	1   	0.00s        0.00s     	0K     	0K          0K     	0K      --   	- 	S          0   	0%      ospfd
 865 	_pflogd      _pflogd          1   	0.00s        0.00s     	0K     	0K          0K     	0K      --   	- 	S          0   	0%      pflogd

 

[dyr@Stella ~]$ netstat -hW -w 1
           input        (Total)       	output
  packets  errs idrops      bytes    packets  errs      bytes colls
     214K 	0 	0   	149M   	203K 	0   	173M 	0
     211K 	0 	0   	146M   	200K 	0   	170M 	0
     218K 	0 	0   	154M   	207K 	0   	176M 	0
^C
[dyr@Stella ~]$

Изменено пользователем Dyr

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а скажите пожалуйста, кто-нибудь больше 600к сессий на pf делал? а то в свое время так и не смог победить рубеж в 550к-600к сессий, начиналась деградация.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Стоит ли переходить на ipfw nat?

Я удивился вашим показателям. Явно не стоит. MPD5 используете? я так понял шейпер dummynet.

 

Нет, у меня IPoE.

 

А чему удивляетесь-то? Я вот удивляюсь, почему у автора всего две очереди net.isr, и обе по 70 процентов процессора тратят.

 

[#gw:/]# sysctl -a net.isr
net.isr.numthreads: 5
net.isr.defaultqlimit: 256
net.isr.maxqlimit: 10240
net.isr.bindthreads: 0
net.isr.maxthreads: 5
net.isr.direct: 0
net.isr.direct_force: 1 

 

Dyr, покажите пожалуйста секцию опций set из Вашего pf.conf?

 

P.S. Включение net.isr.direct=1 приводит к idle CPU0 <= 20%, при net.isr.direct=0, idle CPU0 >= 80%.

Изменено пользователем mlevel

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

# sysctl -a net.isr
net.isr.numthreads: 4
net.isr.defaultqlimit: 256
net.isr.maxqlimit: 10240
net.isr.bindthreads: 0
net.isr.maxthreads: 4
net.isr.direct: 0
net.isr.direct_force: 0

 

# cat /etc/pf.conf |grep -v ^# | grep -v ^$
ext_if="igb0"
int_if="vlan3050"
dst_nat1="93.92.199.224/28"
dst_nat2="93.92.199.252/29"
table <allow-nat> persist file "/etc/pf.allow-nat"
table <our-nets> const { 80.249.176.0/20, 93.92.192.0/21, 109.71.176.0/21, 217.119.16.0/20 }
table <allowed-spammers> { 10.54.249.24 }
table <always_allowed_dst> { www.moby-money.ru }
set limit { states 600000, frags 100000, src-nodes 60000 }
set state-policy if-bound
set optimization aggressive
set ruleset-optimization profile
set timeout { frag 10, tcp.established 3600, src.track 30 }
set block-policy drop
set fingerprints "/etc/pf.os"
set skip on lo0
set skip on sk0
scrub in all max-mss 1440
binat-anchor "binat"
load anchor "binat" from "/etc/pf.anchor.binat"
nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"
rdr pass on $int_if proto tcp from <allow-nat> to any port 21 -> 127.0.0.1 port 8021
nat on $ext_if from <allow-nat> to any -> $dst_nat1 static-port sticky-address round-robin
nat on $ext_if from any to <always_allowed_dst> -> $dst_nat1 static-port sticky-address round-robin
binat on $ext_if from 10.78.78.2 to any -> 93.92.199.252
nat on $ext_if from 10.78.78.0/24 to any -> $dst_nat2 static-port source-hash
pass quick on $ext_if proto gre all no state
pass in all
pass out all
anchor "ftp-proxy/*"
pass out proto tcp from any to any port 21
table <spamers> persist
pass in quick on $int_if proto tcp from <allowed-spammers> to any port smtp flags S/SAFR keep state
pass in on $int_if proto tcp from any to any port smtp flags S/SAFR keep state \
               (max-src-conn 15, max-src-conn-rate 15/30, overload <spamers> flush global)
block return-icmp (host-prohib) log quick proto tcp from <spamers> to any port smtp
table <icmp_flooders> persist
pass in inet proto icmp all icmp-type {echoreq, unreach} keep state \
       (max-src-conn 15, max-src-states 15, overload <icmp_flooders> flush global)
block return-icmp (host-prohib) log quick proto icmp from <icmp_flooders> to any
table <dns_flooders> persist
pass in on $int_if inet proto udp from any to any port 53 keep state \
       (max-src-conn 5, max-src-conn-rate 10/10, overload <dns_flooders> flush global)
block return-icmp (host-prohib) log quick proto udp from <dns_flooders> to any port 53

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Кстати, у меня не всё ладно с настройками, как оказалось:

 

vmstat -z | grep -vw '0$'
ITEM                     SIZE     LIMIT      USED      FREE  REQUESTS  FAILURES

32 Bucket:                280,        0,      226,       12,      232,        1
64 Bucket:                536,        0,      262,       11,      274,       77
128 Bucket:              1048,        0,     6106,     1253, 17773569,    23485
tcptw:                     72,    65550,       15,     5135,  4080740, 17289157
pfstatepl:                392,   600000,   349367,   250633, 13353219176,   314449
pffrent:                   32,   100091,      208,    99883, 11529228564,   139756
NetGraph data items:       72,      522,        1,      521, 191805532449,    23582

 

Буду тюнить соотвествующие переменные, а то уже жаловаться начали на потери.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Подтюнил.

 

echo "net.graph.maxdata=16384" >> /boot/loader.conf

echo "net.inet.tcp.maxtcptw=65535" >> /etc/sysctl.conf

 

В /etc/pf.conf:

 

set limit { states 900000, frags 300000, src-nodes 60000, table-entries 400000}

 

Результат: 600 Мбит/сек отшейпированного трафика практически не видны по загрузке.

 

# top -aSCHIP

 


last pid: 25069;  load averages:  0.04,  0.26,  0.26                                                                                                             	up 0+02:03:37  19:31:36
140 processes: 6 running, 93 sleeping, 41 waiting
CPU 0:  0.0% user,  0.0% nice, 10.6% system, 40.9% interrupt, 48.5% idle
CPU 1:  0.0% user,  0.0% nice, 12.1% system, 47.0% interrupt, 40.9% idle
CPU 2:  0.0% user,  0.0% nice,  0.0% system, 24.2% interrupt, 75.8% idle
CPU 3:  0.0% user,  0.0% nice,  0.0% system, 30.3% interrupt, 69.7% idle
Mem: 25M Active, 16M Inact, 436M Wired, 204K Cache, 49M Buf, 7426M Free
Swap: 1024M Total, 1024M Free

 PID USERNAME      PRI NICE   SIZE    RES STATE   C   TIME    CPU COMMAND
  10 root          171 ki31 	0K    64K CPU2    2 100:02 83.79% {idle: cpu2}
  10 root          171 ki31 	0K    64K CPU3    3  98:57 82.28% {idle: cpu3}
  10 root          171 ki31 	0K    64K RUN 	0  73:48 70.65% {idle: cpu0}
  10 root          171 ki31 	0K    64K RUN 	1  71:49 59.38% {idle: cpu1}
  11 root          -68    - 	0K   656K WAIT    1  12:44 16.16% {irq257: igb0:que}
  11 root          -68    - 	0K   656K WAIT    3  13:43 16.06% {irq259: igb0:que}
  11 root          -68    - 	0K   656K WAIT    0  13:00 15.48% {irq256: igb0:que}
  11 root          -68    - 	0K   656K WAIT    1  10:46 15.28% {irq261: igb1:que}
  11 root          -68    - 	0K   656K WAIT    2  12:46 14.79% {irq258: igb0:que}
  11 root          -68    - 	0K   656K WAIT    0  10:46 14.06% {irq264: igb1:que}
  11 root          -68    - 	0K   656K WAIT    3  10:38  7.28% {irq263: igb1:que}
  11 root          -68    - 	0K   656K WAIT    2  10:29  6.40% {irq262: igb1:que}
   0 root          -68    0 	0K   400K -   	0   9:30  3.56% {igb1 que}
   0 root          -68    0 	0K   400K -   	1  10:02  3.27% {igb1 que}
   0 root          -68    0 	0K   400K -   	1   9:25  2.29% {igb1 que}
   0 root          -68    0 	0K   400K -   	0   8:45  0.59% {igb1 que}
  11 root          -32    - 	0K   656K WAIT    1   1:06  0.49% {swi4: clock}
   0 root          -68    0 	0K   400K -   	0   0:29  0.49% {igb0 que}
   0 root          -68    0 	0K   400K CPU0    0  12:19  0.39% {dummynet}
   0 root          -68    0 	0K   400K -   	0   0:28  0.29% {igb0 que}

 

# atop -1 2

 


PRC | sys    0.00s | user   0.04s  |              | #proc 	36 | #trun      1  | #tslpi    36 |              | #tslpu 	0  | #zombie    0 | clones   0/s |           	| #exit    0/s |
CPU | sys      35% | user      1%  | irq 	121% |              | idle    244%  | wait      0% |              |           	| steal 	0% | guest 	0% | curf 3.39GHz  | curscal 100% |
cpu | sys      19% | user      0%  | irq      30% |              | idle 	50%  | cpu001 w  0% |              |           	| steal 	0% | guest 	0% | curf 3.39GHz  | curscal 100% |
cpu | sys      16% | user      0%  | irq      30% |              | idle 	54%  | cpu000 w  0% |              |           	| steal 	0% | guest 	0% | curf 3.39GHz  | curscal 100% |
cpu | sys   	0% | user      0%  | irq      33% |              | idle 	67%  | cpu003 w  0% |              |           	| steal 	0% | guest 	0% | curf 3.39GHz  | curscal 100% |
cpu | sys   	0% | user      0%  | irq      27% |              | idle 	73%  | cpu002 w  0% |              |           	| steal 	0% | guest 	0% | curf 3.39GHz  | curscal 100% |
CPL | avg1    0.02 |           	| avg5    0.12 | avg15   0.20 |           	|              | csw 115498/s |           	| intr 58183/s |              |           	| numcpu 	4 |
MEM | tot 	8.0G | free    7.2G  | cache   0.2M |              | inact  15.8M  | wired 442.6M | activ  24.2M |           	|              |              |           	|              |
SWP | tot 	1.0G | free    1.0G  |              |              |           	|              |              |           	|              |              | vmcom   0.0M  | vmlim   0.0M |
NET | transport    | tcpi 	1/s  | tcpo 	1/s | udpi 	0/s | udpo   209/s  | tcpao    0/s | tcppo    0/s | tcprs    0/s  | tcpie    1/s | tcpor    0/s | udpnp    0/s  | udpip    0/s |
NET | network      | ipi 128504/s  | ipo    212/s |              | ipfrw 57e3/s  | deliv    2/s |              |           	|              |              | icmpi    2/s  | icmpo    2/s |
NET | igb0 	51% | pcki 71069/s  | pcko 56863/s | si  517 Mbps | so  269 Mbps  | coll 	0/s |              | mlti 	2/s  | erri 	0/s | erro 	0/s | drpi 	0/s  | drpo 	0/s |
NET | igb1 	51% | pcki 57018/s  | pcko 62871/s | si  271 Mbps | so  513 Mbps  | coll 	0/s |              | mlti   247/s  | erri 	0/s | erro 	0/s | drpi 	0/s  | drpo 	0/s |
NET | vlan305  50% | pcki 57222/s  | pcko 62722/s | si  271 Mbps | so  501 Mbps  | coll 	0/s |              | mlti   247/s  | erri 	0/s | erro 	0/s | drpi 	0/s  | drpo 	0/s |
NET | vlan400   0% | pcki 	0/s  | pcko   209/s | si    0 Kbps | so 2501 Kbps  | coll 	0/s |              | mlti 	0/s  | erri 	0/s | erro 	0/s | drpi 	0/s  | drpo 	0/s |
NET | pflog0  ---- | pcki 	0/s  | pcko 	2/s | si    0 Kbps | so    0 Kbps  | coll 	0/s |              | mlti 	0/s  | erri 	0/s | erro 	0/s | drpi 	0/s  | drpo 	0/s |

 

#vmstat -z | grep -vw '0

 

ITEM                 	SIZE 	LIMIT      USED      FREE  REQUESTS  FAILURES

32 Bucket:                280,        0,      172,   	10,      172,        2
64 Bucket:                536,        0,      177,        5,      177,        1
128 Bucket:              1048,        0, 	1653,        0, 	1653,      270

 

 

 

 

Без шейпирования гигабит пропускает опять же без замечаний:

 

last pid: 25183;  load averages:  0.30,  0.20,  0.22                                                                                                             	up 0+02:08:53  19:36:52
140 processes: 5 running, 94 sleeping, 41 waiting
CPU 0:  0.0% user,  0.0% nice, 22.2% system, 16.7% interrupt, 61.1% idle
CPU 1:  0.0% user,  0.0% nice, 14.1% system, 16.9% interrupt, 69.0% idle
CPU 2:  0.0% user,  0.0% nice,  0.0% system, 19.7% interrupt, 80.3% idle
CPU 3:  0.0% user,  0.0% nice,  0.0% system, 25.4% interrupt, 74.6% idle
Mem: 25M Active, 16M Inact, 440M Wired, 204K Cache, 49M Buf, 7421M Free
Swap: 1024M Total, 1024M Free

 PID USERNAME      PRI NICE   SIZE    RES STATE   C   TIME    CPU COMMAND
  10 root          171 ki31 	0K    64K CPU3    3 102:45 76.66% {idle: cpu3}
  10 root          171 ki31 	0K    64K CPU2    2 103:56 74.85% {idle: cpu2}
  10 root          171 ki31 	0K    64K CPU0    0  75:43 66.36% {idle: cpu0}
  10 root          171 ki31 	0K    64K RUN 	1  73:53 66.16% {idle: cpu1}
  11 root          -68    - 	0K   656K WAIT    3  14:34 16.16% {irq259: igb0:que}
  11 root          -68    - 	0K   656K WAIT    2  13:33 14.70% {irq258: igb0:que}
  11 root          -68    - 	0K   656K WAIT    0  13:46 13.87% {irq256: igb0:que}
  11 root          -68    - 	0K   656K WAIT    1  13:31 13.28% {irq257: igb0:que}
  11 root          -68    - 	0K   656K WAIT    0  11:21 10.69% {irq264: igb1:que}
  11 root          -68    - 	0K   656K WAIT    3  11:15 10.35% {irq263: igb1:que}
  11 root          -68    - 	0K   656K WAIT    1  11:23  9.96% {irq261: igb1:que}
  11 root          -68    - 	0K   656K WAIT    2  11:04  8.79% {irq262: igb1:que}
   0 root          -68    0 	0K   400K -   	0  10:48  5.96% {igb1 que}
   0 root          -68    0 	0K   400K -   	0  10:12  5.37% {igb1 que}
   0 root          -68    0 	0K   400K -   	1   9:23  4.69% {igb1 que}
   0 root          -68    0 	0K   400K -   	0  10:00  4.49% {igb1 que}
   7 root       	44    - 	0K    16K pftm    0   1:18  0.49% [pfpurge]
  11 root          -32    - 	0K   656K WAIT    0   1:09  0.49% {swi4: clock}
   0 root          -68    0 	0K   400K -   	0   0:33  0.10% {igb0 que}
   0 root          -68    0 	0K   400K -   	0   0:32  0.10% {igb0 que}

 

 

 

 

ATOP - Stella                                              2012/01/23  19:37:32                                              ---1--                                                2s elapsed
PRC | sys    0.00s | user   0.00s  |              | #proc 	36 | #trun      1  | #tslpi    36 |              | #tslpu 	0  | #zombie    0 | clones   0/s |           	| #exit    0/s |
CPU | sys      56% | user      0%  | irq      89% |              | idle    255%  | wait      0% |              |           	| steal 	0% | guest 	0% | curf 3.39GHz  | curscal 100% |
cpu | sys      29% | user      0%  | irq      22% |              | idle 	50%  | cpu000 w  0% |              |           	| steal 	0% | guest 	0% | curf 3.39GHz  | curscal 100% |
cpu | sys      27% | user      0%  | irq      21% |              | idle 	51%  | cpu001 w  0% |              |           	| steal 	0% | guest 	0% | curf 3.39GHz  | curscal 100% |
cpu | sys   	0% | user      0%  | irq      23% |              | idle 	77%  | cpu003 w  0% |              |           	| steal 	0% | guest 	0% | curf 3.39GHz  | curscal 100% |
cpu | sys   	0% | user      0%  | irq      23% |              | idle 	77%  | cpu002 w  0% |              |           	| steal 	0% | guest 	0% | curf 3.39GHz  | curscal 100% |
CPL | avg1    0.49 |           	| avg5    0.26 | avg15   0.24 |           	|              | csw 112218/s |           	| intr 51034/s |              |           	| numcpu 	4 |
MEM | tot 	8.0G | free    7.2G  | cache   0.2M |              | inact  15.8M  | wired 443.8M | activ  24.2M |           	|              |              |           	|              |
SWP | tot 	1.0G | free    1.0G  |              |              |           	|              |              |           	|              |              | vmcom   0.0M  | vmlim   0.0M |
NET | transport    | tcpi 	1/s  | tcpo 	1/s | udpi  1235/s | udpo   199/s  | tcpao    0/s | tcppo    0/s | tcprs    0/s  | tcpie    1/s | tcpor    0/s | udpnp    0/s  | udpip    1/s |
NET | network      | ipi 184060/s  | ipo    203/s |              | ipfrw 18e4/s  | deliv 1237/s |              |           	|              |              | icmpi    1/s  | icmpo    3/s |
NET | igb1 	98% | pcki 73981/s  | pcko 102e3/s | si  287 Mbps | so  980 Mbps  | coll 	0/s |              | mlti  1237/s  | erri 	0/s | erro 	0/s | drpi 	0/s  | drpo 	0/s |
NET | igb0 	96% | pcki 109e3/s  | pcko 72879/s | si  963 Mbps | so  276 Mbps  | coll 	0/s |              | mlti 	0/s  | erri 	0/s | erro 	0/s | drpi 	0/s  | drpo 	0/s |
NET | vlan305  95% | pcki 74241/s  | pcko 102e3/s | si  288 Mbps | so  959 Mbps  | coll 	0/s |              | mlti  1237/s  | erri 	0/s | erro 	0/s | drpi 	0/s  | drpo 	0/s |
NET | vlan400   0% | pcki 	0/s  | pcko   199/s | si    0 Kbps | so 2397 Kbps  | coll 	0/s |              | mlti 	0/s  | erri 	0/s | erro 	0/s | drpi 	0/s  | drpo 	0/s |
NET | pflog0  ---- | pcki 	0/s  | pcko 	4/s | si    0 Kbps | so    1 Kbps  | coll 	0/s |              | mlti 	0/s  | erri 	0/s | erro 	0/s | drpi 	0/s  | drpo 	0/s |

 

 

 

 

Чуть не забыл - без "ifconfig igb? -rxcsum -txcsum -tso -lro" загрузка процессора была раза в два больше, так что не пренебрегайте.

 

 

 

Изменено пользователем Dyr

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

echo "net.inet.tcp.maxtcptw=65535" >> /etc/sysctl.conf

 

Это касается TCP, а при роутинге/НАТе до его разбора не доходит.

 

Чуть не забыл - без "ifconfig igb? -rxcsum -txcsum -tso -lro" загрузка процессора была раза в два больше, так что не пренебрегайте

 

Как минимум rxcsum стоило оставить, потому что контрольные суммы при получении проверяются.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

Dyr (Вчера, 18:42) писал:echo "net.inet.tcp.maxtcptw=65535" >> /etc/sysctl.conf Это касается TCP, а при роутинге/НАТе до его разбора не доходит.

 

Я его увеличивал, исходя из диагностики по vmstat -z, которая показывала большое количество failures для tcptw.

 

Как минимум rxcsum стоило оставить, потому что контрольные суммы при получении проверяются.

 

У меня подозрение, что проверка CRC самой сетевой картой становится узким местом на больших обьёмах трафика. В пользу этой теории говорит и практика.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Dyr, я вижу у Вас ядра более менее равномерно загружены, а у меня CPU1 вечно при пике нагрузки упираеться в idle 10%.

Куда копать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Посмотрите, что у вас висит на этом ядре ("procstat -at", "top -aSCHIP") и перевестьте, соотвественно, на другие ядра. Мне пришлось подвесить dummynet на CPU0 (на CPU1 он занимал 100%, известный баг) и перенести несколько IRQ от сетевой карты (которые ранее были скриптом раскиданы равномерно по всем ядрам).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а скажите пожалуйста, кто-нибудь больше 600к сессий на pf делал? а то в свое время так и не смог победить рубеж в 550к-600к сессий, начиналась деградация.

 

Всем доброго времени суток!

 

Тоже заметил такую ситуацию что pf не выходит за пределы 600000 состояний. Кто-нибудь тюнил это? :)

 

Делаешь set limit states 1000000 всеравно не больше 600000.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В man pf.conf в разделе про лимиты:

 

set limit
          Sets hard limits on the memory pools used by the packet filter.
          See zone(9) for an explanation of memory pools.

          For example,

                set limit states 20000

 

Кажется понятно что количество состояний в таблице зависит от memory pool, только вот сколько не гуглю не могу найти как изменить этот размер памяти для pf. Неужели придется править исходники и пересобирать :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Он использует UMA алокатор, его статистика доступна так: vmstat -z | grep pf

ставите и смотрите сколько лимит для зоны в системе.

В системе может не хватать памяти для достижения лимита, особенно в х32.

 

Лимит элементов задаётся через: uma_zone_set_max (в коде) /usr/src/sys/contrib/pf/net/pf_ioctl.c:

 

case DIOCSETLIMIT: {
	struct pfioc_limit	*pl = (struct pfioc_limit *)addr;
	int		     old_limit;

	if (pl->index < 0 || pl->index >= PF_LIMIT_MAX ||
    	V_pf_pool_limits[pl->index].pp == NULL) {
		error = EINVAL;
		goto fail;
	}

	uma_zone_set_max(V_pf_pool_limits[pl->index].pp, pl->limit);
	old_limit = V_pf_pool_limits[pl->index].limit;
	V_pf_pool_limits[pl->index].limit = pl->limit;
	pl->limit = old_limit;
	break;
}

 

(код почищен от ифдеф для опенбсд)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Он использует UMA алокатор, его статистика доступна так: vmstat -z | grep pf

ставите и смотрите сколько лимит для зоны в системе.

В системе может не хватать памяти для достижения лимита, особенно в х32.

 

Лимит элементов задаётся через: uma_zone_set_max (в коде) /usr/src/sys/contrib/pf/net/pf_ioctl.c:

 

case DIOCSETLIMIT: {
	struct pfioc_limit	*pl = (struct pfioc_limit *)addr;
	int		     old_limit;

	if (pl->index < 0 || pl->index >= PF_LIMIT_MAX ||
    	V_pf_pool_limits[pl->index].pp == NULL) {
		error = EINVAL;
		goto fail;
	}

	uma_zone_set_max(V_pf_pool_limits[pl->index].pp, pl->limit);
	old_limit = V_pf_pool_limits[pl->index].limit;
	V_pf_pool_limits[pl->index].limit = pl->limit;
	pl->limit = old_limit;
	break;
}

 

(код почищен от ифдеф для опенбсд)

 

У меня вот так:

 

pfsrctrpl:                124,    60016,        0,        0,        0,        0
pfrulepl:                 828,        0,       37,      155,      353,        0
pfstatepl:                284,   900004,   225464,   395576, 2509145129,        0
pfaltqpl:                 224,        0,        0,        0,        0,        0
pfpooladdrpl:              68,        0,       29,      251,      294,        0
pfrktable:               1240,     1002,        0,        0,        0,        0
pfrkentry:                156,   400000,        0,        0,        0,        0
pfrkentry2:               156,        0,        0,        0,        0,        0
pffrent:                   16,   300034,        0,     1218, 363642658,        0
pffrag:                    48,        0,        0,     1014, 179993779,        0
pffrcache:                 48,    10062,        0,        0,        0,        0
pffrcent:                  12,    50141,        0,        0,        0,        0
pfstatescrub:              28,        0,        0,        0,        0,        0
pfiaddrpl:                100,        0,        0,        0,        0,        0
pfospfen:                 108,        0,      696,      204,     9744,        0
pfosfp:                    28,        0,      407,      482,     5698,        0

 

Это не пиковая загрузка.

 

Днем сегодня кол-во состояний было до упора, потом я перезапустил pf, теперь их кол-во плавно растет. До перезапуска было впечатление что pf не очищал состояния...

 

4cda68080b97.png

 

P.S. система i386

 

7.3-STABLE-201008 FreeBSD 7.3-STABLE-201008

Изменено пользователем Silius

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

может быть в таймаутах дело?

 

adaptive.start
                    When the number of state entries exceeds this value,
                    adaptive scaling begins.  All timeout values are scaled
                    linearly with factor (adaptive.end - number of states) /
                    (adaptive.end - adaptive.start).

            Adaptive timeouts are enabled by default, with an adaptive.start
            value equal to 60% of the state limit, and an adaptive.end value
            equal to 120% of the state limit.  They can be disabled by
            setting both adaptive.start and adaptive.end to 0.

было примерно то же, пока не сделал так:

# pfctl -st | grep adaptive

adaptive.start                0 states
adaptive.end                  0 states

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Или поставить агрессив, тогда стейтов станет меньше в принципе.

На х32 памяти под ядерные нужды меньше отводится.

Был какой то тюнинг на тему мах кернел мем, именно для х32, погуглите, может даже в тюнигах Сысова.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Или поставить агрессив, тогда стейтов станет меньше в принципе.

На х32 памяти под ядерные нужды меньше отводится.

Был какой то тюнинг на тему мах кернел мем, именно для х32, погуглите, может даже в тюнигах Сысова.

Добрый день!

 

Причину в принципе нашел, aggressive уже давно стоит. В конфиге теперь так:

 

set limit { states 1800000, frags 300000, src-nodes 60000, table-entries 400000}

set optimization aggressive

 

До этого стояло set limit 900000 и эти adaptive timeouts вычисляются автоматически:

 

# pfctl -st | grep adaptive
adaptive.start          1080000 states
adaptive.end            2160000 states

 

Поставил просто limit побольше до 1800000 теперь adaptive стал больше. В man pf.conf говориться что отключить эти adaptive timeouts можно выставив их в ноль:

set timeout { adaptive.start 0, adaptive.end 0 }

я это проверил, в итоге сессии достигают выставленного лимита и начинается деградация (разрывы соединения и т.д.). В общем пока точно не понял про механизм adaptive, надо еще почитать. Главное то что если ставить состояний больше то они всеравно не достигают этого лимита а максимум будет это adaptive.start.

 

По памяти ядра делался тюнинг на увеличение, пока все стабильно на x32.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.