Ich habe einen FreeBSD-Router:
#uname
9.1-STABLE FreeBSD 9.1-STABLE #0: Fri Jan 18 16:20:47 YEKT 2013
Es ist ein leistungsstarker Computer mit viel Speicher
#top -S
last pid: 45076; load averages: 1.54, 1.46, 1.29 up 0+21:13:28 19:23:46
84 processes: 2 running, 81 sleeping, 1 waiting
CPU: 3.1% user, 0.0% nice, 32.1% system, 5.3% interrupt, 59.5% idle
Mem: 390M Active, 1441M Inact, 785M Wired, 799M Buf, 5008M Free
Swap: 8192M Total, 8192M Free
PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
11 root 4 155 ki31 0K 64K RUN 3 71.4H 254.83% idle
13 root 4 -16 - 0K 64K sleep 0 101:52 103.03% ng_queue
0 root 14 -92 0 0K 224K - 2 229:44 16.55% kernel
12 root 17 -84 - 0K 272K WAIT 0 213:32 15.67% intr
40228 root 1 22 0 51060K 25084K select 0 20:27 1.66% snmpd
15052 root 1 52 0 104M 22204K select 2 4:36 0.98% mpd5
19 root 1 16 - 0K 16K syncer 1 0:48 0.20% syncer
Seine Aufgaben sind: NAT über ng_nat und PPPoE-Server über mpd5.
Verkehr durch - ungefähr 300 Mbit / s, ungefähr 40 kpps in der Spitze. Pppoe-Sitzungen erstellt - max. 350
ng_nat wird vom Skript konfiguriert:
/usr/sbin/ngctl -f- <<-EOF
mkpeer ipfw: nat %s out
name ipfw:%s %s
connect ipfw: %s: %s in
msg %s: setaliasaddr 1.1.%s
Es gibt 20 solcher ng_nat-Knoten mit ungefähr 150 Clients.
Manchmal stoppt der Verkehr über nat. In diesem Fall meldet vmstat viele FAIL-Zählungen
vmstat -z | grep -i netgraph
ITEM SIZE LIMIT USED FREE REQ FAIL SLEEP
NetGraph items: 72, 10266, 1, 376,39178965, 0, 0
NetGraph data items: 72, 10266, 9, 10257,2327948820,2131611,4033
Ich wurde versucht zu erhöhen
net.graph.maxdata=10240
net.graph.maxalloc=10240
aber das funktioniert nicht.
Es ist ein neues Problem (1-2 Wochen). Die Konfiguration funktionierte seit ungefähr 5 Monaten gut und es wurden keine Konfigurationsänderungen vorgenommen, die zu den beginnenden Problemen führten.
In den letzten Wochen haben wir den Verkehr leicht erhöht (von 270 auf 300 MBit) und etwas mehr Pppoe-Sitzungen (300-> 350).
Helfen Sie mir bitte, wie ich mein Problem finde und löse?
Update: Infos zu Netzwerkkarten:
# pciconf -lv | grep -B3 network
em0@pci0:0:25:0: class=0x020000 card=0x35788086 chip=0x15028086 rev=0x05 hdr=0x00
vendor = 'Intel Corporation'
device = '82579LM Gigabit Network Connection'
class = network
--
em1@pci0:2:0:0: class=0x020000 card=0x35788086 chip=0x10d38086 rev=0x00 hdr=0x00
vendor = 'Intel Corporation'
device = '82574L Gigabit Network Connection'
class = network
UPD: Es gibt 2 "Top" -Ausgaben https://gist.github.com/korjavin/9190181
wenn ich net.isr.dispatch auf hybrid umschalte. Danach habe ich Tonnen von mpd-Prozessen (weiß nicht warum) und eine CPU zu 100% der Unterbrechung, und nach 10 Minuten Arbeit wurde es aufgrund eines großen Paketverlusts neu gestartet.
UPD: erneut aufgetreten Vor dem Neustart und nach https://gist.github.com/korjavin/9254734 wird die Ausgabe "top" ausgegeben
sieht aus wie ein Problem im ng_queue-Prozess, der die CPU zu stark verschlingt. Seit meinem ersten Beitrag gibt es viel mehr Sitzungen und Traffics. Etwa 400 pppoe und 450 Mbit / s
Antworten:
Ich würde versuchen, net.link.ifqmaxlen in /boot/loader.conf auf 10240 zu erhöhen. Nach meinem Verständnis wird dies der Treiber em (4) (und igp, die Intel 10g-Karte) (oder zumindest Ihr 82574L) nicht tun Gleicht den Nicht-IP-Verkehr (Ihr Pppoe) aus, sodass alles in einer ng_queue eingeht.
Ich verstehe nicht, warum eine Ihrer Schnittstellen (em0) einen IRQ verwendet, während die andere (em1) separate IRQs für tx, rx und link verwendet. Befinden sich beide NIC-Karten in MSI-X-fähigen Steckplätzen?
Sie können wahrscheinlich mehr Sinn daraus machen als ich (ich kann kein Russisch und Google Übersetzer hilft nicht viel):
http://forum.nag.ru/forum/index.php?s=c4da62052515736f45c73b932216af33&showtopic=82322&st=0
Dieser Thread aus den FreeBSD-Foren enthält einige Vorschläge
Das FreeBSD-Wiki zur Netzwerkleistungsoptimierung erklärt ein wenig das Single-Threading in ng_nat und einige Problemumgehungen
Einige Leute haben berichtet, dass es erfolgreich war, IPv6 im Kernel (und in mpd) zu deaktivieren, aber ich sehe dort keinen wirklichen Konsens.
EDIT: Ich habe vergessen, diesen hinzuzufügen , scheint einige andere relevante Tuning-Parameter zu haben, ich fand die Dummynet-bezogenen vielversprechend.
Lassen Sie mich wissen, was passiert, das ist ein interessantes Problem ...
quelle
Lösung ist:
Es ging also um NAT und State Count und Torrent
quelle