[Fwd: Re: RES: RES: [FUGSPBR] "tx underrun, increasing tx start threshold"]

Joao Rocha Braga Filho goffredo em webkey.com.br
Sex Fev 6 20:57:36 BRST 2004


    Acho que cortar mais do que isto o e-mail perde o sentido. Eu já 
tinha cortado
antes uma boa parte.

Renato Frederick wrote:

>...
>[cut!]
>
>  
>
>Engraçado João, aqui uso 3com e brincando com o NETPERF, fiz testes com
>placas wireless, equipamentos wireless indoor, tanto no *NIX e Windows.
>
>Resumidamente no Windows e no *NIX placas que não tinham o "paralell
>tasking" havia maior consumo de CPU..
>Pelo que sei esse recurso é desenvolvido justamente prá poupar o
>processador.
>
>Mas no meu ultimo teste, em minha rede usando hub consegui 6MB com 3com em
>atlon xp 1.6 e 4MB com realtek, na mesma máquina, o HUB 3com de 10MB.
>Fiz uma média ponderada de 3 testes, no mesmo hardware, com as 2 placas na
>mesma máquina, cada hora usando uma. A outra máquina era identica. Teste de
>3com pra 3com e realtek pra realtek
>  
>

   Eu usei o FreeBSD 4.6, se não me engano, nos testes. Pode ser que os 
drivers tenham
melhorado de lá para cá, e pode ser que a 3Com tenha fornecido as 
informações para
fazer o driver. Parece que a pessoa que tinha implementado os drivers 
para a 3Com não
tinha as informações necessárias, e fez o driver meio às cegas.

>Na verdade o teste foi só pra fazer um stress na máquina, verificando,
>depois com o cpuburn se ela não ia travar, já que era uma máquina montada
>por nós.
>
>Acho estranho você estar com esses problemas com 3com, aliás nunc tive
>problemas graves assim com nenhuma placa, realtek ou 3com ou sis (onboard).
>
>Seria legal um dia marcamos de fazer testes mesmo! :)
>  
>

   Eu adoraria refazer os testes. De onde você é? Eu sou do Rio de 
Janeiro, e estou
"disponível" no momento.

   O teste que eu fiz, na realidade, não foi exatamente de tráfego. 
Acho que seria
descrito melhor como consumo de CPU por tráfego, e o índice de medida 
era o tráfego.
Pois quanto mais tráfego, mais gasto de CPU no nat. Se o driver comsumir 
muita CPU,
menos sobrará para o NAT, limitando o tráfego. Acho que eu não estou 
sendo claro.

   Digamos que o NAT consome X de tempo por MB processado, e o driver 
da interface
de rede Y de tempo por MB processado. Ou seja, temos tempo por MB de 
cada parte.

1 segundo = A * ( X + Y )

   Sendo A a quantidade de tráfego pela interface. Então a diminuição 
de qualquer um
dos fatores X e Y implicaria em um aumento de A para manter 1 segundo. 
No meu teste
X era constante, já que o NAT era o mesmo. Então a troca de interfaces 
promoveu uma
variação no Y. Na realidade, o meu teste não foi em uma situação 
absolutamente controlada,
pois tinham no jogo duas interfaces de rede, e então tínhamos Y1 e Y2:

1 segundo = A * ( X + Y1 + Y2)

   Mas como eu só alterava uma das interfaces, então X e um dos Ys 
estavam contantes.
Por isto é que mencionei que gostaria de fazer um teste só com uma 
interface de rede.

   Na realidade é fácil determinar a diferença de eficiencia entre duas 
placas de rede.
Digamos que temos a placa "a" e a "b", e assim temos Ya e Yb. o que 
implica em Aa e Ab:

( X + Ya ) Aa = 1  =>  X + Ya = 1/Aa

( X + Yb ) Ab = 1  =>  X + Yb = 1/Ab

=> Ya - Yb = 1/Aa - 1/Ab => Ya = Yb + ( 1/Aa - 1/Ab )

   Portanto pode-se obter a diferença de eficiência entre as duas 
placas. Corrigindo, placas e
drivers. Mas ainda não se tem como obter os valores de X, Ya e Yb. São 3 
variáveis para 2
equações.

   Existe um outro problema. os fatores X, Ya e Yb podem variar de 
entrada para saída. Ou
seja, uma interface pode ser eficiente na saída dos dados, mas não na 
entrada. Então o teste
deve ser feito nos 2 sentidos.

( Xi + Yai ) Aai = 1  =>  Xi + Yai = 1/Aai

( Xi + Ybi ) Abi = 1  =>  X + Ybi = 1/Abi

=> Yai - Ybi = 1/Aai - 1/Abi => Yai = Ybi + ( 1/Aai - 1/Abi )

   E

( Xo + Yao ) Aao = 1  =>  Xo + Yao = 1/Aao

( Xo + Ybo ) Abo = 1  =>  Xo + Ybo = 1/Abo

=> Yoa - Ybo = 1/Aao - 1/Abo => Yao = Ybo + ( 1/Aao - 1/Abo )

   Pode-se também conduzir testes de tráfego atravessando a máquina, 
por exemplo, entrando
pelo NAT e saindo por outra interface.

( Xi + Yai + Ybo ) Aab = 1  => Xi + Yai + Ybo = 1/Aab

   Mas o valor de Xi + Yai é conhecido, então:

1/Aai + Ybo = 1/Aab  =>  Ybo = 1/Aab - 1/Aai

   E assim obtemos a capacidade de transmissão de uma interface, aliás, 
o tempo de CPU usado
pela interface para cada MB transmitido. Com testes e dados parecidos 
podemos obter os outros
fatores. Mas tem um problema sério. Isto tudo é aproximado, pois um 
programa para gerar tráfego
de rede entre as máquinas não deverá consumir praticamente nenhuma CPU. 
E o mesmo valeria
para o resto do sistema operacional. Talvez o melhor fosse fazer 2 
programas. Um de escrita de
uma grande bloco de dados, tipo 200 Mega Bytes, e outro de leitura, e 
eles mesmo fazerem a
conexão entre si. Primeiro dispara-se o de leitura, e depois o de escrita.


   Acho que seria um teste  muito interessante. Eu gostaria de fazê-lo. 
Acho que preciso arranjar
um emprego em uma revista de informática que tenha laboratório. :^) 
Alguma aí precisando de
um cara detalhista que adora fazer experiências? :^)


      João Rocha.


>Abraços.
>


_______________________________________________________________
Sair da Lista: http://lists.fugspbr.org/listinfo.cgi
Historico: http://www4.fugspbr.org/lista/html/FUG-BR/



Mais detalhes sobre a lista de discussão freebsd