[FUG-BR] RES: freebsd 8.2 - tuning de rede

Luiz Otavio O Souza lists.br em gmail.com
Quarta Março 16 08:09:08 BRT 2011


On Mar 15, 2011, at 9:24 AM, kmkz bleh wrote:
>> 
>>> gw# vmstat -i
>>> interrupt                          total       rate
>>> irq28: ciss0                       73109         67
>>> irq1: atkbd0                          10          0
>>> irq17: atapci0+                      242          0
>>> irq22: uhci0                           2          0
>>> cpu0: timer                      2152906       1998
>>> irq256: em0                      2386318       2215
>>> irq257: em0                        21311         19
>>> irq258: em0                            2          0
>>> irq259: em1                          665          0
>>> irq260: bce0                    11311742      10503
>> 
>> O rate de interrupcoes nessa placa esta bem alto, experimenta ligar o
>> polling nessa interface e faça alguns testes de como ela se comporta.
>> 
> 
> Exatamente. Está muito alto mesmo. Acho que já usei polling a uns tempos
> atrás mas parece que a situação piorou... comecei a ter mais perda de
> pacote. Não digo com certeza porque já faz algum tempo, mas vou ver se ativo
> polling denovo pra ver.
> 
> A propósito, bce suporta polling?
> 

É... a bce não suporta polling... porém há uma luz no fim do tunel.. parece que tem um firmware novo disponível para ela.

A má noticia é que isso só esta disponível no -current, mas você pode copiar os drivers na mão para o 8-stable (ou 8-release tanto faz..): cp /current/src/sys/dev/bce/* /stable/src/sys/dev/bce (isso vai acontecer naturalmente como parte do processo de desenvolvimento - mas não tem dia para acontecer).

Uma outra coisa que importante para redes gigabit é _NUNCA_ (repito NUNCA) force a velocidade nessas portas. As interfaces gigabit PRECISAM da auto-negociação ativa para o correto funcionamento. O formato dessas interfaces é diferente das antigas 10/100 que geralmente funcionavam melhor com velocidades fixas. Na portas gigabit há necessidade que uma ponta seja nomeada como MASTER e a outra ponta SLAVE e nem todos drivers suportam essas configurações feitas manualmente.

Se sua conexão gigabit não funciona em 'autoselect' você tem algum 'outro' problema ai (cabos, a própria interface de rede, switches, etc.).

Voltando a bce, aqui esta uma lista das ultimas correções nesse driver:

------------------------------------------------------------------------
r218529 | davidch | 2011-02-10 22:41:49 -0200 (Thu, 10 Feb 2011) | 4 lines

- Updated firmware which improves small packet performance.

MFC after:      2 weeks

------------------------------------------------------------------------
r218527 | davidch | 2011-02-10 20:36:23 -0200 (Thu, 10 Feb 2011) | 6 lines

- Added error checking to nvram read functions.
- Minor style updates.

Submitted by:   gcooper em freebsd.org
MFC after:      2 weeks

------------------------------------------------------------------------
r218423 | davidch | 2011-02-07 21:00:24 -0200 (Mon, 07 Feb 2011) | 12 lines

- Added systcls for header splitting, RX/TX buffer count, interrupt
  coalescing, strict RX MTU, verbose output, and shared memory debug.
- Added additional debug counters (VLAN tags and split header frames).
- Updated debug counters to 64 bit definitions.
- Updated l2fhdr bit definitions.
- Combined RX buffer sizing into a single function.
- Added buffer size and interrupt coalescing settings to adapter info
  printout.

Submitted by:   davidch
MFC after:      2 weeks

[snip]


> 
>> 
>> 
>>> irq261: bce1                       59430         55
>>> irq262: em2                      1954193       1814
>>> irq263: em2                      2460842       2284
>>> irq264: em2                            1          0
>>> irq265: em3                      6807389       6320
>>> irq266: em3                      6870682       6379
>>> irq267: em3                           14          0
>> 
>> Aqui também pode compensar...
>> 
>>> irq268: bge0                     1936273       1797
>>> irq269: bge1                     1504853       1397
>>> cpu2: timer                      2144394       1991
>>> cpu3: timer                      2144549       1991
>>> cpu1: timer                      2144367       1991
>>> Total                           43973294      40829
>>> Outra coisa, vi que meu servidor deu PANIC com a msg abaixo:
>>> 
>>> reboot after panic: kmem_malloc(4096): kmem_map too small: 335544320
>> total
>>> allocated
>>> 
>>> Com 4GB de RAM, o que eu devo fazer pra resolver esse problema? Qual
>> valor
>>> devo colocar no KVA_PAGES pra compilar o kernel, seria 1024? Meu kernel
>> ta
>>> compilado com a opção PAE.
>> 
>> 
>> 
>> Só uma pergunta... você esta utilizando ZFS nesse servidor ? (esse erro
>> "kmem_map too small" é muito comum nessa situação, embora eu não acredite
>> que você esteja utilizando ZFS em um router...)
>> 
>> Não faz isso não... O PAE não faz o que você pensa que ele faz... por favor
>> remova ele... é melhor você não aproveitar toda a memória em i386 do que
>> utilizar o PAE (geralmente). Fiquei com o i386 - sem PAE - ou vá para o
>> amd64 de vez.
>> 
>> No amd64 você não terá problemas (ou no máximo, como se faz com o ZFS, será
>> preciso limitar o valor máximo para o kernel).
>> 
> 
> Não, não estou usando ZFS não.
> 
> Eu vi mesmo que o pessoal que teve esse problema utilizava ZFS. Não é o meu
> caso. Vi também que tem uma sysctl pra aumentar via loader.conf, mas que pra
> utiliza-la precisa setar o KVA_PAGES no kernel.
> 
> O problema é que mesmo sem o PAE ocorre o panic, pelo menos no FreeBSD 8.2
> aconteceu...
> 

Ok...

Tente adicionar isso ai:

# cat /boot/loader.conf
vm.kmem_size="6G"

Mas ajustando o tamanho máximo para o seu ambiente (um pouco menos que a memória disponível - esse exemplo é de um servidor com 8G de RAM, ZFS e amd64).

No caso do sistema de 32bits você pode limitar esse valor um pouco abaixo dos 2GB (limite de memória do kernel).

Att.,
Luiz


Mais detalhes sobre a lista de discussão freebsd