RES: RES: [FUGSPBR] "tx underrun, increasing tx start threshold"
Joao Rocha Braga Filho
goffredo em webkey.com.br
Sex Fev 6 19:27:44 BRST 2004
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/
>
>
>
>
_______________________________________________________________
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