O ng_nat do FreeBSD para parar os pacotes periodicamente

7

Eu tenho o roteador do FreeBSD:

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

É um computador poderoso com muita memória

#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

Suas tarefas são: NAT via ng_nat e servidor PPPoE via mpd5.

Tráfego através de - cerca de 300Mbit / s, cerca de 40kpps no pico. Sessões de Pppoe criadas - 350 max.

ng_nat é configurado pelo 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

Existem 20 ng_nat, com cerca de 150 clientes.

Às vezes, o tráfego via nat pára. Quando isso acontece, o vmstat reporta muitas contagens 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

Eu tentei aumentar

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

mas isso não funciona.

É um novo problema (1-2 semanas). A configuração estava funcionando bem por cerca de 5 meses e nenhuma alteração de configuração foi feita antes dos problemas serem iniciados.

Nas últimas semanas, aumentamos ligeiramente o tráfego (de 270 para 300 mbits) e pouco mais de sessões pppoe (300- > 350).

Ajude-me por favor, como encontrar e resolver meu problema?

Upd: Informações sobre placas de rede:

# 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: Há 2 "top" de saída link

quando eu abro net.isr.dispatch para híbrido. Depois disso, eu tenho toneladas de processos de mpd (não sei por que) e uma CPU a 100% de interrupção, e depois de 10 minutos de trabalho ela foi reinicializada, devido ao grande pacote perdido.

UPD: Aconteceu novamente Há saída "superior" antes da reinicialização e depois link

parece um problema no processo ng_queue, que consome muita CPU. Desde o meu primeiro post, há muito mais sessões e tráfegos. Cerca de 400 pppoe e 450Mbit / s

    
por Korjavin Ivan 08.05.2013 / 16:03

2 respostas

1

Eu tentaria esbarrar em net.link.ifqmaxlen em /boot/loader.conf para 10240. Como entendo, o driver em (4) (e igp, o Intel 10g card) (ou pelo menos o seu 82574L) não vai balancear o tráfego não-IP (seu pppoe) então tudo vai para um ng_queue.

Eu não entendo porque uma de suas interfaces (em0) está usando um IRQ enquanto o outro (em1) está usando IRQs separados para tx, rx e link. Existem duas placas NIC em slots compatíveis com MSI-X?

Provavelmente você pode ter mais noção disso do que eu (não sei russo, e o Google translate não ajuda muito):

link

Este tópico dos fóruns do FreeBSD tem algumas sugestões

O wiki do FreeBSD no Network Performance Tuning explica um pouco sobre single-threading em ng_nat e algumas soluções alternativas

Algumas pessoas relataram sucesso ao desabilitar o IPv6 no kernel (e no mpd), mas não vejo nenhum consenso real lá.

EDIT: Esqueci de adicionar este, , parece ter vários outros parâmetros de ajuste relevantes, Eu pensei que os relacionados com o dummynet pareciam promissores.

Deixe-me saber o que acontece, este é um problema interessante ...

    
por 15.02.2014 / 20:21
0

A solução é:

deny ip from any to any dst-port 6881 out

Então, era sobre NAT e contagem de estados e torrent

    
por 14.07.2014 / 13:28

Tags