[GTER] pc router

Luiz Otavio O Souza lists.br at gmail.com
Fri Apr 27 12:21:32 -03 2012


2012/4/26 Lista <lista.gter at gmail.com>:
> Em 26 de abril de 2012 03:16, Klaus Schneider <klausps at gmail.com> escreveu:
>
>> 2012/4/26 Lista <lista.gter at gmail.com>
>>
>> > Boa Noite pessoal, metendo o bedelho na conversa dos grande guru.
>> > Isso tudo não tem como fazer com que o kernel do linux ou melhor o
>> > soft-router possa processar as coisas diretamente via hardware,  já que
>> em
>> > si é o que mais pega em se tratando de alto trafego?
>> > Agora pelo que garimpei, não vi nada que pudesse dar um tunning no linux
>> > para que o mesmo possa consumir menos CPU(forward e pps), ao se processar
>> > uma quantidade X de pacotes, o interessante seria fazer com que o
>> hardware
>> > processe e não o linux, acho que o segredo das caixas é justamente essa,
>> > eles passa para o hardware, seja uma cpu embutida no C.I da placa de rede
>> > ou alguns processadores a parte(não conheço as caixas a fundo) deixando
>> > para o processador central uma fatia bem pequena para tal processamento.
>> >
>> O problema são os IRQs.
>> Está em desenvolvimento e acredito que na RELENG_10 do FreeBSD já esteja
>> disponível o netio, desenvolvido pelo Luigi Rizzo, mas por enquanto somente
>> para testes:
>> http://info.iet.unipi.it/~luigi/netmap/
>>
>>
>  A questão é que é voltado somente para drivers da ixgbe para intel
> 10Gbp/s, que pelo que sei, em si ela já é melhorada no driver (posts
> antigos da lista).
> Você chegou a fazer teste com esse patch?
>

O problema não são só as IRQs... (mas sim as inúmeras camadas de
software que o S.O. implementa entre um programa e o 'fio').

O netmap é, de certa forma, baseado na idéia do mmap(2)
(http://man.freebsd.org/mmap), onde o netmap mapeia os buffers de
transmissão e recepção da placa diretamente para o userland.

Com isso os programas que rodam no userland podem produzir os pacotes
e transmiti-los de forma extremamente rápida e com muito pouco
overhead. Em suma, todas as layers do S.O. são 'bypassadas' e uma vez
enviado o pacote, ele é transmitido diretamente pelo hardware (pela
placa de rede).

No site do netmap ele fala que leva aproximadamente 60~65 ciclos de
clock para mover um pacote de um programa no userland para o fio. Isso
permite que ele sature uma interface de 10Gb com 14.8 Mpps utilizando
apenas um core rodando a 900Mhz.

O outro lado do netmap é que ele 'reinventou a roda' uma vez que ele
não usa nenhuma das APIs (padronizadas) do *nix. Os programas precisam
ser modificados e convertidos para trabalhar com o netmap (os
programas passam a receber e transmitir apenas pacotes) e há muito
pouco feito nesse sentido.

Para encaminhamento de pacotes o netmap pode ser muito útil (já que
você não precisa inspecionar completamente o pacote, só um pequeno
número de informações), mas para 'servidores' com protolocos baseados
em TCP não sei se haverá muitas mudanças, pois pelo que eu entendi
você precisa receber o pacote, identificar o protocolo e reinserir o
mesmo no network stack para que ele faça o seu trabalho (se não quiser
reimplementar o TCP/IP na unha.... ouch!!!).

Acredito que ninguem fez testes significativos com o netmap justamente
pela falta do que testar.

O netmap suporta atualmente os drivers ixgbe (Intel 10G), e1000 (em e
igb - Intel 1G) e re (Realtreko 1G).

Att.,
Luiz



More information about the gter mailing list