Il block di ng_nat di FreeBSD passa periodicamente i pacchetti

Ho router FreeBSD:

#uname 9.1-STABLE FreeBSD 9.1-STABLE #0: Fri Jan 18 16:20:47 YEKT 2013 

È un potente computer con un sacco di memory

 #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 

Le sue attività sono: NAT tramite il server ng_nat e PPPoE tramite mpd5.

Traffico attraverso – circa 300Mbit / s, circa 40kpps al massimo. Pppoe sessioni create – 350 max.

ng_nat è configurato dallo script:

  /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 

Ci sono 20 tali nodes ng_nat, con circa 150 clienti.

A volte, il traffico via nat arresta. Quando ciò accade, vmstat riport molti conteggi di FAIL

 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 

Mi è stato provato ad aumentare

 net.graph.maxdata=10240 net.graph.maxalloc=10240 

ma questo non funziona.

È un nuovo problema (1-2 settimane). La configuration aveva funzionato bene per circa 5 mesi e non sono state apportte modifiche alla configuration che portno ai problemi che iniziano.

Nelle ultime settimane abbiamo leggermente aumentato il traffico (da 270 a 300 megawatt) e poco più sessioni di pppoe (300-> 350).

Aiutimi per favore, come trovare e risolvere il mio problema?

Aggiornamento: Informazioni sulle tabs di networking:

 # 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: Esiste 2 output "superiore" https://gist.github.com/korjavin/9190181

quando ho cambiato net.isr.dispatch all'ibrido. Dopo di che, ho tonnellate di processi mpd (non so perché) e una CPU al 100% dell'interrupt, e dopo 10 minuti di lavoro è stato riavviato, a causa del grande pacchetto perso.

UPD: è accaduto di nuovo C'è l'output "superiore" prima di riavviare e dopo https://gist.github.com/korjavin/9254734

sembra un problema in ng_queue proccess, che mangia CPU a molto. Dal mio primo post, ci sono molte altre sessioni e traffico. Circa 400 pppoe e 450Mbit / s

  • La port di Ubuntu Server inoltra il modo più semplice?
  • fwbuilder: L'inoltro della port funziona dall'esterno, ma non all'interno
  • molti timestamps TCP diversi tramite il dispositivo NAT causano il server a rilasciare pacchetti (PAWS)
  • Il bilanciamento del carico della scatola NAT con iptables e 4 DHCP uplinks
  • PPTP / GRE Esempio di IPAT
  • voglio fare router software con due carte nic using centos 6.4
  • Cisco ASA NAT - host interno vede il suo IP pubblico
  • Modalità di networking VMWare (NAT o Bridged)?
  • 2 Solutions collect form web for “Il block di ng_nat di FreeBSD passa periodicamente i pacchetti”

    Provo a bombardare net.link.ifqmaxlen in /boot/loader.conf a 10240. Come ho sottoposto, il driver em (4) (e la scheda igp, la scheda Intel 10g) (o alless il tuo 82574L) non bilanciare il traffico non IP (il tuo pppoe) quindi tutto va in un ng_queue.

    Non capisco perché una delle vostre interfacce (em0) sta utilizzando un IRQ mentre l'altro (em1) utilizza IRQ separati per tx, rx e link. Sono entrambe le tabs NIC in slot MSI-X?

    Probabilmente puoi avere più senso di quello che posso (non conosco il russo, e il traduttore di Google non aiuta molto):

    http://forum.nag.ru/forum/index.php?s=c4da62052515736f45c73b932216af33&showtopic=82322&st=0

    Questo thread dai forum di FreeBSD ha alcuni suggerimenti

    Il wiki FreeBSD su Tuning di performance di networking spiega un po 'di singolo threading in ng_nat e di alcune soluzioni alternative

    Alcune persone hanno segnalato il successo di disabilitazione di IPv6 nel kernel (e in mpd), ma non vedo alcun vero consenso.

    EDIT: Ho dimenticato di aggiungere questo ,, sembra avere diversi altri parametri di sintonia pertinenti, ho pensato che i dummynet correlati sembravano promettenti.

    Fammi sapere cosa succede, questo è un problema interessante …

    La soluzione è:

     deny ip from any to any dst-port 6881 out 

    Quindi, si trattava di NAT e count statale e torrente

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.