ipfw verrevpath performance broken in 9.2
Denis V. Klimkov
falcon at tcm.by
Fri Dec 27 11:16:45 UTC 2013
Hello Alexander,
Friday, December 27, 2013, 1:25:28 PM, you wrote:
>> Recently upgraded router system from 9.0-RELEASE to 9.2-STABLE and
>> got 100% CPU utilisation on all cores with interrupts under the same
>> load that had about 25-30% CPU utilisation before. Of course that lead
AVC> Looks interesting.
AVC> Are you sure all other configs/data load are the same?
Yes, everything was the same. Later changed NIC from 4 igbs to 1 ix.
AVC> I'm particularly interested in changes in: number of NIC queues, their
AVC> bindings and firewall ruleset.
igb0: <Intel(R) PRO/1000 Network Connection version - 2.3.10> port 0x3020-0x303f mem 0xc6b20000-0xc6b3ffff,0xc6b44000-0xc6b47fff irq 40 at device 0.0 on pci1
igb0: Using MSIX interrupts with 5 vectors
igb0: Ethernet address: 00:15:17:b9:ef:dc
igb0: Bound queue 0 to cpu 0
igb0: Bound queue 1 to cpu 1
igb0: Bound queue 2 to cpu 2
igb0: Bound queue 3 to cpu 3
igb1: <Intel(R) PRO/1000 Network Connection version - 2.3.10> port 0x3000-0x301f mem 0xc6b00000-0xc6b1ffff,0xc6b40000-0xc6b43fff irq 28 at device 0.1 on pci1
igb1: Using MSIX interrupts with 5 vectors
igb1: Ethernet address: 00:15:17:b9:ef:dd
igb1: Bound queue 0 to cpu 4
igb1: Bound queue 1 to cpu 5
igb1: Bound queue 2 to cpu 6
igb1: Bound queue 3 to cpu 7
pcib2: <ACPI PCI-PCI bridge> irq 24 at device 3.0 on pci0
pci2: <ACPI PCI bus> on pcib2
pcib3: <ACPI PCI-PCI bridge> irq 26 at device 5.0 on pci0
pci3: <ACPI PCI bus> on pcib3
igb2: <Intel(R) PRO/1000 Network Connection version - 2.3.10> port 0x2020-0x203f mem 0xc6420000-0xc643ffff,0xc6000000-0xc63fffff,0xc64c4000-0xc64c7fff irq 26 at device 0.0 on pci
3
igb2: Using MSIX interrupts with 5 vectors
igb2: Ethernet address: 00:1b:21:4a:69:78
igb2: Bound queue 0 to cpu 8
igb2: Bound queue 1 to cpu 9
igb2: Bound queue 2 to cpu 10
igb2: Bound queue 3 to cpu 11
igb3: <Intel(R) PRO/1000 Network Connection version - 2.3.10> port 0x2000-0x201f mem 0xc6400000-0xc641ffff,0xc5c00000-0xc5ffffff,0xc64c0000-0xc64c3fff irq 25 at device 0.1 on pci
3
igb3: Using MSIX interrupts with 5 vectors
igb3: Ethernet address: 00:1b:21:4a:69:79
igb3: Bound queue 0 to cpu 12
igb3: Bound queue 1 to cpu 13
igb3: Bound queue 2 to cpu 14
igb3: Bound queue 3 to cpu 15
09000 546827 20995102 deny ip from any to 224.0.0.0/8
09900 251418446 34849277439 fwd 127.0.0.1,3333 tcp from table(100) to not table(9) dst-port 80
09901 251226827 74150859375 allow tcp from any 80 to table(100) out
09999 324676485 22931487657 deny ip from not table(9) to table(100)
09999 93075888 5276322115 deny ip from table(100) to not table(9)
10000 234714177213 241730704799083 allow ip from table(5) to any
10005 245356169 18235355072 deny ip from any to any dst-port 135,137-139,445 out
10006 2929342953 182985124889 deny ip from table(104) to any
10020 688240709 620932403164 divert 8668 ip from any to 1.1.1.1
10400 682416642 620798165276 allow ip from any to any diverted
10770 73183544 9041870946 deny ip from table(2) to any out via vlan18
10772 11698 802274 deny ip from table(3) to any out via vlan4
10773 8807403 463870927 deny ip from any to table(2) out iptos reliability
10774 4923414 300617694 deny ip from any to table(3) out iptos reliability
10775 99485 4397077 deny ip from any to table(3) out iptos throughput
11010 3659429 430047150 deny ip from any to any not verrevpath in via vlan6
11020 719931 58619220 deny ip from any to any not verrevpath in via vlan7
11025 68141 5144481 deny ip from any to any not verrevpath in via vlan8
11030 202144 6785732 deny ip from any to any not verrevpath in via vlan9
11040 171291 56196945 deny ip from any to any not verrevpath in via vlan10
11045 291914032 39427773226 deny ip from any to any not verrevpath in via vlan11
11060 6102962 441745213 deny ip from any to any not verrevpath in via vlan15
11070 4832442 1259880158 deny ip from any to any not verrevpath in via vlan16
11080 814769 95745079 deny ip from any to any not verrevpath in via vlan17
11101 2901098 628552748 deny ip from any to any not verrevpath in via vlan26
11102 1264750 146468688 deny ip from any to any not verrevpath in via vlan27
11110 902441 294155831 deny ip from any to any not verrevpath in via vlan21
11120 628324 31060933 deny ip from any to any not verrevpath in via vlan23
11130 1381 83245 deny ip from any to any not verrevpath in via vlan24
11138 4258607 3389925416 deny ip from any to any not verrevpath in via vlan31
11150 56 2792 deny ip from any to any not verrevpath in via vlan40
15000 3363576 188412499 deny ip from not table(30) to table(31) out
19950 64832991 3461330324 deny tcp from table(25) to not table(8) dst-port 25 out
19960 693595 34424883 deny ip from table(101) to table(103) out
19970 466690 57539243 deny ip from not table(30) to me dst-port 161,162,21,3306
20000 35523656903 32569055261754 pipe tablearg ip from any to table(1) out iptos reliability
20010 36208900912 9635678183009 pipe tablearg ip from table(6) to any out via vlan18
20020 6963415930 5823875049163 pipe tablearg ip from any to table(10) out
20030 5370808609 1175572076679 pipe tablearg ip from table(11) to any out
60005 3749710 1625777707 deny udp from any to 2.2.2.100 dst-port 5060
60005 7940451 2910219814 deny udp from any to 2.2.2.1 dst-port 5060
60020 578206 71125954 divert 8668 ip from 192.168.0.0/16 to any out via vlan4
60020 120740 17363073 divert 8668 ip from 192.168.0.0/16 to any out via vlan5
60020 6485285 2421107818 divert 8668 ip from 192.168.0.0/16 to any out via vlan18
60020 22096 1876197 divert 8668 ip from 192.168.0.0/16 to any out via vlan11
60600 529456103 183816441399 allow ip from any to any diverted
62110 2482047796 207871928397 deny ip from not table(32) to any out via vlan18
62120 34184526 40243097237 allow ip from 3.3.3.0/24 to 3.3.3.0/24 via vlan4
62130 19323045 1282467423 deny ip from not table(32) to any out via vlan4
62140 21168902 1790816969 deny ip from any to not table(32) in via vlan4
64000 8160465887601 5338926261446363 allow ip from any to any
65000 1165747 214509370 allow ip from any to any
65535 5625 3645710 deny ip from any to any
AVC> Can you share your traffic rate (e.g. netstat -i -w1), cpu info and NIC
AVC> info?
Now it's:
# netstat -i -w1
input (Total) output
packets errs idrops bytes packets errs bytes colls
312136 0 0 216478043 312375 0 216359751 0
311760 0 0 217559784 311654 0 217792531 0
295196 0 0 203318550 295319 0 211926680 0
300204 0 0 206880841 300219 0 206348483 0
297019 0 0 203171215 296930 0 207103301 0
308142 0 0 211553806 308294 0 207969407 0
320911 0 0 221584256 320955 0 218811245 0
CPU: Intel(R) Xeon(R) CPU E5520 @ 2.27GHz (2261.30-MHz 686-class CPU)
AVC> What does system load (without verrevpath) looks like in comparison with
AVC> 9.0 (in terms of CPU _and_ packets/sec) ?
Sorry, cannot compare it. Old graphs are lost. AFAIR it was up to 30 LA
in peak times when there was about 400+ kpss in and same out. I can
try to add some rules with verrevpath now in 9.2 system.
Without verrevpath rules top ISHP shows:
last pid: 58440; load averages: 2.52, 2.52, 2.51 up 1+06:25:38 14:05:02
268 processes: 17 running, 177 sleeping, 74 waiting
CPU 0: 0.0% user, 0.0% nice, 0.0% system, 28.2% interrupt, 71.8% idle
CPU 1: 0.0% user, 0.0% nice, 0.0% system, 38.0% interrupt, 62.0% idle
CPU 2: 0.4% user, 0.0% nice, 0.8% system, 29.8% interrupt, 69.0% idle
CPU 3: 0.0% user, 0.0% nice, 0.4% system, 26.7% interrupt, 72.9% idle
CPU 4: 0.0% user, 0.0% nice, 0.8% system, 32.5% interrupt, 66.7% idle
CPU 5: 0.0% user, 0.0% nice, 0.8% system, 31.4% interrupt, 67.8% idle
CPU 6: 0.0% user, 0.0% nice, 0.0% system, 30.2% interrupt, 69.8% idle
CPU 7: 0.0% user, 0.0% nice, 0.0% system, 32.2% interrupt, 67.8% idle
CPU 8: 0.0% user, 0.0% nice, 0.8% system, 0.0% interrupt, 99.2% idle
CPU 9: 0.8% user, 0.0% nice, 0.0% system, 0.0% interrupt, 99.2% idle
CPU 10: 0.4% user, 0.0% nice, 1.2% system, 0.0% interrupt, 98.4% idle
CPU 11: 0.0% user, 0.0% nice, 0.0% system, 0.8% interrupt, 99.2% idle
CPU 12: 0.4% user, 0.0% nice, 0.0% system, 0.8% interrupt, 98.8% idle
CPU 13: 0.0% user, 0.0% nice, 0.4% system, 0.0% interrupt, 99.6% idle
CPU 14: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle
CPU 15: 0.0% user, 0.0% nice, 0.8% system, 0.0% interrupt, 99.2% idle
netstat -iw 1
input (Total) output
packets errs idrops bytes packets errs bytes colls
322k 0 0 219M 322k 0 220M 0
324k 0 0 224M 324k 0 222M 0
325k 0 0 227M 325k 0 227M 0
352k 0 0 247M 352k 0 242M 0
After adding verrevpath rules:
last pid: 58471; load averages: 3.19, 2.82, 2.64 up 1+06:30:04 14:09:28
270 processes: 21 running, 179 sleeping, 70 waiting
CPU 0: 0.0% user, 0.0% nice, 0.4% system, 51.4% interrupt, 48.2% idle
CPU 1: 0.0% user, 0.0% nice, 0.4% system, 44.7% interrupt, 54.9% idle
CPU 2: 0.0% user, 0.0% nice, 0.8% system, 37.6% interrupt, 61.6% idle
CPU 3: 0.0% user, 0.0% nice, 0.0% system, 38.8% interrupt, 61.2% idle
CPU 4: 0.4% user, 0.0% nice, 0.0% system, 38.8% interrupt, 60.8% idle
CPU 5: 0.0% user, 0.0% nice, 0.4% system, 41.2% interrupt, 58.4% idle
CPU 6: 0.4% user, 0.0% nice, 0.4% system, 43.9% interrupt, 55.3% idle
CPU 7: 0.0% user, 0.0% nice, 0.0% system, 41.6% interrupt, 58.4% idle
Looks like now this rules does not affect load such a way it was
before. But now NICs configuration differs. There were
ifconfig_lagg0="laggproto loadbalance laggport igb0 laggport igb1 laggport igb2 laggport igb3"
and all vlans over lagg0. Now it is one ix0 without lagg and all vlans
are over ix0.
---
Denis V. Klimkov
More information about the freebsd-net
mailing list