Dyr Posted April 8, 2014 Posted April 8, 2014 (edited) Добрый день, коллеги и не только. Позволю себе обратиться к коллективному разуму. Имею, на мой взгляд, проблему, выражающуюся в недостаточной производительности NAT-серверов под FreeBSD. Все попытки тюнинга и отладки не помогают увеличить трафик более чем на, по прикидкам, процентов 10. "Раскачать" Фрю пытаюсь ещё с версии 8 под Core2Duo, но всё равно до сих пор ощущение недостаточной производительности. Сейчас в каждом из трёх моих серверов стоит Xeon E3-1270 под управлением FreeBSD 10.0-STABLE. Сетевые карты 82580(igb) и, на одном сервере, 82599(ix). Сервера выполняют NAT на базе pf, шейпирование на базе ipfw dummynet и генерацию netflow с помощью ipfw и ng_tee в ng_netflow. При 140Мбайт/сек и 130 Мппс/сек, соответственно, уже начинаются серьёзные "тормоза", связанные со стопроцентной загрузкой каждого ядра прерываниями от сетевых карт или net.isr (в зависимости от настройки, опишу ниже) и LA, соответственно, выходящим за пределы 4 для 4-ядерного процессора с отключенным HT. Что пытался сделать "по крупному". На одном из серверов перешёл с двух laggX, собранных из igb, и вланов на них, к десятигигабитной карте на 82599 и нетегированном трафике через него. Перешёл с FreeBSD 9 на FreeBSD 10 в связи с анонсированным переписыванием pf и давно ожидаемой работы оного в многопоточном режиме (попутно отловив любопытный баг в pf states благодаря @glebius). Отключал полностью ipfw. Всё напрасно, качественного скачка производительности не происходило. О "играх" с net.inet.ip.fastforwarding, net.isr.dispatch и т.п. я даже и не говорю. Пытался я разобраться и с помощью профилирования. К сожалению, моего опыта не хватает для полноценной работы с такими мощными инструментами, как pmstat и dtrace, пример их вывода приведён в конце поста. Перехожу к конкретным настройкам и показателям сервера. Скажем, с 10Гбит картой, сейчас, с небольшим трафиком в ~50Мбайт/сек sysctl.conf dev.em.0.fc=0 dev.em.0.rx_processing_limit=1000 dev.em.1.fc=0 dev.em.1.rx_processing_limit=1000 dev.ix.0.fc=0 dev.ix.1.fc=0 hw.intr_storm_threshold=12000 kern.corefile="/var/tmp/%U/%N.core" kern.ipc.maxsockbuf=2097152 kern.ipc.somaxconn=4096 kern.random.sys.harvest.ethernet=0 kern.random.sys.harvest.interrupt=0 kern.random.sys.harvest.point_to_point=0 kern.random.sys.harvest.swi=0 kern.timecounter.hardware=HPET net.inet.ip.dummynet.hash_size=8192 net.inet.ip.dummynet.io_fast=1 net.inet.ip.fw.dyn_buckets=262144 net.inet.ip.fw.dyn_max=800000 net.inet.ip.intr_queue_maxlen=3000 net.inet.ip.redirect=0 net.inet.ip.stealth=1 net.inet.tcp.blackhole=1 net.inet.tcp.delayed_ack=0 net.inet.tcp.drop_synfin=1 net.inet.tcp.maxtcptw=65535 net.inet.tcp.recvspace=65228 net.inet.tcp.sendspace=65228 net.inet.tcp.syncookies=1 net.inet.tcp.tso=0 net.inet.udp.blackhole=1 net.inet.udp.maxdgram=57344 net.inet.udp.recvspace=65228 net.raw.recvspace=64000 net.raw.sendspace=64000 loader.conf autoboot_delay=1 hint.acpi_throttle.0.disabled=1 hint.p4tcc.0.disabled=1 hw.em.rx_process_limit=-1 hw.em.rxd=4096 hw.em.txd=4096 hw.ix.num_queues=3 hw.ix.rx_process_limit=-1 hw.ix.rxd=4096 hw.ix.tx_process_limit=-1 hw.ix.txd=4096 hw.ixgbe.num_queues=3 hw.ixgbe.rx_process_limit=-1 hw.ixgbe.rxd=4096 hw.ixgbe.tx_process_limit=-1 hw.ixgbe.txd=4096 hw.vga.textmode=1 mga_load="YES" net.graph.maxdata=16384 net.inet.ip.fw.default_to_accept=1 net.inet.tcp.hostcache.cachelimit=0 net.isr.bindthreads=1 net.isr.defaultqlimit=1024 net.isr.maxthreads=128 net.pf.source_nodes_hashsize=81920 net.pf.states_hashsize=327680 pf_load="YES" # packet filter zfs_load="YES" pfctl -si root@nata1:/usr/home/dyr (23132) pfctl -si No ALTQ support in kernel ALTQ related functions disabled Status: Enabled for 0 days 19:12:00 Debug: Urgent State Table Total Rate current entries 64636 searches 18537839541 268197.9/s inserts 125193861 1811.3/s removals 125134300 1810.4/s Counters match 9411244729 136158.1/s bad-offset 0 0.0/s fragment 338 0.0/s short 650 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 1212 0.0/s proto-cksum 0 0.0/s state-mismatch 626712 9.1/s state-insert 1269 0.0/s state-limit 0 0.0/s src-limit 0 0.0/s synproxy 0 0.0/s root@nata1:/usr/home/dyr (23133) sysctl net.ix.0|fgrep -v ': 0' dev.ix.0.%desc: Intel(R) PRO/10GbE PCI-Express Network Driver, Version - 2.5.15 dev.ix.0.%driver: ix dev.ix.0.%location: slot=0 function=0 dev.ix.0.%pnpinfo: vendor=0x8086 device=0x10fb subvendor=0x8086 subdevice=0x0003 class=0x020000 dev.ix.0.%parent: pci2 dev.ix.0.enable_aim: 1 dev.ix.0.link_irq: 5911 dev.ix.0.queue0.interrupt_rate: 500000 dev.ix.0.queue0.irqs: 1718610612 dev.ix.0.queue0.txd_head: 1604 dev.ix.0.queue0.txd_tail: 1614 dev.ix.0.queue0.tx_packets: 3090264050 dev.ix.0.queue0.rxd_head: 3162 dev.ix.0.queue0.rxd_tail: 3161 dev.ix.0.queue0.rx_packets: 3157400666 dev.ix.0.queue0.rx_bytes: 2561912049813 dev.ix.0.queue0.rx_copies: 1382007822 dev.ix.0.queue1.interrupt_rate: 26315 dev.ix.0.queue1.irqs: 1679256836 dev.ix.0.queue1.txd_head: 1491 dev.ix.0.queue1.txd_tail: 1491 dev.ix.0.queue1.tx_packets: 3012775640 dev.ix.0.queue1.rxd_head: 1045 dev.ix.0.queue1.rxd_tail: 1043 dev.ix.0.queue1.rx_packets: 3080709140 dev.ix.0.queue1.rx_bytes: 2498049337717 dev.ix.0.queue1.rx_copies: 1347550640 dev.ix.0.queue2.interrupt_rate: 500000 dev.ix.0.queue2.irqs: 1679031621 dev.ix.0.queue2.txd_head: 231 dev.ix.0.queue2.txd_tail: 231 dev.ix.0.queue2.tx_packets: 3042106788 dev.ix.0.queue2.rxd_head: 473 dev.ix.0.queue2.rxd_tail: 472 dev.ix.0.queue2.rx_packets: 3108700633 dev.ix.0.queue2.rx_bytes: 2526465969896 dev.ix.0.queue2.rx_copies: 1354247978 dev.ix.0.mac_stats.local_faults: 8 dev.ix.0.mac_stats.remote_faults: 1 dev.ix.0.mac_stats.total_octets_rcvd: 7661137735622 dev.ix.0.mac_stats.good_octets_rcvd: 7661134492076 dev.ix.0.mac_stats.total_pkts_rcvd: 9346739559 dev.ix.0.mac_stats.good_pkts_rcvd: 9346723529 dev.ix.0.mac_stats.mcast_pkts_rcvd: 33023 dev.ix.0.mac_stats.bcast_pkts_rcvd: 300 dev.ix.0.mac_stats.rx_frames_64: 1177914004 dev.ix.0.mac_stats.rx_frames_65_127: 2712448594 dev.ix.0.mac_stats.rx_frames_128_255: 285974221 dev.ix.0.mac_stats.rx_frames_256_511: 134374175 dev.ix.0.mac_stats.rx_frames_512_1023: 220888076 dev.ix.0.mac_stats.rx_frames_1024_1522: 4815132083 dev.ix.0.mac_stats.checksum_errs: 139958192 dev.ix.0.mac_stats.good_octets_txd: 7577920974112 dev.ix.0.mac_stats.total_pkts_txd: 9145061047 dev.ix.0.mac_stats.good_pkts_txd: 9145061043 dev.ix.0.mac_stats.bcast_pkts_txd: 144 dev.ix.0.mac_stats.mcast_pkts_txd: 1 dev.ix.0.mac_stats.tx_frames_64: 1176790855 dev.ix.0.mac_stats.tx_frames_65_127: 2570149826 dev.ix.0.mac_stats.tx_frames_128_255: 277634744 dev.ix.0.mac_stats.tx_frames_256_511: 133774126 dev.ix.0.mac_stats.tx_frames_512_1023: 218495272 dev.ix.0.mac_stats.tx_frames_1024_1522: 4768216225 netstat -I vlan11 -dhw 1 root@nata1:/usr/home/dyr (23134) netstat -I vlan11 -dhw 1 input vlan11 output packets errs idrops bytes packets errs bytes colls drops 43K 0 0 29M 47K 0 42M 0 44K 0 0 31M 49K 0 42M 0 42K 0 0 29M 48K 0 43M 0 42K 0 0 31M 47K 0 40M 0 42K 0 0 31M 46K 0 40M 0 44K 0 0 28M 48K 0 44M 0 42K 0 0 28M 47K 0 42M 0 ^C top -aSCHIP last pid: 66303; load averages: 1.25, 1.22, 1.29 up 1+21:53:33 20:56:56 278 processes: 8 running, 242 sleeping, 1 zombie, 27 waiting CPU 0: 0.0% user, 0.0% nice, 13.4% system, 29.4% interrupt, 57.2% idle CPU 1: 0.0% user, 0.0% nice, 0.0% system, 33.3% interrupt, 66.7% idle CPU 2: 0.0% user, 0.0% nice, 0.5% system, 42.8% interrupt, 56.7% idle CPU 3: 0.0% user, 0.0% nice, 2.0% system, 6.0% interrupt, 92.0% idle Mem: 5352K Active, 213M Inact, 5423M Wired, 2904K Cache, 2277M Free ARC: 3565M Total, 1787M MFU, 1457M MRU, 1040K Anon, 60M Header, 261M Other Swap: 4096M Total, 4096M Free PID USERNAME PRI NICE SIZE RES STATE C TIME CPU COMMAND 11 root 155 ki31 0K 64K RUN 3 33.9H 100.00% [idle{idle: cpu3}] 11 root 155 ki31 0K 64K CPU1 1 33.4H 75.49% [idle{idle: cpu1}] 11 root 155 ki31 0K 64K CPU0 0 41.4H 73.39% [idle{idle: cpu0}] 11 root 155 ki31 0K 64K CPU2 2 33.7H 69.58% [idle{idle: cpu2}] 12 root -72 - 0K 464K WAIT 2 16:15 32.28% [intr{swi1: netisr 2}] 12 root -72 - 0K 464K CPU0 0 14:57 31.05% [intr{swi1: netisr 0}] 12 root -72 - 0K 464K CPU1 1 16:05 26.56% [intr{swi1: netisr 1}] 12 root -92 - 0K 464K WAIT 3 695:50 3.56% [intr{irq266: ix0:que }] 12 root -92 - 0K 464K WAIT 1 710:10 3.37% [intr{irq264: ix0:que }] 12 root -92 - 0K 464K WAIT 2 691:10 2.98% [intr{irq265: ix0:que }] 12 root -60 - 0K 464K WAIT 2 28:27 0.10% [intr{swi4: clock}] Профилирование: # pmcstat -S instructions -O /tmp/sample.out & # sleep 30 && killall pmcstat # pmcstat -R /tmp/sample.out -g && gprof -l -K INSTR_RETIRED_ANY/kernel |head -n 60 | tail -n 25 time is in ticks, not seconds granularity: each sample hit covers 4 byte(s) for 0.00% of 1585953.00 seconds % cumulative self self total time seconds seconds calls ms/call ms/call name 19.6 311393.00 311393.00 42710 7290.87 12981.61 ipfw_chk [9] 8.6 447664.00 136271.00 116269 1172.03 1172.03 rn_match [17] 8.5 582786.00 135122.00 20129 6712.80 7888.93 sched_idletd [15] 5.1 664060.00 81274.00 0 100.00% fsk_match [24] 4.7 737889.00 73829.00 74322 993.37 1045.37 __mtx_lock_sleep [25] 3.2 788562.00 50673.00 45306 1118.46 1118.46 __rw_rlock [31] 2.4 827071.00 38509.00 19520 1972.80 1972.80 bzero [35] 2.2 861608.00 34537.00 29790 1159.35 1159.35 _rw_runlock_cookie [37] 2.1 895222.00 33614.00 33741 996.24 1003.90 dn_ht_find [38] 1.4 917849.00 22627.00 21460 1054.38 1344.01 uma_zalloc_arg <cycle 4> [41] 1.3 938280.00 20431.00 33574 608.54 905.65 uma_zfree_arg <cycle 4> [39] 1.3 958563.00 20283.00 20283 1000.00 1000.00 cpu_search [53] 1.3 978659.00 20096.00 82846 242.57 1571.22 ipfw_lookup_table [18] 1.1 996646.00 17987.00 7330 2453.89 2453.89 bcopy [56] 1.1 1013947.00 17301.00 7731 2237.87 2237.87 bcmp [58] 1.0 1030179.00 16232.00 8505 1908.52 9685.89 ixgbe_rxeof [23] 0.9 1044990.00 14811.00 51153 289.54 10881.66 ip_output [8] 0.9 1059296.00 14306.00 24481 584.37 590.02 dn_ht_scan_bucket <cycle 3> [63] 0.8 1072312.00 13016.00 8671 1501.10 2631.55 ixgbe_xmit [49] 0.8 1085287.00 12975.00 82846 156.62 1328.65 rn_lookup [19] hotkernel -m Sampling... Hit Ctrl-C to end. ^C MODULE COUNT PCNT zfs.ko 4 0.0% ng_ipfw.ko 86 0.1% netgraph.ko 188 0.2% ng_netflow.ko 626 0.6% pf.ko 2789 2.8% kernel 96396 96.3% hotkernel ^C FUNCTION COUNT PCNT ... pf.ko`pf_match_translation 452 0.8% kernel`__rw_rlock 489 0.9% kernel`bcmp 547 1.0% kernel`spinlock_exit 731 1.3% kernel`dn_ht_find 861 1.5% kernel`__mtx_lock_sleep 921 1.6% kernel`ipfw_chk 1322 2.4% kernel`rn_match 1727 3.1% kernel`fsk_match 2074 3.7% kernel`cpu_idle 13256 23.7% kernel`sched_idletd 25931 46.3% # dtrace -n 'sched:::on-cpu { @[execname] = count(); } profile:::tick-20s { exit(0); }' dtrace: description 'sched:::on-cpu ' matched 2 probes CPU ID FUNCTION:NAME 3 32261 :tick-20s accounting 2 enc_daemon0 5 bufdaemon 20 softdepflush 21 pagedaemon 25 vnlru 27 dtrace 87 syncer 159 zfskern 196 usb 207 rand_harvestq 227 ftp-proxy 342 cam 352 atop 448 snmpd 696 pf purge 847 ng_queue 1691 kernel 39414 idle 1204119 intr 1681222 Куда смотреть? Что ещё профилировать? Или я действительно упираюсь в предел производительности железа на пресловутых 150 Мбайт/сек NAT-трафика? Edited April 11, 2014 by Dyr Вставить ник Quote
roysbike Posted April 8, 2014 Posted April 8, 2014 (edited) CPU E5-2430 0 @ 2.20GHz Freebsd 9.2 PF_nat и только , карты Intel 82599 X520-da2 , помер на 1 гбит, прерывания в 100 процентов, вообще попа полная была. Срулил на debian в него приходит 2 алпинка по 10 гбит, уходит на 3420-28tc по 10 гбит. Роль нат сервера. Шейпер , netflow, PPPoE на отдельных машинах (Freebsd). Попробуйте для начала, вынести nat и netflow на отдельную машину с Debian увидите разницу P.S. шас натит 3.7 гбит входи и 1 гбит на выход, не > 40- прцентов по прерываиям Edited April 8, 2014 by roysbike Вставить ник Quote
Dyr Posted April 8, 2014 Author Posted April 8, 2014 roysbike, спасибо за совет, в принципе, к этому и склоняюсь. Но как бы это сказать...обидно уйти на другую ось, не понимая, в чём затык этой. Кстати, шейпинг и нетфлоу у меня очень мало нагружают сервер в обычных (не 64-байтный шторм hping'ом на rand destination с 500 kpps ;) ) условиях. Это видно и из профайлинга, и из опыта отключения ipfw вовсе: нагрузка на процессор возрастает пропорционально увеличению трафика за счёт отключения шейпера и только. Вставить ник Quote
vlad11 Posted April 8, 2014 Posted April 8, 2014 Не видно netstat -m Почитайте статьи Евгения Гроссбейна (dadv) по тюнингу. Я уже вижу, что у вас многие вещи выставлены чуть больше дефолтных. Вставить ник Quote
vlad11 Posted April 8, 2014 Posted April 8, 2014 P.S. шас натит 3.7 гбит входи и 1 гбит на выход, не > 40- прцентов по прерываиям PPS еще приведите. У меня клиент поснимал маршрутизатор на дебиан после проблем ~ 2Гбит. Сейчас у него (~4Гбит) принимает траффик D-Link DES-7210, отдают 4 гейта на Дебиане. Вставить ник Quote
Dyr Posted April 8, 2014 Author Posted April 8, 2014 (edited) Не видно netstat -m netstat -m 29368/9512/38880 mbufs in use (current/cache/total) 29340/3286/32626/507000 mbuf clusters in use (current/cache/total/max) 29340/3285 mbuf+clusters out of packet secondary zone in use (current/cache) 0/58/58/253499 4k (page size) jumbo clusters in use (current/cache/total/max) 0/0/0/75111 9k jumbo clusters in use (current/cache/total/max) 0/0/0/42249 16k jumbo clusters in use (current/cache/total/max) 66193K/9182K/75375K bytes allocated to network (current/cache/total) 0/0/0 requests for mbufs denied (mbufs/clusters/mbuf+clusters) 0/0/0 requests for mbufs delayed (mbufs/clusters/mbuf+clusters) 0/0/0 requests for jumbo clusters delayed (4k/9k/16k) 0/0/0 requests for jumbo clusters denied (4k/9k/16k) 0 requests for sfbufs denied 0 requests for sfbufs delayed 1 requests for I/O initiated by sendfile vmstat -m Type InUse MemUse HighUse Requests Size(s) ip6ndp 17 2K - 24 64,128 kbdmux 7 18K - 7 16,512,1024,2048 module 243 31K - 243 128 mtx_pool 3 18K - 3 2048 LED 24 2K - 24 16,128 osd 5 1K - 115 16,32,64 pmchooks 1 1K - 1 128 CAM DEV 10 20K - 18 2048 pgrp 25 4K - 8764 128 session 22 3K - 7629 128 proc 2 32K - 2 subproc 161 263K - 775402 512,4096 cred 96 15K - 5833208 64,256 plimit 17 5K - 84581 256 uidinfo 5 5K - 1987 128,4096 acpitask 1 8K - 1 raid_data 0 0K - 180 32,128,256 acpisem 25 4K - 25 128 CAM CCB 0 0K - 2524731 2048 acpidev 38 3K - 38 64 CAM path 13 1K - 69 32 sysctl 0 0K - 2078013 16,32,64 sysctloid 5135 255K - 5418 16,32,64,128 sysctltmp 0 0K - 6597 16,32,64,128,2048 tidhash 1 32K - 1 callout 5 2184K - 5 umtx 720 90K - 720 128 p1003.1b 1 1K - 1 16 SWAP 4 553K - 4 64 bus 675 61K - 3991 16,32,64,128,256,1024 bus-sc 66 202K - 1323 16,32,64,128,256,512,1024,2048,4096 entropy 1026 65K - 6813 32,64,4096 devstat 14 29K - 14 32,4096 eventhandler 113 10K - 113 64,128 kobj 127 508K - 409 4096 CAM periph 8 2K - 21 16,32,64,128,256 Per-cpu 1 1K - 1 32 UART 9 7K - 9 16,1024 CAM queue 17 6K - 44 16,32,512 rman 231 27K - 617 32,128 sbuf 1 1K - 2106 16,32,64,128,256,512,1024,2048,4096 CAM dev queue 7 1K - 7 64 stack 0 0K - 6 256 taskqueue 115 17K - 159 16,32,64,128,256 Unitno 26 2K - 1615944 32,64 vmem 2 640K - 8 ioctlops 0 0K - 10149782 16,32,64,128,256,512,1024,2048,4096 select 74 10K - 74 128 iov 0 0K - 784793 16,64,128,256,512 msg 4 30K - 4 2048,4096 sem 4 106K - 4 2048,4096 shm 1 20K - 1 tty 21 21K - 33 1024,2048 pts 1 1K - 7 256 mbuf_tag 543 136K - 17757659536 32,64,256 shmfd 1 8K - 1 soname 3 1K - 1563540 16,32,128 pcb 27 1029K - 117077 16,32,64,1024,2048 md_nvidia_data 0 0K - 30 512 acl 0 0K - 563 4096 vfscache 1 2048K - 1 vfs_hash 1 1024K - 1 vnodes 1 1K - 1 256 mount 116 4K - 311 16,32,64,128,256 vnodemarker 0 0K - 118983 512 BPF 9 2K - 23 16,128,512,4096 md_sii_data 0 0K - 30 512 ifnet 10 19K - 10 128,2048 ifaddr 107 29K - 119 32,64,128,256,512,2048,4096 ether_multi 186 11K - 230 16,32,64 clone 5 1K - 5 128 arpcom 7 1K - 7 16 gif 1 1K - 1 256 lltable 37 14K - 124 256,512 vlan 20 2K - 65 64,128 SCSI ENC 25 100K - 25200 16,64,256,2048 CAM SIM 7 2K - 7 256 USB 37 51K - 43 16,32,128,256,512,1024,2048,4096 USBdev 31 8K - 31 32,64,128,256,512,4096 routetbl 11863 4442K - 196628 32,64,128,256,512 igmp 9 3K - 9 256 in_multi 6 2K - 6 256 acpiintr 1 1K - 1 64 pci_link 16 2K - 16 64,128 hostcache 1 28K - 1 syncache 1 64K - 1 in6_multi 91 12K - 91 32,256 mld 9 2K - 9 128 DEVFS3 159 40K - 210 256 dummynet 17931 4488K - 17954 256,512,1024,2048,4096 dummynet 36523 13780K - 74742384 16,256,512 DEVFS1 133 67K - 165 512 IpFw/IpAcct 37 40K - 68 16,32,64,128,256,1024 ipfw_tbl 12858 3215K - 12931 256 audit_evclass 187 6K - 228 32 vm_pgdata 3 1025K - 3 128 UMAHash 47 849K - 162 512,1024,2048,4096 isadev 7 1K - 7 128 DEVFS 18 1K - 25 16,32,128 DEVFSP 1 1K - 129 64 cdev 8 2K - 8 256 fpukern_ctx 4 4K - 4 1024 memdesc 1 4K - 1 4096 pfs_nodes 21 6K - 21 256 filedesc 112 179K - 776573 16,32,2048,4096 atkbddev 1 1K - 1 64 sigio 2 1K - 2 64 filecaps 0 0K - 12 64 kdtrace 387 87K - 775905 64,256 kenv 104 12K - 116 16,32,64,128 kqueue 5 5K - 599 64,256,512,2048 proc-args 28 2K - 811531 16,32,64,128,256 apmdev 1 1K - 1 128 madt_table 0 0K - 1 4096 hhook 2 1K - 2 256 ithread 133 22K - 133 32,128,256 GEOM 92 17K - 1267 16,32,64,128,256,512,1024,2048 KTRACE 100 13K - 100 128 io_apic 1 2K - 1 2048 acpica 3352 337K - 65843 16,32,64,128,256,512,1024,2048 MCA 14 2K - 14 32,128 linker 585 1023K - 922 16,32,64,128,256,512,1024,2048,4096 CAM XPT 33 3K - 185 16,32,64,128,256,512,1024,2048 msi 21 3K - 21 128 nexusdev 5 1K - 5 16 lockf 17 2K - 552747 64,128 loginclass 3 1K - 6478 64 devbuf 17750 61975K - 18032 16,32,64,128,256,512,1024,2048,4096 temp 55 20K - 7380156 16,32,64,128,256,512,1024,2048,4096 solaris 526480 90749K - 56470727 16,32,64,128,256,512,1024,2048,4096 rpc 1 1K - 1 512 pf_temp 0 0K - 1961 128 pf_hash 3 2880K - 3 pf_ifnet 14 6K - 485752 256,2048 pf_osfp 1110 114K - 1110 64,128 pf_tag 2 1K - 2 128 pf_rule 2971 1680K - 1074443 128,1024 pf_table 6 12K - 3953 2048 kstat_data 6 1K - 6 64 netgraph_node 5 1K - 17 128,256 netgraph 5 2053K - 5 16,128 netgraph_msg 0 0K - 19 64,128,256,512,1024 netgraph_hook 6 1K - 6 128 netgraph_parse 0 0K - 2 16 netgraph_path 0 0K - 15 16 netgraph_sock 0 0K - 24 128 netflow_hash 2 6144K - 2 netflow_general 1 1K - 1 256 netgraph_ksock 1 1K - 1 128 ipmi 0 0K - 161 128,2048 crypto 1 1K - 1 512 xform 6 1K - 86642 16,32,64,128,256,512,1024,2048,4096 aesni_data 4 4K - 4 1024 pmc 127 685K - 194 16,32,128,256,512,1024,2048,4096 cyclic 16 2K - 60 16,32,64,128 fbt 30730 4098K - 30730 128 SDT 20 1K - 20 16,64 vmstat -z| grep -v ' 0, 0 ITEM SIZE LIMIT USED FREE REQ FAIL SLEEP 16 Bucket: 128, 0, 175, 693, 124722, 11, 0 32 Bucket: 256, 0, 6208, 3227, 3890337, 60, 0 64 Bucket: 512, 0, 2123, 1573, 1065010, 222, 0 vmem btag: 56, 0, 68359, 156, 68423, 965, 0 Почитайте статьи Евгения Гроссбейна (dadv) по тюнингу.Я уже вижу, что у вас многие вещи выставлены чуть больше дефолтных. Читал. И многие значения выставлены сообразно моему пониманию в том числе и его советов. Edited April 8, 2014 by Dyr Вставить ник Quote
roysbike Posted April 8, 2014 Posted April 8, 2014 (edited) P.S. шас натит 3.7 гбит входи и 1 гбит на выход, не > 40- прцентов по прерываиям PPS еще приведите. У меня клиент поснимал маршрутизатор на дебиан после проблем ~ 2Гбит. Сейчас у него (~4Гбит) принимает траффик D-Link DES-7210, отдают 4 гейта на Дебиане. 450K PPS Edited April 8, 2014 by roysbike Вставить ник Quote
Ivan_83 Posted April 8, 2014 Posted April 8, 2014 net.inet.tcp.delayed_ack=0 net.inet.tcp.drop_synfin=1 net.inet.tcp.maxtcptw=65535 net.inet.tcp.recvspace=65228 net.inet.tcp.sendspace=65228 net.inet.tcp.syncookies=1 net.inet.tcp.tso=0 Насчёт последнего параметра я не уверен, остальные точно касаются только TCP трафика самого хоста и не применяются к транзитному. mga_load="YES" pf_load="YES" # packet filter zfs_load="YES" Оно надо? пф 100% сам уже давно умеет подгружаться, из инит скрипта. 19.6 311393.00 311393.00 42710 7290.87 12981.61 ipfw_chk [9] Намёк что правила IPFW долго чекаются. Ещё, бывает что поверд и экологи из БИОС портят картину. И для интересу попробуйте hz=100, на слабых арм/мипс оно весьма даёт весьма заметный рост. Вставить ник Quote
Dyr Posted April 9, 2014 Author Posted April 9, 2014 ipfw (шейперы, ng_netflow) включен, трафик в одну сторону ~500 Мбит/сек, 108 000 state в pf, # (hotkernel &); sleep 60; killall dtrace ... pf.ko`pf_test_rule 2084 0.9% kernel`_rw_runlock_cookie 2107 0.9% kernel`__rw_rlock 3263 1.4% pf.ko`pf_match_translation 3844 1.6% kernel`bcmp 4634 1.9% kernel`dn_ht_find 4787 2.0% kernel`ipfw_chk 7942 3.3% kernel`__mtx_lock_sleep 9619 4.0% kernel`rn_match 10948 4.6% kernel`fsk_match 13211 5.5% kernel`sched_idletd 26259 11.0% kernel`acpi_cpu_c1 48633 20.3% kernel`cpu_idle 61718 25.7% systat -v 1 2 users Load 1,26 1,59 1,43 9 апр 12:53 Mem:KB REAL VIRTUAL VN PAGER SWAP PAGER Tot Share Tot Share Free in out in out Act 59696 7732 804608 8932 2224944 count All 4637192 10404 855868 43872 pages Proc: Interrupts r p d s w Csw Trp Sys Int Sof Flt ioflt 37048 total 30 69k 16 304 32k 72 2 cow atkbd0 1 zfod ehci0 16 3,9%Sys 37,6%Intr 0,0%User 0,0%Nice 58,5%Idle ozfod ehci1 23 | | | | | | | | | | %ozfod 1014 cpu0:timer ==+++++++++++++++++++ daefr 11248 ix0:que 0 dtbuf prcfr 10441 ix0:que 1 Namei Name-cache Dir-cache 214017 desvn totfr 10863 ix0:que 2 Calls hits % hits % 68609 numvn react 1 ix0:link 3 3 100 53504 frevn pdwak 97 em0 272 4 pdpgs ahci0 276 Disks ada0 ada1 pass0 pass1 pass2 intrn 1128 cpu3:timer KB/t 0,00 0,00 0,00 0,00 0,00 5652168 wire 1128 cpu1:timer tps 0 0 0 0 0 10620 act 1128 cpu2:timer MB/s 0,00 0,00 0,00 0,00 0,00 223084 inact %busy 0 0 0 0 0 2064 cache 2222880 free buf top -aSCHIP last pid: 91177; load averages: 1.39, 1.57, 1.43 up 2+13:51:03 12:54:26 283 processes: 5 running, 248 sleeping, 1 zombie, 29 waiting CPU 0: 0.0% user, 0.0% nice, 15.0% system, 0.0% interrupt, 85.0% idle CPU 1: 0.0% user, 0.0% nice, 1.7% system, 43.3% interrupt, 55.0% idle CPU 2: 0.0% user, 0.0% nice, 0.0% system, 41.7% interrupt, 58.3% idle CPU 3: 0.0% user, 0.0% nice, 1.7% system, 55.0% interrupt, 43.3% idle Mem: 9972K Active, 218M Inact, 5520M Wired, 2064K Cache, 2172M Free ARC: 4176M Total, 1934M MFU, 1896M MRU, 1040K Anon, 75M Header, 270M Other Swap: 4096M Total, 4096M Free PID USERNAME PRI NICE SIZE RES STATE C TIME CPU COMMAND 11 root 155 ki31 0K 64K CPU0 0 55.7H 100.00% [idle{idle: cpu0}] 11 root 155 ki31 0K 64K RUN 1 45.1H 60.16% [idle{idle: cpu1}] 11 root 155 ki31 0K 64K CPU2 2 45.5H 54.79% [idle{idle: cpu2}] 11 root 155 ki31 0K 64K CPU3 3 45.9H 53.08% [idle{idle: cpu3}] 12 root -92 - 0K 464K WAIT 3 927:01 51.27% [intr{irq266: ix0:que }] 12 root -92 - 0K 464K WAIT 2 925:39 50.98% [intr{irq265: ix0:que }] 12 root -92 - 0K 464K WAIT 1 946:45 43.16% [intr{irq264: ix0:que }] 12 root -60 - 0K 464K WAIT 2 37:49 0.39% [intr{swi4: clock}] ipfw (шейперы, ng_netflow) отключен (sysctl net.inet.ip.fw.enable=0), трафик в одну сторону ~600 Мбит/сек, 106 000 states в pf # (hotkernel &); sleep 60; killall dtrace ...kernel`spinlock_exit 1836 0.8% pf.ko`pf_test_rule 1916 0.8% kernel`ixgbe_rxeof 1931 0.8% kernel`rn_match 1941 0.8% kernel`dn_ht_scan_bucket 2030 0.8% kernel`__rw_rlock 2275 0.9% pf.ko`pf_match_translation 3819 1.6% kernel`bcmp 5118 2.1% kernel`sched_idletd 53884 22.1% kernel`acpi_cpu_c1 57648 23.6% kernel`cpu_idle 88482 36.3% systat -v 1 2 users Load 1,29 1,41 1,39 9 апр 12:58 Mem:KB REAL VIRTUAL VN PAGER SWAP PAGER Tot Share Tot Share Free in out in out Act 76332 9368 904056 10636 2146468 count All 4720444 12040 955332 45576 pages Proc: Interrupts r p d s w Csw Trp Sys Int Sof Flt ioflt 45608 total 33 77k 14 153 37k 163 2 cow atkbd0 1 2 zfod 6 ehci0 16 1,4%Sys 11,7%Intr 0,0%User 0,0%Nice 86,9%Idle ozfod 10 ehci1 23 | | | | | | | | | | %ozfod 1941 cpu0:timer =++++++ daefr 12638 ix0:que 0 dtbuf prcfr 12201 ix0:que 1 Namei Name-cache Dir-cache 214017 desvn totfr 12449 ix0:que 2 Calls hits % hits % 68609 numvn react ix0:link 3 3 100 53502 frevn pdwak 1 em0 272 9 pdpgs ahci0 276 Disks ada0 ada1 pass0 pass1 pass2 intrn 2119 cpu3:timer KB/t 0,00 0,00 0,00 0,00 0,00 5719224 wire 2120 cpu1:timer tps 0 0 0 0 0 21816 act 2123 cpu2:timer MB/s 0,00 0,00 0,00 0,00 0,00 223308 inact %busy 0 0 0 0 0 2064 cache top -aSCHIP last pid: 91271; load averages: 0.76, 1.27, 1.34 up 2+13:55:19 12:58:42 283 processes: 5 running, 248 sleeping, 1 zombie, 29 waiting CPU 0: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 1: 0.0% user, 0.0% nice, 1.6% system, 19.7% interrupt, 78.7% 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, 27.9% interrupt, 72.1% idle Mem: 9944K Active, 218M Inact, 5520M Wired, 2064K Cache, 2171M Free ARC: 4176M Total, 1934M MFU, 1896M MRU, 1040K Anon, 75M Header, 270M Other Swap: 4096M Total, 4096M Free PID USERNAME PRI NICE SIZE RES STATE C TIME CPU COMMAND 11 root 155 ki31 0K 64K CPU0 0 55.7H 100.00% [idle{idle: cpu0}] 11 root 155 ki31 0K 64K CPU1 1 45.2H 83.15% [idle{idle: cpu1}] 11 root 155 ki31 0K 64K CPU2 2 45.5H 82.76% [idle{idle: cpu2}] 11 root 155 ki31 0K 64K RUN 3 45.9H 81.69% [idle{idle: cpu3}] 12 root -92 - 0K 464K WAIT 1 948:02 23.49% [intr{irq264: ix0:que }] 12 root -92 - 0K 464K WAIT 2 927:00 22.56% [intr{irq265: ix0:que }] 12 root -92 - 0K 464K WAIT 3 928:23 22.36% [intr{irq266: ix0:que }] 12 root -60 - 0K 464K WAIT 1 37:51 0.20% [intr{swi4: clock}] Вставить ник Quote
Dyr Posted April 9, 2014 Author Posted April 9, 2014 Трафик подобрался к 1000 Мбит/сек и 120 kpps в одну сторону и становится всё более грустно. pf state ~ 140 000 hotkernel pf.ko`pf_find_state 5434 1.0% kernel`bcopy 6716 1.3% pf.ko`pf_test_rule 7894 1.5% kernel`_rw_runlock_cookie 8625 1.6% kernel`__rw_rlock 13185 2.5% pf.ko`pf_match_translation 14658 2.8% kernel`dn_ht_find 16345 3.1% kernel`bcmp 20940 4.0% kernel`ipfw_chk 27812 5.3% kernel`rn_match 37590 7.1% kernel`fsk_match 43965 8.4% kernel`__mtx_lock_sleep 50740 9.6% kernel`cpu_idle 66153 12.6% kernel`acpi_cpu_c1 80190 15.2% hotkernel -m Sampling... Hit Ctrl-C to end. ^C MODULE COUNT PCNT ng_ksocket.ko 1 0.0% dtrace.ko 23 0.0% zfs.ko 129 0.0% ng_ipfw.ko 2647 0.2% netgraph.ko 3596 0.3% ng_netflow.ko 12838 1.1% pf.ko 96765 8.2% kernel 1066767 90.2% top -aSCHIP last pid: 93691; load averages: 3.43, 3.18, 2.88 up 2+19:11:08 18:14:31 287 processes: 6 running, 252 sleeping, 1 zombie, 28 waiting CPU 0: 0.0% user, 0.0% nice, 26.3% system, 1.2% interrupt, 72.5% idle CPU 1: 0.0% user, 0.0% nice, 10.2% system, 74.1% interrupt, 15.7% idle CPU 2: 0.0% user, 0.0% nice, 0.0% system, 84.7% interrupt, 15.3% idle CPU 3: 0.0% user, 0.0% nice, 0.8% system, 80.4% interrupt, 18.8% idle Mem: 22M Active, 29M Inact, 7296M Wired, 724K Cache, 573M Free ARC: 6066M Total, 1647M MFU, 3984M MRU, 1168K Anon, 82M Header, 352M Other Swap: 4096M Total, 9868K Used, 4086M Free PID USERNAME PRI NICE SIZE RES STATE C TIME CPU COMMAND 11 root 155 ki31 0K 64K RUN 0 59.9H 98.29% [idle{idle: cpu0}] 12 root -92 - 0K 464K WAIT 2 18.6H 87.50% [intr{irq265: ix0:que }] 12 root -92 - 0K 464K CPU3 3 18.6H 85.06% [intr{irq266: ix0:que }] 12 root -92 - 0K 464K WAIT 1 18.9H 81.79% [intr{irq264: ix0:que }] 11 root 155 ki31 0K 64K RUN 3 48.0H 18.46% [idle{idle: cpu3}] 11 root 155 ki31 0K 64K CPU1 1 47.3H 17.19% [idle{idle: cpu1}] 11 root 155 ki31 0K 64K CPU2 2 47.6H 12.16% [idle{idle: cpu2}] 0 root -92 0 0K 2864K - 0 2:07 2.39% [kernel{ix0 que}] 12 root -60 - 0K 464K WAIT 2 41:30 0.78% [intr{swi4: clock}] 2296 proxy 20 0 12308K 972K kqread 0 1:34 0.10% /usr/sbin/ftp-proxy -m 500 -D 1 systat -v 1 2 users Load 3,07 3,13 2,88 9 п╟п©я─ 18:15 Mem:KB REAL VIRTUAL VN PAGER SWAP PAGER Tot Share Tot Share Free in out in out Act 63868 6176 922876 9040 585912 count All 6097688 8208 983028 44140 pages Proc: Interrupts r p d s w Csw Trp Sys Int Sof Flt ioflt 15862 total 29 5 28k 76 1149 11k 170 cow atkbd0 1 zfod ehci0 16 6,6%Sys 64,7%Intr 0,0%User 0,0%Nice 28,7%Idle ozfod ehci1 23 | | | | | | | | | | %ozfod 1024 cpu0:timer ===+++++++++++++++++++++++++++++++++ daefr 3978 ix0:que 0 dtbuf prcfr 2500 ix0:que 1 Namei Name-cache Dir-cache 214017 desvn totfr 4959 ix0:que 2 Calls hits % hits % 60421 numvn react 1 ix0:link 3 3 100 53502 frevn pdwak 113 em0 272 9 pdpgs ahci0 276 Disks ada0 ada1 pass0 pass1 pass2 intrn 1108 cpu3:timer KB/t 0,00 0,00 0,00 0,00 0,00 7471380 wire 1092 cpu1:timer tps 0 0 0 0 0 23712 act 1087 cpu2:timer MB/s 0,00 0,00 0,00 0,00 0,00 29772 inact %busy 0 0 0 0 0 724 cache 585188 free buf procsystime (переведённый в проценты) __sysctl 0.1% write 0.1% execve 0.4% close 3.8% read 5.2% connect 5.4% sigsuspend 9.8% kevent 10.0% wait4 10.2% _umtx_op 11.6% select 43.3% Отключил ipfw. Трафик увеличился до 1200 Мбит/сек и 130 kpps, но нагрузка заметно снизилась, в том числе и по, почему-то, прерываниям: last pid: 12026; load averages: 1.28, 2.07, 2.52 up 2+19:23:24 18:26:47 286 processes: 5 running, 251 sleeping, 1 zombie, 29 waiting CPU 0: 0.0% user, 0.0% nice, 4.2% system, 0.4% interrupt, 95.4% idle CPU 1: 0.0% user, 0.0% nice, 0.0% system, 25.9% interrupt, 74.1% idle CPU 2: 0.0% user, 0.0% nice, 1.5% system, 24.7% interrupt, 73.7% idle CPU 3: 0.0% user, 0.0% nice, 0.0% system, 31.3% interrupt, 68.7% idle Mem: 11M Active, 29M Inact, 7234M Wired, 724K Cache, 645M Free ARC: 6069M Total, 1648M MFU, 3986M MRU, 1168K Anon, 82M Header, 352M Other Swap: 4096M Total, 9868K Used, 4086M Free PID USERNAME PRI NICE SIZE RES STATE C TIME CPU COMMAND 11 root 155 ki31 0K 64K RUN 0 60.1H 100.00% [idle{idle: cpu0}] 11 root 155 ki31 0K 64K CPU3 3 48.0H 71.19% [idle{idle: cpu3}] 11 root 155 ki31 0K 64K CPU1 1 47.4H 69.38% [idle{idle: cpu1}] 11 root 155 ki31 0K 64K CPU2 2 47.6H 63.09% [idle{idle: cpu2}] 12 root -92 - 0K 464K WAIT 2 18.7H 37.26% [intr{irq265: ix0:que }] 12 root -92 - 0K 464K WAIT 1 19.1H 34.77% [intr{irq264: ix0:que }] 12 root -92 - 0K 464K WAIT 3 18.8H 33.98% [intr{irq266: ix0:que }] 12 root -60 - 0K 464K WAIT 3 41:37 0.20% [intr{swi4: clock}] hotkernel [b] [/b] kernel`_rw_runlock_cookie 940 0.9% pf.ko`pf_test 1005 0.9% pf.ko`pf_find_state 1018 0.9% kernel`ixgbe_rxeof 1253 1.2% kernel`rn_match 1443 1.3% kernel`__rw_rlock 1724 1.6% pf.ko`pf_test_rule 1741 1.6% pf.ko`pf_match_translation 3130 2.9% kernel`bcmp 4555 4.2% kernel`sched_idletd 15105 14.0% kernel`acpi_cpu_c1 25146 23.4% kernel`cpu_idle 36280 33.7% systat -v 1 2 users Load 1,31 1,79 2,34 9 п╟п©я─ 19:28 Mem:KB REAL VIRTUAL VN PAGER SWAP PAGER Tot Share Tot Share Free in out in out Act 45292 6076 829596 8932 662252 count All 6014920 8108 881160 44032 pages Proc: Interrupts r p d s w Csw Trp Sys Int Sof Flt ioflt 36847 total 26 5 67k 213 1377 32k 62 111 61 cow atkbd0 1 47 zfod ehci0 16 1,2%Sys 24,4%Intr 0,0%User 0,0%Nice 74,4%Idle ozfod ehci1 23 | | | | | | | | | | %ozfod 1001 cpu0:timer =++++++++++++ daefr 11084 ix0:que 0 dtbuf 387 prcfr 10569 ix0:que 1 Namei Name-cache Dir-cache 214017 desvn 568 totfr 10804 ix0:que 2 Calls hits % hits % 60423 numvn react 1 ix0:link 93 93 100 53500 frevn pdwak 2 em0 272 4 pdpgs ahci0 276 Disks ada0 ada1 pass0 pass1 pass2 intrn 1128 cpu3:timer KB/t 0,00 0,00 0,00 0,00 0,00 7407512 wire 1129 cpu1:timer tps 0 0 0 0 0 11076 act 1129 cpu2:timer MB/s 0,00 0,00 0,00 0,00 0,00 29932 inact %busy 0 0 0 0 0 724 cache 661528 free buf Коллеги, а профайлингом что, больше никто не занимался? По всему форуму сообщения, посвящённых профайлингу на FreeBSD, можно пересчитать по пальцам, а уж посвящённых dtrace, так и вообще по одной руке. Чувствую я потенциальную силу большую в этом, но нет никого, кто просветить бы мог. Вставить ник Quote
Dyr Posted April 9, 2014 Author Posted April 9, 2014 Продолжу изыскания. ;) Результат "горячих" вызовов с включенным ipfw: dtrace -n 'profile-1001hz / arg0 != 0 / { @ks[stack()]=count() }' kernel`dn_ht_find+0xa1 kernel`ipfw_check_packet+0x258 kernel`pfil_run_hooks+0x83 kernel`ip_fastforward+0x43e kernel`ether_demux+0x113 kernel`ether_nh_input+0x34a kernel`netisr_dispatch_src+0x5e kernel`ether_demux+0x95 kernel`ether_nh_input+0x34a kernel`netisr_dispatch_src+0x5e kernel`ixgbe_rxeof+0x4f8 kernel`ixgbe_msix_que+0xc0 kernel`intr_event_execute_handlers+0xab kernel`ithread_loop+0x96 kernel`fork_exit+0x9a kernel`0xffffffff8062f4be 26895 kernel`rn_match+0x5a kernel`ipfw_lookup_table+0x48 kernel`ipfw_chk+0x2ae3 kernel`ipfw_check_packet+0xff kernel`pfil_run_hooks+0x83 kernel`ip_fastforward+0x352 kernel`ether_demux+0x113 kernel`ether_nh_input+0x34a kernel`netisr_dispatch_src+0x5e kernel`ether_demux+0x95 kernel`ether_nh_input+0x34a kernel`netisr_dispatch_src+0x5e kernel`ixgbe_rxeof+0x4f8 kernel`ixgbe_msix_que+0xc0 kernel`intr_event_execute_handlers+0xab kernel`ithread_loop+0x96 kernel`fork_exit+0x9a kernel`0xffffffff8062f4be 28748 kernel`__mtx_lock_sleep+0x212 kernel`ipfw_check_packet+0x258 kernel`pfil_run_hooks+0x83 kernel`ip_fastforward+0x43e kernel`ether_demux+0x113 kernel`ether_nh_input+0x34a kernel`netisr_dispatch_src+0x5e kernel`ether_demux+0x95 kernel`ether_nh_input+0x34a kernel`netisr_dispatch_src+0x5e kernel`ixgbe_rxeof+0x4f8 kernel`ixgbe_msix_que+0xc0 kernel`intr_event_execute_handlers+0xab kernel`ithread_loop+0x96 kernel`fork_exit+0x9a kernel`0xffffffff8062f4be 28905 kernel`__mtx_lock_sleep+0x215 kernel`ipfw_check_packet+0x258 kernel`pfil_run_hooks+0x83 kernel`ip_fastforward+0x43e kernel`ether_demux+0x113 kernel`ether_nh_input+0x34a kernel`netisr_dispatch_src+0x5e kernel`ether_demux+0x95 kernel`ether_nh_input+0x34a kernel`netisr_dispatch_src+0x5e kernel`ixgbe_rxeof+0x4f8 kernel`ixgbe_msix_que+0xc0 kernel`intr_event_execute_handlers+0xab kernel`ithread_loop+0x96 kernel`fork_exit+0x9a kernel`0xffffffff8062f4be 33138 kernel`fsk_match+0xf kernel`dummynet_io+0x11b kernel`ipfw_check_packet+0x258 kernel`pfil_run_hooks+0x83 kernel`ip_fastforward+0x43e kernel`ether_demux+0x113 kernel`ether_nh_input+0x34a kernel`netisr_dispatch_src+0x5e kernel`ether_demux+0x95 kernel`ether_nh_input+0x34a kernel`netisr_dispatch_src+0x5e kernel`ixgbe_rxeof+0x4f8 kernel`ixgbe_msix_que+0xc0 kernel`intr_event_execute_handlers+0xab kernel`ithread_loop+0x96 kernel`fork_exit+0x9a kernel`0xffffffff8062f4be 85591 kernel`cpu_idle+0xbe kernel`fork_exit+0x9a kernel`0xffffffff8062f4be 158647 kernel`acpi_cpu_c1+0x6 kernel`cpu_idle_acpi+0x3f kernel`cpu_idle+0x93 kernel`sched_idletd+0x1ee kernel`fork_exit+0x9a kernel`0xffffffff8062f4be 187387 Вставить ник Quote
Dyr Posted April 9, 2014 Author Posted April 9, 2014 А так с выключенным ipfw: kernel`bcmp+0xb pf.ko`pf_test+0x77c pf.ko`pf_check_out+0x3c kernel`pfil_run_hooks+0x83 kernel`ip_fastforward+0x43e kernel`ether_demux+0x113 kernel`ether_nh_input+0x34a kernel`netisr_dispatch_src+0x5e kernel`ether_demux+0x95 kernel`ether_nh_input+0x34a kernel`netisr_dispatch_src+0x5e kernel`ixgbe_rxeof+0x4f8 kernel`ixgbe_msix_que+0xc0 kernel`intr_event_execute_handlers+0xab kernel`ithread_loop+0x96 kernel`fork_exit+0x9a kernel`0xffffffff8062f4be 14014 kernel`bcmp+0xb pf.ko`pf_test+0x899 pf.ko`pf_check_out+0x3c kernel`pfil_run_hooks+0x83 kernel`ip_fastforward+0x43e kernel`ether_demux+0x113 kernel`ether_nh_input+0x34a kernel`netisr_dispatch_src+0x5e kernel`ether_demux+0x95 kernel`ether_nh_input+0x34a kernel`netisr_dispatch_src+0x5e kernel`ixgbe_rxeof+0x4f8 kernel`ixgbe_msix_que+0xc0 kernel`intr_event_execute_handlers+0xab kernel`ithread_loop+0x96 kernel`fork_exit+0x9a kernel`0xffffffff8062f4be 18023 kernel`bcmp+0xb pf.ko`pf_test+0x899 pf.ko`pf_check_in+0x1d kernel`pfil_run_hooks+0x83 kernel`ip_fastforward+0x352 kernel`ether_demux+0x113 kernel`ether_nh_input+0x34a kernel`netisr_dispatch_src+0x5e kernel`ether_demux+0x95 kernel`ether_nh_input+0x34a kernel`netisr_dispatch_src+0x5e kernel`ixgbe_rxeof+0x4f8 kernel`ixgbe_msix_que+0xc0 kernel`intr_event_execute_handlers+0xab kernel`ithread_loop+0x96 kernel`fork_exit+0x9a kernel`0xffffffff8062f4be 18167 kernel`sched_idletd+0x187 kernel`0xffffffff8062f4be 36810 kernel`sched_idletd+0x18b kernel`0xffffffff8062f4be 58715 kernel`sched_idletd+0x18d kernel`0xffffffff8062f4be 58949 kernel`sched_idletd+0x180 kernel`0xffffffff8062f4be 81147 kernel`acpi_cpu_c1+0x6 kernel`cpu_idle_acpi+0x3f kernel`cpu_idle+0x93 kernel`sched_idletd+0x1ee kernel`fork_exit+0x9a kernel`0xffffffff8062f4be 436591 kernel`cpu_idle+0xbe kernel`fork_exit+0x9a kernel`0xffffffff8062f4be 620206 Вставить ник Quote
Ivan_83 Posted April 9, 2014 Posted April 9, 2014 Отключил ipfw. Трафик увеличился до 1200 Мбит/сек и 130 kpps, но нагрузка заметно снизилась, в том числе и по, почему-то, прерываниям Потому что у тебя нет.иср=директ и всё обрабатывается в контексте обработчика прерываний. Коллеги, а профайлингом что, больше никто не занимался? По всему форуму сообщения, посвящённых профайлингу на FreeBSD, можно пересчитать по пальцам, а уж посвящённых dtrace, так и вообще по одной руке. Чувствую я потенциальную силу большую в этом, но нет никого, кто просветить бы мог. А что именно нужно освещать? Вставить ник Quote
Dyr Posted April 9, 2014 Author Posted April 9, 2014 (edited) Потому что у тебя нет.иср=директ и всё обрабатывается в контексте обработчика прерываний. Переключил с direct на deferred. При выключенном ipfw загрузка процессоров не изменилась вообще (как было по 40% от ix0:que на ядро, так и осталось). Это для 130Kpps и 1100 Mbit/sec. При включенном ipfw загрузка процессоров 90-100% на ядро всё от тех же ix0:que, трафик 110 Kpps и 880 Mbit/sec Переключение net.isr почему-то вообще никак не сказалось, другими словами kernel`__mtx_lock_sleep+0x212 kernel`ipfw_check_packet+0x258 kernel`pfil_run_hooks+0x83 kernel`ip_fastforward+0x43e kernel`ether_demux+0x113 kernel`ether_nh_input+0x34a kernel`netisr_dispatch_src+0x5e kernel`ether_demux+0x95 kernel`ether_nh_input+0x34a kernel`netisr_dispatch_src+0x5e kernel`ixgbe_rxeof+0x4f8 kernel`ixgbe_msix_que+0xc0 kernel`intr_event_execute_handlers+0xab kernel`ithread_loop+0x96 kernel`fork_exit+0x9a kernel`0xffffffff8062f4be 1377 kernel`__mtx_lock_sleep+0x215 kernel`ipfw_check_packet+0x258 kernel`pfil_run_hooks+0x83 kernel`ip_fastforward+0x43e kernel`ether_demux+0x113 kernel`ether_nh_input+0x34a kernel`netisr_dispatch_src+0x5e kernel`ether_demux+0x95 kernel`ether_nh_input+0x34a kernel`netisr_dispatch_src+0x5e kernel`ixgbe_rxeof+0x4f8 kernel`ixgbe_msix_que+0xc0 kernel`intr_event_execute_handlers+0xab kernel`ithread_loop+0x96 kernel`fork_exit+0x9a kernel`0xffffffff8062f4be 1643 kernel`fsk_match+0xf kernel`dummynet_io+0x11b kernel`ipfw_check_packet+0x258 kernel`pfil_run_hooks+0x83 kernel`ip_fastforward+0x43e kernel`ether_demux+0x113 kernel`ether_nh_input+0x34a kernel`netisr_dispatch_src+0x5e kernel`ether_demux+0x95 kernel`ether_nh_input+0x34a kernel`netisr_dispatch_src+0x5e kernel`ixgbe_rxeof+0x4f8 kernel`ixgbe_msix_que+0xc0 kernel`intr_event_execute_handlers+0xab kernel`ithread_loop+0x96 kernel`fork_exit+0x9a kernel`0xffffffff8062f4be 4064 kernel`cpu_idle+0xbe kernel`fork_exit+0x9a kernel`0xffffffff8062f4be 4403 kernel`acpi_cpu_c1+0x6 kernel`cpu_idle_acpi+0x3f kernel`cpu_idle+0x93 kernel`sched_idletd+0x1ee kernel`fork_exit+0x9a kernel`0xffffffff8062f4be 4968 А что именно нужно освещать? Понять, как правильно профилировать вот загрузку ядра и прерываний. Кем вызываются, сколько времени процессором на них проводятся и в ходе каких вызовов. То есть что-то похожее на приведённый код выше. Update: Ага, понял, почему переключение net.isr не дало результатов. Был включен fastforwarding. Выключил, структура загрузки изменилась, вот только результат всё равно ужасает: top -aSCHIP last pid: 76837; load averages: 3.44, 3.19, 2.45 up 2+20:33:01 19:36:24 284 processes: 7 running, 249 sleeping, 1 zombie, 26 waiting, 1 lock CPU 0: 0.0% user, 0.0% nice, 0.0% system, 66.7% interrupt, 33.3% idle CPU 1: 0.0% user, 0.0% nice, 0.0% system, 66.7% interrupt, 33.3% idle CPU 2: 0.0% user, 0.0% nice, 0.0% system, 100% interrupt, 0.0% idle CPU 3: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle Mem: 9872K Active, 33M Inact, 7290M Wired, 724K Cache, 587M Free ARC: 6088M Total, 1660M MFU, 3993M MRU, 912K Anon, 82M Header, 352M Other Swap: 4096M Total, 9852K Used, 4086M Free PID USERNAME PRI NICE SIZE RES STATE C TIME CPU COMMAND 12 root -72 - 0K 464K *dn_uh 0 26:13 100.00% [intr{swi1: netisr 0}] 12 root -72 - 0K 464K CPU2 2 28:26 99.17% [intr{swi1: netisr 2}] 11 root 155 ki31 0K 64K RUN 3 48.5H 95.26% [idle{idle: cpu3}] 12 root -72 - 0K 464K CPU1 1 27:43 94.38% [intr{swi1: netisr 1}] 12 root -92 - 0K 464K WAIT 2 19.4H 5.66% [intr{irq265: ix0:que }] 12 root -92 - 0K 464K WAIT 3 19.4H 5.27% [intr{irq266: ix0:que }] 12 root -92 - 0K 464K WAIT 1 19.7H 4.88% [intr{irq264: ix0:que }] 11 root 155 ki31 0K 64K RUN 0 61.0H 1.66% [idle{idle: cpu0}] 11 root 155 ki31 0K 64K RUN 1 47.8H 0.68% [idle{idle: cpu1}] 11 root 155 ki31 0K 64K RUN 2 48.1H 0.39% [idle{idle: cpu2}] 12 root -60 - 0K 464K WAIT 3 42:14 0.29% [intr{swi4: clock}] Так изменилась структура вызовов, соответственно (ipfw включен, net.isr.dispatch=deferred, net.inet.ip.fastforwarding=0): kernel`sched_idletd+0x187 kernel`0xffffffff8062f4be 2917 kernel`rn_match+0x5a kernel`ipfw_lookup_table+0x48 kernel`ipfw_chk+0x2ae3 kernel`ipfw_check_packet+0xff kernel`pfil_run_hooks+0x83 kernel`ip_input+0x36f kernel`swi_net+0x132 kernel`intr_event_execute_handlers+0xab kernel`ithread_loop+0x96 kernel`fork_exit+0x9a kernel`0xffffffff8062f4be 3059 kernel`__mtx_lock_sleep+0x212 kernel`ipfw_check_packet+0x258 kernel`pfil_run_hooks+0x83 kernel`ip_output+0x8a4 kernel`ip_forward+0x284 kernel`ip_input+0x682 kernel`swi_net+0x132 kernel`intr_event_execute_handlers+0xab kernel`ithread_loop+0x96 kernel`fork_exit+0x9a kernel`0xffffffff8062f4be 3094 kernel`dn_ht_find+0xa1 kernel`ipfw_check_packet+0x258 kernel`pfil_run_hooks+0x83 kernel`ip_output+0x8a4 kernel`ip_forward+0x284 kernel`ip_input+0x682 kernel`swi_net+0x132 kernel`intr_event_execute_handlers+0xab kernel`ithread_loop+0x96 kernel`fork_exit+0x9a kernel`0xffffffff8062f4be 3189 kernel`__mtx_lock_sleep+0x215 kernel`ipfw_check_packet+0x258 kernel`pfil_run_hooks+0x83 kernel`ip_output+0x8a4 kernel`ip_forward+0x284 kernel`ip_input+0x682 kernel`swi_net+0x132 kernel`intr_event_execute_handlers+0xab kernel`ithread_loop+0x96 kernel`fork_exit+0x9a kernel`0xffffffff8062f4be 3229 kernel`sched_idletd+0x18b kernel`0xffffffff8062f4be 4622 kernel`sched_idletd+0x18d kernel`0xffffffff8062f4be 4659 kernel`sched_idletd+0x180 kernel`0xffffffff8062f4be 6279 kernel`cpu_idle+0xbe kernel`fork_exit+0x9a kernel`0xffffffff8062f4be 7245 kernel`fsk_match+0xf kernel`dummynet_io+0x11b kernel`ipfw_check_packet+0x258 kernel`pfil_run_hooks+0x83 kernel`ip_output+0x8a4 kernel`ip_forward+0x284 kernel`ip_input+0x682 kernel`swi_net+0x132 kernel`intr_event_execute_handlers+0xab kernel`ithread_loop+0x96 kernel`fork_exit+0x9a kernel`0xffffffff8062f4be 9396 Edited April 9, 2014 by Dyr Вставить ник Quote
Dyr Posted April 9, 2014 Author Posted April 9, 2014 (edited) Убранные из ipfw правила pipe немного снизили нагрузку на процессор с одновременным (что естественно) увеличением проходящего трафика до 160 Kpps и 1400 Мbit/sec last pid: 85948; load averages: 2.79, 3.17, 2.75 up 2+20:39:49 19:43:12 283 processes: 8 running, 248 sleeping, 1 zombie, 26 waiting CPU 0: 0.0% user, 0.0% nice, 4.3% system, 67.7% interrupt, 28.0% idle CPU 1: 0.0% user, 0.0% nice, 0.0% system, 81.5% interrupt, 18.5% idle CPU 2: 0.0% user, 0.0% nice, 0.0% system, 90.6% interrupt, 9.4% idle CPU 3: 0.0% user, 0.0% nice, 0.8% system, 7.5% interrupt, 91.7% idle Mem: 9900K Active, 33M Inact, 7293M Wired, 724K Cache, 584M Free ARC: 6089M Total, 1660M MFU, 3994M MRU, 1168K Anon, 82M Header, 352M Other Swap: 4096M Total, 9852K Used, 4086M Free PID USERNAME PRI NICE SIZE RES STATE C TIME CPU COMMAND 11 root 155 ki31 0K 64K RUN 3 48.7H 96.97% [idle{idle: cpu3}] 12 root -72 - 0K 464K CPU2 2 34:31 86.28% [intr{swi1: netisr 2}] 12 root -72 - 0K 464K CPU1 1 33:52 80.27% [intr{swi1: netisr 1}] 12 root -72 - 0K 464K CPU0 0 31:25 78.86% [intr{swi1: netisr 0}] 11 root 155 ki31 0K 64K RUN 0 61.0H 26.56% [idle{idle: cpu0}] 11 root 155 ki31 0K 64K RUN 1 47.8H 15.58% [idle{idle: cpu1}] 11 root 155 ki31 0K 64K RUN 2 48.1H 14.70% [idle{idle: cpu2}] 12 root -92 - 0K 464K WAIT 2 19.4H 5.76% [intr{irq265: ix0:que }] 12 root -92 - 0K 464K WAIT 1 19.7H 5.37% [intr{irq264: ix0:que }] 12 root -92 - 0K 464K WAIT 3 19.4H 5.37% [intr{irq266: ix0:que }] 12 root -60 - 0K 464K WAIT 3 42:19 0.39% [intr{swi4: clock}] Убранный из ipfw ng_tee на ng_netflow ещё сильнее снизил загрузку на процессор (на 20% по прерываниям!) при том же трафике: last pid: 86038; load averages: 2.24, 2.63, 2.61 up 2+20:44:07 19:47:30 284 processes: 7 running, 249 sleeping, 1 zombie, 27 waiting CPU 0: 0.0% user, 0.0% nice, 3.9% system, 49.0% interrupt, 47.1% idle CPU 1: 0.0% user, 0.0% nice, 0.0% system, 59.2% interrupt, 40.8% idle CPU 2: 0.0% user, 0.0% nice, 0.4% system, 64.7% interrupt, 34.9% idle CPU 3: 0.0% user, 0.0% nice, 0.8% system, 7.5% interrupt, 91.8% idle Mem: 11M Active, 34M Inact, 7294M Wired, 724K Cache, 582M Free ARC: 6090M Total, 1660M MFU, 3994M MRU, 912K Anon, 82M Header, 352M Other Swap: 4096M Total, 9852K Used, 4086M Free PID USERNAME PRI NICE SIZE RES STATE C TIME CPU COMMAND 11 root 155 ki31 0K 64K RUN 3 48.7H 94.68% [idle{idle: cpu3}] 12 root -72 - 0K 464K CPU2 2 37:10 57.28% [intr{swi1: netisr 2}] 12 root -72 - 0K 464K WAIT 0 33:49 53.96% [intr{swi1: netisr 0}] 12 root -72 - 0K 464K CPU1 1 36:21 51.86% [intr{swi1: netisr 1}] 11 root 155 ki31 0K 64K CPU0 0 61.1H 50.88% [idle{idle: cpu0}] 11 root 155 ki31 0K 64K RUN 1 47.9H 44.09% [idle{idle: cpu1}] 11 root 155 ki31 0K 64K RUN 2 48.1H 40.09% [idle{idle: cpu2}] 12 root -92 - 0K 464K WAIT 1 19.7H 5.76% [intr{irq264: ix0:que }] 12 root -92 - 0K 464K WAIT 2 19.4H 5.37% [intr{irq265: ix0:que }] 12 root -92 - 0K 464K WAIT 3 19.4H 5.08% [intr{irq266: ix0:que }] 12 root -60 - 0K 464K WAIT 2 42:21 0.20% [intr{swi4: clock}] Отключение ipfw полностью (sysctl net.inet.ip.fw.enable=0) ещё сильнее уменьшает загрузку на процессор (на ~15% по прерываниям): last pid: 86093; load averages: 1.58, 2.15, 2.41 up 2+20:46:52 19:50:15 284 processes: 6 running, 249 sleeping, 1 zombie, 28 waiting CPU 0: 0.0% user, 0.0% nice, 4.3% system, 25.6% interrupt, 70.1% idle CPU 1: 0.0% user, 0.0% nice, 0.4% system, 42.5% interrupt, 57.1% idle CPU 2: 0.0% user, 0.0% nice, 0.4% system, 42.1% interrupt, 57.5% idle CPU 3: 0.0% user, 0.0% nice, 0.8% system, 2.8% interrupt, 96.5% idle Mem: 10M Active, 34M Inact, 7294M Wired, 724K Cache, 583M Free ARC: 6090M Total, 1660M MFU, 3994M MRU, 912K Anon, 83M Header, 352M Other Swap: 4096M Total, 9852K Used, 4086M Free PID USERNAME PRI NICE SIZE RES STATE C TIME CPU COMMAND 11 root 155 ki31 0K 64K RUN 3 48.8H 98.00% [idle{idle: cpu3}] 11 root 155 ki31 0K 64K RUN 0 61.1H 69.68% [idle{idle: cpu0}] 11 root 155 ki31 0K 64K CPU2 2 48.2H 66.16% [idle{idle: cpu2}] 11 root 155 ki31 0K 64K RUN 1 47.9H 60.89% [idle{idle: cpu1}] 12 root -72 - 0K 464K WAIT 1 37:29 33.69% [intr{swi1: netisr 1}] 12 root -72 - 0K 464K WAIT 2 38:16 33.59% [intr{swi1: netisr 2}] 12 root -72 - 0K 464K CPU0 0 34:51 31.88% [intr{swi1: netisr 0}] 12 root -92 - 0K 464K WAIT 2 19.4H 5.47% [intr{irq265: ix0:que }] 12 root -92 - 0K 464K WAIT 1 19.7H 5.27% [intr{irq264: ix0:que }] 12 root -92 - 0K 464K WAIT 3 19.4H 5.08% [intr{irq266: ix0:que }] 12 root -60 - 0K 464K WAIT 3 42:23 0.10% [intr{swi4: clock}] Загрузка ipfw с правилами pipe, но без правил ng_netflow, тут же приводит к увеличению нагрузки "под потолок": last pid: 86093; load averages: 1.58, 2.15, 2.41 up 2+20:46:52 19:50:15 284 processes: 6 running, 249 sleeping, 1 zombie, 28 waiting CPU 0: 0.0% user, 0.0% nice, 4.3% system, 25.6% interrupt, 70.1% idle CPU 1: 0.0% user, 0.0% nice, 0.4% system, 42.5% interrupt, 57.1% idle CPU 2: 0.0% user, 0.0% nice, 0.4% system, 42.1% interrupt, 57.5% idle CPU 3: 0.0% user, 0.0% nice, 0.8% system, 2.8% interrupt, 96.5% idle Mem: 10M Active, 34M Inact, 7294M Wired, 724K Cache, 583M Free ARC: 6090M Total, 1660M MFU, 3994M MRU, 912K Anon, 83M Header, 352M Other Swap: 4096M Total, 9852K Used, 4086M Free PID USERNAME PRI NICE SIZE RES STATE C TIME CPU COMMAND 11 root 155 ki31 0K 64K RUN 3 48.8H 98.00% [idle{idle: cpu3}] 11 root 155 ki31 0K 64K RUN 0 61.1H 69.68% [idle{idle: cpu0}] 11 root 155 ki31 0K 64K CPU2 2 48.2H 66.16% [idle{idle: cpu2}] 11 root 155 ki31 0K 64K RUN 1 47.9H 60.89% [idle{idle: cpu1}] 12 root -72 - 0K 464K WAIT 1 37:29 33.69% [intr{swi1: netisr 1}] 12 root -72 - 0K 464K WAIT 2 38:16 33.59% [intr{swi1: netisr 2}] 12 root -72 - 0K 464K CPU0 0 34:51 31.88% [intr{swi1: netisr 0}] 12 root -92 - 0K 464K WAIT 2 19.4H 5.47% [intr{irq265: ix0:que }] 12 root -92 - 0K 464K WAIT 1 19.7H 5.27% [intr{irq264: ix0:que }] 12 root -92 - 0K 464K WAIT 3 19.4H 5.08% [intr{irq266: ix0:que }] 12 root -60 - 0K 464K WAIT 3 42:23 0.10% [intr{swi4: clock}] Загрузка ipfw, состоящего только из двух правил pipe, увеличивает нагрузку до 70-80% по прерываниям. ipfw list 03000 pipe tablearg ip from any to table(4) { xmit vlan11 or xmit vlan12 } // Incoming traffic shaping 03000 pipe tablearg ip from table(5) to any xmit vlan3918 // Outgoing traffic shaping 65535 allow ip from any to any last pid: 86249; load averages: 2.40, 2.28, 2.38 up 2+20:51:20 19:54:43 284 processes: 8 running, 248 sleeping, 1 zombie, 27 waiting CPU 0: 0.0% user, 0.0% nice, 24.3% system, 54.9% interrupt, 20.8% idle CPU 1: 0.0% user, 0.0% nice, 0.4% system, 75.3% interrupt, 24.3% idle CPU 2: 0.0% user, 0.0% nice, 0.0% system, 67.1% interrupt, 32.9% idle CPU 3: 0.4% user, 0.0% nice, 0.8% system, 8.6% interrupt, 90.2% idle Mem: 10M Active, 33M Inact, 7294M Wired, 724K Cache, 583M Free ARC: 6090M Total, 1660M MFU, 3994M MRU, 1168K Anon, 83M Header, 352M Other Swap: 4096M Total, 9852K Used, 4086M Free PID USERNAME PRI NICE SIZE RES STATE C TIME CPU COMMAND 11 root 155 ki31 0K 64K CPU3 3 48.8H 100.00% [idle{idle: cpu3}] 12 root -72 - 0K 464K WAIT 1 40:20 70.75% [intr{swi1: netisr 1}] 12 root -72 - 0K 464K CPU0 0 37:18 70.75% [intr{swi1: netisr 0}] 12 root -72 - 0K 464K CPU2 2 41:09 64.99% [intr{swi1: netisr 2}] 11 root 155 ki31 0K 64K RUN 0 61.1H 31.05% [idle{idle: cpu0}] 11 root 155 ki31 0K 64K RUN 2 48.2H 29.05% [idle{idle: cpu2}] 11 root 155 ki31 0K 64K RUN 1 47.9H 27.78% [idle{idle: cpu1}] 12 root -92 - 0K 464K WAIT 2 19.4H 6.15% [intr{irq265: ix0:que }] 12 root -92 - 0K 464K WAIT 3 19.4H 6.05% [intr{irq266: ix0:que }] 12 root -92 - 0K 464K WAIT 1 19.7H 5.96% [intr{irq264: ix0:que }] 12 root -60 - 0K 464K WAIT 3 42:25 0.10% [intr{swi4: clock}] Выводы: ipfw становится при моей конфигурации узким местом, существенно ограничивая производительность. Загрузка процессоров: Отключенный ipfw: 40% netisr per cpu ipfw с pipe, без ng_netflow и без фильтров : 70% netisr per cpu ipfw с pipe, без ng_netflow и с фильтрами: 90-100% netisr per cpu ipfw без pipe, с ng_netflow и с фильтрами: 75% netisr per cpu ipfw без pipe, без ng_netflow и с фильтрами: 55% netisr per cpu Кстати, интересная особенность - несмотря на создание 4 очередей netisr, активно ровно столько же, сколько и очередей от сетевой карты. Поскольку я специально уменьшал количество последних с 4 до 3 (чтобы освободить одно ядро процессора под dummynet), то и netisr работает только тремя очередями. Причём, что неприятно, прибивается к ядрам не в той очерёдности, в которой были прибиты сетевые (0 процессор оставляем под dummynet и вешаем на 1,2 и 3). Edited April 9, 2014 by Dyr Вставить ник Quote
DVM-Avgoor Posted April 9, 2014 Posted April 9, 2014 (edited) Сколько рулесов в ipfw? Сколько в его таблицах включений? Зачем удлинять путь пакета навешивая и pf и ipfw? Почему не использовать netgraph? Edited April 9, 2014 by DVM-Avgoor Вставить ник Quote
Ivan_83 Posted April 10, 2014 Posted April 10, 2014 Кстати, интересная особенность - несмотря на создание 4 очередей netisr, активно ровно столько же, сколько и очередей от сетевой карты. Поскольку я специально уменьшал количество последних с 4 до 3 (чтобы освободить одно ядро процессора под dummynet), то и netisr работает только тремя очередями. Причём, что неприятно, прибивается к ядрам не в той очерёдности, в которой были прибиты сетевые (0 процессор оставляем под dummynet и вешаем на 1,2 и 3). Особенностей там куда больше :) Например, использование сразу двух фаеров больше вымывает кеш. Так же его вымывает частое переключение задач, за которое отвечает hz=1000. Ещё кеш может быть не совсем общим: интел любил делать четрёх ядреные процессоры путём склеивания двух двух ядерных. А передача пакетов/данных между ядрами в разных половинках более затратно. Вставить ник Quote
Dyr Posted April 10, 2014 Author Posted April 10, 2014 Зачем удлинять путь пакета навешивая и pf и ipfw? pf nat гораздо удобней и в принципе, производительней других вариантов natов на FreeBSD. Шейперы в ipfw, без вариантов. Вставить ник Quote
Dyr Posted April 11, 2014 Author Posted April 11, 2014 Вчера попробовал с kern.hz=200, практически не помогло. Вставить ник Quote
John_obn Posted April 11, 2014 Posted April 11, 2014 (edited) Dyr, привожу свои данные с сервера с Intel X520-DA2 и CPU Xeon E3-1270 (v1), есть еще 2 роутера под фрей, но там уже стоит E5-1660v2. На этой машине стоит FreeBSD 8.4 Stable. HT в биосе включен. 7 очередей на каждую ixgbe, каждое прибито к своему ядру с 1 по 7. dummynet прибит к 0 ядру. Некоторе время тоже не хотел уходить с pf nat, но однажды ушел на ipfw nat и не жалею. Неудобно, но 1 раз переписать скрипты и все ок. Шейпер на dummynet. Netflow нет, но есть в планах запустить. Вчера в ЧНН (ix0 смотрит в сторону UPlink): netstat -I ix0 -w1 -h input (ix0) output packets errs idrops bytes packets errs bytes colls 179k 0 0 181M 146k 0 72M 0 175k 0 0 178M 139k 0 68M 0 182k 0 0 185M 147k 0 72M 0 193k 0 0 200M 154k 0 75M 0 192k 0 0 201M 147k 0 70M 0 193k 0 0 201M 150k 0 70M 0 183k 0 0 187M 146k 0 73M 0 184k 0 0 184M 149k 0 79M 0 176k 0 0 175M 142k 0 74M 0 174k 0 0 170M 143k 0 77M 0 175k 0 0 175M 140k 0 72M 0 188k 0 0 190M 149k 0 76M 0 netstat -m , vmstat -i , vmstat -z 59469/13731/73200 mbufs in use (current/cache/total) 59332/8498/67830/262144 mbuf clusters in use (current/cache/total/max) 59332/7100 mbuf+clusters out of packet secondary zone in use (current/cache) 0/151/151/262144 4k (page size) jumbo clusters in use (current/cache/total/max) 0/0/0/65536 9k jumbo clusters in use (current/cache/total/max) 0/0/0/32768 16k jumbo clusters in use (current/cache/total/max) 134043K/21032K/155076K bytes allocated to network (current/cache/total) 0/0/0 requests for mbufs denied (mbufs/clusters/mbuf+clusters) 0/0/0 requests for jumbo clusters denied (4k/9k/16k) 0/0/0 sfbufs in use (current/peak/max) 0 requests for sfbufs denied 0 requests for sfbufs delayed 0 requests for I/O initiated by sendfile 0 calls to protocol drain routines # vmstat -i interrupt total rate irq16: ehci0 6358074 3 irq20: atapci0 9050750 4 irq23: ehci1 3464227 1 cpu0: timer 3755521931 2000 irq256: ix0:que 0 21524892323 11463 irq257: ix0:que 1 20049944731 10677 irq258: ix0:que 2 20281395514 10801 irq259: ix0:que 3 20294240802 10807 irq260: ix0:que 4 20281282427 10801 irq261: ix0:que 5 19993490420 10647 irq262: ix0:que 6 19934646940 10616 irq263: ix0:link 3 0 irq264: ix1:que 0 17927446830 9547 irq265: ix1:que 1 16742538179 8916 irq266: ix1:que 2 17025852569 9067 irq267: ix1:que 3 16998528574 9052 irq268: ix1:que 4 16991482651 9049 irq269: ix1:que 5 16419253213 8744 irq270: ix1:que 6 16389715267 8728 irq271: ix1:link 3 0 cpu1: timer 3755518269 2000 cpu3: timer 3755515598 2000 cpu6: timer 3755429141 2000 cpu4: timer 3755517378 2000 cpu2: timer 3755516333 2000 cpu5: timer 3755425814 1999 cpu7: timer 3755514905 2000 Total 290917542866 154931 # vmstat -z ITEM SIZE LIMIT USED FREE REQUESTS FAILURES UMA Kegs: 208, 0, 105, 14, 105, 0 UMA Zones: 448, 0, 105, 7, 105, 0 UMA Slabs: 568, 0, 3662, 125, 288587, 0 UMA RCntSlabs: 568, 0, 34066, 1242, 40344, 0 UMA Hash: 256, 0, 0, 0, 3, 0 16 Bucket: 152, 0, 28, 122, 206, 0 32 Bucket: 280, 0, 67, 115, 405, 15 64 Bucket: 536, 0, 122, 123, 928, 124 128 Bucket: 1048, 0, 2452, 2, 169139, 12281 VM OBJECT: 216, 0, 53220, 28770, 523925112, 0 MAP: 232, 0, 7, 25, 7, 0 KMAP ENTRY: 120, 394475, 42, 578, 541460, 0 MAP ENTRY: 120, 0, 2264, 12306, 1527424124, 0 DP fakepg: 120, 0, 0, 124, 18, 0 SG fakepg: 120, 0, 0, 0, 0, 0 mt_zone: 2056, 0, 233, 63, 235, 0 16: 16, 0, 2777, 1423, 90401981, 0 32: 32, 0, 4192, 1161, 39680351, 0 64: 64, 0, 4194, 2022, 209259803, 0 128: 128, 0, 837420, 183786, 4948173192, 0 256: 256, 0, 25780, 9200, 412156878049, 0 512: 512, 0, 8336, 1807, 2446686377, 0 1024: 1024, 0, 67, 1097, 18089530, 0 2048: 2048, 0, 69, 821, 741282, 0 4096: 4096, 0, 293, 1246, 18058744, 0 Files: 80, 0, 373, 3047, 224463346, 0 TURNSTILE: 136, 0, 3508, 352, 3634, 0 umtx pi: 96, 0, 0, 0, 0, 0 MAC labels: 40, 0, 0, 0, 0, 0 PROC: 1136, 0, 84, 2673, 17803577, 0 THREAD: 1128, 0, 2831, 676, 11180, 0 SLEEPQUEUE: 80, 0, 3508, 349, 3634, 0 VMSPACE: 392, 0, 65, 2745, 17803558, 0 cpuset: 72, 0, 116, 384, 149, 0 audit_record: 952, 0, 0, 0, 0, 0 mbuf_packet: 256, 0, 59358, 7074, 311627223635, 0 mbuf: 256, 0, 100, 6668, 680874189429, 0 mbuf_cluster: 2048, 262144, 66432, 1398, 474368, 0 mbuf_jumbo_page: 4096, 262144, 0, 151, 610, 0 mbuf_jumbo_9k: 9216, 65536, 0, 0, 0, 0 mbuf_jumbo_16k: 16384, 32768, 0, 0, 0, 0 mbuf_ext_refcnt: 4, 0, 0, 0, 0, 0 NetGraph items: 72, 65540, 0, 203, 32, 0 NetGraph data items: 72, 65540, 0, 1566, 64919857, 0 g_bio: 232, 0, 0, 1520, 36210799, 0 ttyinq: 160, 0, 195, 237, 510, 0 ttyoutq: 256, 0, 104, 121, 272, 0 ata_request: 320, 0, 0, 1488, 9052755, 0 ata_composite: 336, 0, 0, 0, 0, 0 VNODE: 472, 0, 49158, 3018, 439567, 0 VNODEPOLL: 112, 0, 0, 0, 0, 0 NAMEI: 1024, 0, 0, 1332, 323634608, 0 S VFS Cache: 108, 0, 1924, 1046, 10502899, 0 STS VFS Cache: 148, 0, 0, 0, 0, 0 L VFS Cache: 328, 0, 4557, 831, 156961, 0 LTS VFS Cache: 368, 0, 0, 0, 0, 0 DIRHASH: 1024, 0, 103, 829, 8912, 0 pipe: 728, 0, 6, 1339, 33348127, 0 ksiginfo: 112, 0, 2726, 1531, 364353, 0 itimer: 344, 0, 1, 32, 2, 0 KNOTE: 128, 0, 0, 1160, 1488045, 0 socket: 680, 262146, 232, 2678, 33697628, 0 ipq: 56, 8253, 0, 315, 26, 0 udp_inpcb: 336, 262152, 149, 1248, 18081715, 0 udpcb: 16, 262248, 149, 1363, 18081715, 0 tcp_inpcb: 336, 262152, 32, 2916, 307169, 0 tcpcb: 944, 262144, 21, 2987, 307169, 0 tcptw: 72, 27800, 3, 1097, 85187, 0 syncache: 144, 15366, 0, 442, 117514, 0 hostcache: 136, 15372, 51, 453, 3577, 0 tcpreass: 40, 16464, 0, 672, 556, 0 sackhole: 32, 0, 0, 909, 121, 0 sctp_ep: 1320, 262146, 0, 0, 0, 0 sctp_asoc: 2288, 40000, 0, 0, 0, 0 sctp_laddr: 48, 80064, 0, 576, 148, 0 sctp_raddr: 696, 80000, 0, 0, 0, 0 sctp_chunk: 136, 400008, 0, 0, 0, 0 sctp_readq: 104, 400032, 0, 0, 0, 0 sctp_stream_msg_out: 104, 400032, 0, 0, 0, 0 sctp_asconf: 40, 400008, 0, 0, 0, 0 sctp_asconf_ack: 48, 400032, 0, 0, 0, 0 ripcb: 336, 262152, 3, 591, 174214, 0 unpcb: 240, 262144, 47, 1025, 409578, 0 rtentry: 200, 0, 1120, 457, 7362, 0 pfsrctrpl: 152, 0, 0, 0, 0, 0 pfrulepl: 912, 0, 0, 0, 0, 0 pfstatepl: 392, 10000, 0, 0, 0, 0 pfaltqpl: 240, 0, 0, 0, 0, 0 pfpooladdrpl: 88, 0, 0, 0, 0, 0 pfrktable: 1296, 0, 0, 0, 0, 0 pfrkentry: 216, 0, 0, 0, 0, 0 pfrkentry2: 216, 0, 0, 0, 0, 0 pffrent: 32, 5050, 0, 0, 0, 0 pffrag: 80, 0, 0, 0, 0, 0 pffrcache: 80, 10035, 0, 0, 0, 0 pffrcent: 24, 50022, 0, 0, 0, 0 pfstatescrub: 40, 0, 0, 0, 0, 0 pfiaddrpl: 120, 0, 0, 0, 0, 0 pfospfen: 112, 0, 0, 0, 0, 0 pfosfp: 40, 0, 0, 0, 0, 0 IPFW dynamic rule: 120, 0, 101, 1418, 21596608, 0 selfd: 56, 0, 2941, 3107, 6624395980, 0 SWAPMETA: 288, 116519, 1, 142, 1140, 0 Mountpoints: 752, 0, 9, 16, 9, 0 FFS inode: 168, 0, 49114, 2916, 439507, 0 FFS1 dinode: 128, 0, 0, 0, 0, 0 FFS2 dinode: 256, 0, 49114, 3116, 439507, 0 top -aSCHPI last pid: 30941; load averages: 5.33, 5.18, 5.17 up 21+17:34:18 22:58:41 174 processes: 15 running, 118 sleeping, 41 waiting CPU 0: 0.0% user, 0.0% nice, 51.1% system, 0.0% interrupt, 48.9% idle CPU 1: 0.0% user, 0.0% nice, 1.1% system, 45.9% interrupt, 53.0% idle CPU 2: 0.4% user, 0.0% nice, 2.2% system, 64.0% interrupt, 33.3% idle CPU 3: 0.0% user, 0.0% nice, 2.3% system, 48.5% interrupt, 49.2% idle CPU 4: 0.4% user, 0.0% nice, 0.8% system, 43.2% interrupt, 55.6% idle CPU 5: 0.4% user, 0.0% nice, 1.1% system, 59.4% interrupt, 39.1% idle CPU 6: 0.0% user, 0.0% nice, 0.7% system, 51.7% interrupt, 47.6% idle CPU 7: 0.0% user, 0.0% nice, 0.7% system, 44.9% interrupt, 54.3% idle Mem: 805M Active, 1913M Inact, 1008M Wired, 86M Cache, 417M Buf, 130M Free Swap: 8192M Total, 4K Used, 8192M Free PID USERNAME PRI NICE SIZE RES STATE C TIME CPU COMMAND 11 root 171 ki31 0K 128K RUN 0 277.6H 100.00% [idle{idle: cpu0}] 11 root 171 ki31 0K 128K RUN 5 347.9H 59.77% [idle{idle: cpu5}] 11 root 171 ki31 0K 128K RUN 4 347.9H 59.28% [idle{idle: cpu4}] 11 root 171 ki31 0K 128K RUN 7 349.7H 52.29% [idle{idle: cpu7}] 11 root 171 ki31 0K 128K RUN 1 335.8H 51.76% [idle{idle: cpu1}] 11 root 171 ki31 0K 128K CPU3 3 346.0H 50.49% [idle{idle: cpu3}] 12 root -68 - 0K 736K CPU2 2 94.0H 40.87% [intr{irq257: ix0:que }] 12 root -68 - 0K 736K WAIT 6 92.1H 39.36% [intr{irq261: ix0:que }] 11 root 171 ki31 0K 128K CPU2 2 341.4H 33.98% [idle{idle: cpu2}] 11 root 171 ki31 0K 128K CPU6 6 347.3H 32.28% [idle{idle: cpu6}] 12 root -68 - 0K 736K WAIT 7 89.5H 31.98% [intr{irq262: ix0:que }] 12 root -68 - 0K 736K WAIT 6 67.2H 29.49% [intr{irq269: ix1:que }] 12 root -68 - 0K 736K RUN 1 96.4H 28.76% [intr{irq256: ix0:que }] 12 root -68 - 0K 736K WAIT 2 72.6H 26.37% [intr{irq265: ix1:que }] 12 root -68 - 0K 736K WAIT 4 87.9H 26.17% [intr{irq259: ix0:que }] 12 root -68 - 0K 736K WAIT 3 91.5H 25.20% [intr{irq258: ix0:que }] 12 root -68 - 0K 736K CPU5 5 91.4H 23.58% [intr{irq260: ix0:que }] 12 root -68 - 0K 736K WAIT 3 69.7H 22.07% [intr{irq266: ix1:que }] 12 root -68 - 0K 736K CPU1 1 74.6H 20.56% [intr{irq264: ix1:que }] 12 root -68 - 0K 736K CPU7 7 67.2H 19.38% [intr{irq270: ix1:que }] 12 root -68 - 0K 736K WAIT 4 70.8H 17.58% [intr{irq267: ix1:que }] 12 root -68 - 0K 736K WAIT 5 67.6H 16.55% [intr{irq268: ix1:que }] 0 root -68 0 0K 480K CPU0 0 238.0H 1.66% [kernel{dummynet}] 0 root -68 0 0K 480K - 2 230:28 0.88% [kernel{ix0 que}] 0 root -68 0 0K 480K - 3 239:17 0.68% [kernel{ix0 que}] 0 root -68 0 0K 480K - 7 227:38 0.68% [kernel{ix0 que}] 0 root -68 0 0K 480K - 6 243:19 0.59% [kernel{ix0 que}] 0 root -68 0 0K 480K - 3 240:28 0.49% [kernel{ix0 que}] 0 root -68 0 0K 480K - 1 242:14 0.39% [kernel{ix0 que}] 0 root -68 0 0K 480K - 3 153:39 0.20% [kernel{ix1 que}] 0 root -68 0 0K 480K - 6 162:12 0.10% [kernel{ix1 que}] 0 root -68 0 0K 480K - 6 153:02 0.10% [kernel{ix1 que}] 0 root -68 0 0K 480K - 4 147:41 0.10% [kernel{ix1 que}] loader.conf , sysctl.conf # cat /boot/loader.conf kern.ipc.nmbclusters=262144 kern.ipc.nmbjumbop=262144 kern.ipc.somaxconn=32768 kern.ipc.maxsockets=204800 kern.maxfiles=256000 kern.maxfilesperproc=230400 hw.igb.lro=0 hw.igb.rxd=4096 hw.igb.txd=4096 hw.igb.max_interrupt_rate=32000 hw.igb.rx_process_limit=4096 hw.igb.num_queues=3 net.link.ifqmaxlen=10240 net.isr.defaultqlimit=8192 net.isr.bindthreads=1 net.isr.maxthreads=4 hw.ixgbe.lro=0 hw.ixgbe.rxd=4096 hw.ixgbe.txd=4096 hw.ixgbe.rx_process_limit=4096 hw.ixgbe.num_queues=7 hw.intr_storm_threshold=19000 net.graph.maxalloc=65536 net.graph.maxdata=65536 # cat /etc/sysctl.conf hw.intr_storm_threshold=19000 kern.ipc.nmbclusters=262144 kern.ipc.nmbjumbop=262144 kern.ipc.somaxconn=32768 kern.ipc.maxsockbuf=83886080 kern.maxfiles=256000 kern.maxfilesperproc=230400 kern.random.sys.harvest.ethernet=0 kern.random.sys.harvest.interrupt=0 net.inet.ip.fw.one_pass=0 net.inet.ip.dummynet.io_fast=1 net.inet.ip.fw.dyn_buckets=16384 net.inet.ip.fastforwarding=0 net.inet.ip.dummynet.hash_size=16384 net.inet.icmp.drop_redirect=1 net.inet.ip.redirect=0 net.inet.ip.dummynet.pipe_slot_limit=4096 net.inet.ip.intr_queue_maxlen=10240 net.graph.recvspace=35000 net.graph.maxdgram=35000 net.inet.tcp.blackhole=2 net.inet.tcp.delayed_ack=0 net.inet.tcp.drop_synfin=1 net.inet.tcp.nolocaltimewait=1 net.inet.udp.blackhole=1 Edited April 11, 2014 by John_obn Вставить ник Quote
Alex/AT Posted April 12, 2014 Posted April 12, 2014 Немного оффтопично, но... а теперь попробуйте уйти на Linux, и реализовать всё то же самое. Вставить ник Quote
DVM-Avgoor Posted April 12, 2014 Posted April 12, 2014 pf nat гораздо удобней и в принципе, производительней других вариантов natов на FreeBSD. Ничего он не производительней. ng_nat / ipfw nat очень хороши, а создавая лишний инстанс в пути пакета вы добавляете нагрузки в систему, сотню лишних переходов. С такими идеями лучше действительно уйти на линукс, там вариант ровно 1 и крутить особо нечего. Вставить ник Quote
Dyr Posted April 14, 2014 Author Posted April 14, 2014 Ничего он не производительней. ng_nat / ipfw nat очень хороши, а создавая лишний инстанс в пути пакета вы добавляете нагрузки в систему, сотню лишних переходов. Вы тестировали? Мои тесты показали крайне удручающую картину. Отдельно отмечу невозможность настроек таймаутов соединений (кроме разве что перекомпилирования?). Вставить ник Quote
DVM-Avgoor Posted April 14, 2014 Posted April 14, 2014 Вы тестировали? Мои тесты показали крайне удручающую картину. Отдельно отмечу невозможность настроек таймаутов соединений (кроме разве что перекомпилирования?). Поставьте уже линукс. Вставить ник Quote
Giga-Byte Posted April 15, 2014 Posted April 15, 2014 Немного оффтопично, но... а теперь попробуйте уйти на Linux, и реализовать всё то же самое. согласен. как я ни бился завести (чтобы работало месяцами а не днями) ipv6 на freebsd (7,8,9), безрезультатно. пы.сы. у меня 7.2 фря работала годами (как BRAS с mpd, ng_bpf, ng_car, ipfw, где-то dumynet для особо важных), но на ней с zebr-ой, с ND проблемы, не уходят neighbor discovery на ng интерфейсы. долго бился с 8-й и 9-й веткой. крашится падла раз в два-семь дней. ничего не помогало, я полгода убил наверное на всякие эксперименты перешел на линух, всё запустилось и заработало. аптайм скоро будет год. ipv6 трафик пока мал, до 15% в вечернее время и у меня всё работает в qemu-kvm. а вы тут с мега-тазиками да с 10GE сетевыми :) мои данные: аплинк 1гбит (2х1Гб физика). средний размер пакета у провайдера 600байт, PPS собсно из этого ясен (порядка 180кппс) около 900Мбит и уходит к клиентам через 2 х EXPI9402 (по два порта 1Гб в LACP) через прокинутые в виртуалку PCI-Express девайсы. что сподвигло на такое: выкинуть две стойки серверов, выкинуть два кондиционера, заменить ИБП на более слабые и более качественные (Inelt-ы слабые есть без батарей за 5т.р. с током зарядки до 7А или 10А, в следствии чего можно подключить из коробки как говорится батареи на 70Ач или 100Ач) поставив один 2U сервер Asus RS720-X7-RS8 с iKVM (чтобы управление было удалённое) c 32Гигами памяти и одним процом E5-2670 ну второй такойже в горячий резерв на другую площадку в случае глобального дизастера (пожар, затопление и т.п.). охлаждение не требует, и работает. с 8-ю потоками E5-2670 нагружен на 20%. а там около 30 виртуалок. главные пожиратели процессорного времени - BRAS и база данных биллинга. вот так вот. а фря нравилась... Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.