Aqui estão algumas dicas que você pode usar se está tendo um desempenho baixo de sua ethernet, ou para ganhar um pouco mais de velocidade naquelas transferências ftp.
O programa ttcp.c
é um bom teste para medir
velocidade em baixo nível. Outro truque comum é fazer
um ftp> get large_file /dev/null
onde large_file
é > 1MB e reside no buffer cache da máquina transmissora.
(Faça o `get' pelo menos duas vezes, pois a primeira estará
ajustando o buffer cache na máquina transmissora.) Você quer
que o arquivo esteja no buffer cache porque você não está
interessado em incluir a velocidade de acesso a arquivos a partir
do disco em suas medidas. É por isso também que você "salva" o arquivo
recebido em /dev/null
e não no disco.
Mesmo uma placa de 8 bits é capaz de receber pacotes back-to-back sem problemas. A dificuldade aparece quando o computador não consegue capturar os pacotes recebidos rápido o suficiente para abrir espaço para mais pacotes vindo da rede. Se o computador não retira rapidamente os pacotes recebidos da memória da placa, a placa não terá onde colocar o novo pacote.
Neste caso a placa ou descarta o novo pacote, ou escreve em cima de um pacote anteriormente recebido. Qualquer um dos procedimentos interrompe seriamente o fluxo de tráfego pois causam/pedem retransmissões e podem degradar seriamente a performance por um fator de até 5!
Placas om mais memória são capazes de ``bufferizar'' mais pacotes, e desta forma podem manipular bursts maiores de pacotes back-to-back sem descartar pacotes. Isto por sua vez significa que a placa não requer um latência tão baixa do computador com respeito a retirada dos pacotes recebidos do buffer para evitar o descarte de pacotes.
A maioria das placas de 8 bits tem um buffer de 8kB, e a maioria das placas de 16 bits tem um buffer de 16kB. A maioria dos drivers Linux reservarão 3kB deste buffer (para dois buffers de transmissão), deixando somente 5kB de espaço para recepção em uma placa de 8 bits. Isto é suficiente para apenas 3 pacotes completos ethernet (1500 bytes).
Como mencionado acima, se os pacotes são retirados da placa rápido o suficiente, então uma condição de descarte/sobreposição de pacote recebido não ocorrerá mesmo quando a quantidade de memória no buffer de pacotes é pequena. O fator que determina a taxa em que os pacotes são retirados da placa para a memória do computador é a velocidade do caminho que os dados percorrem entre os dois -- a velocidade do barramento ISA. (Se a CPU é tão lenta quanto um 386sx-16, então isto também terá um papel.)
A velocidade recomendada para o barramento ISA é de aproximadamente 8MHz, mas muitas placas-mãe e dispositivos periféricos podem rodar a frequências bem mais altas. A frequência de clock para o barramento ISA geralmente pode ser modificada no setup da CMOS, selecionando um divisor da frequência da placa-mãe/CPU.
Por exemplo, aqui estão algumas velocidades de recepção medidas pelo programa TTCP num 486 40MHz, com uma placa de 8 bits WD8003EP, para diferentes velocidades de barramento ISA.
Velocidade do Barramento ISA (MHz) Rx TTCP (kB/s) ---------------------------------- -------------- 6.7 740 13.4 970 20.0 1030 26.7 1075
Você seria muito pressionado para conseguir mais que 1075kB/s com qualquer placa ethernet 10Mb/s, usando TCP/IP. Entretanto, não espere que todos os sistemas funcionem em barramentos ISA rápidos. A maioria dos sistemas não funcionará corretamente com velocidades maiores que 13MHz. (Note também que a maioria dos sistemas PCI tem a velocidade do barramento ISA fixada em 8MHz, de maneira que o usuário final não tem a opção de aumentá-la.)
Em adição as velocidades de transferência mais rápidas, você usualmente será beneficiado com a redução no uso da CPU devido à menor duração dos ciclos de memória e i/o. (Note que discos rígidos e placas de vídeo localizados no barramento ISA também usualmente experimentarão uma melhoria de performance devido à velocidade maior no barramento ISA.)
Certifique-se de fazer um backup de seus dados antes de experimentar velocidades de barramento ISA maiores que 8MHz, e teste extensivamente todos os periféricos ISA para certificar se todos estão operando corretamente depois de fazer qualquer aumento de velocidade.
Mais uma vez, placas com quantidades de RAM pequenas e caminho de dados relativamente lento entre a placa e a memória do computador tem problemas. O tamanho default da janela de recepção TCP é 32kB, o que significa que um computador mais rápido na mesma subnet que você pode enviar 32k de dados em você sem parar para ver se você recebeu corretamente qualquer parte.
Versões recentes do comando route
tem a capacidade de
modificar o tamanho desta janela on the fly. Usualmente
é somente para a rede local que esta janela deve ser reduzida,
pos os computadores além de alguns roteadores ou gateways são
`bufferizados' o bastante para não representar um problema. Um
exemplo de uso pode ser:
route add <whatever> ... window <win_size>
Onde win_size
é o tamanho da janela que você deseja usar
(em bytes). Uma placa de 8 bits 3c503 num barramento ISA
operando à velocidade de 8MHz ou menos trabalharia bem com
uma janela de aproximadamente 4kB. Uma janela muito grande
causaria perda e sobreposição de pacotes recebidos, e uma
redução drástica na velocidade da ethernet. Você pode checar
o estado operacional através do seguinte comando:
cat /proc/net/dev
o que mostrará qualquer condição
de pacote descartado ou sobreposto que tenha ocorrido.
Algumas pessoas descobriram que usar uma placa de 8 bits em clientes NFS causa performance pior do que o esperado quando se usa tamanho de pacote NFS igual a 8kB (Tamanho nativo da Sun).
A possível razão para isto pode ser devida à diferença no tamanho dos buffers na placa entre placas de 8 e 16 bits. O tamanho máximo de pacote ethernet é de 1500 bytes. Agora note que um pacote NFS de 8kB chegará como aproximadamente 6 pacotes back-to-back de tamanho máximo. As placas de 8 e 16 bits não tem problemas em receber pacotes back-to-back. O problema aparece quando a máquina não retira os pacotes dos buffers da placa no tempo certo, e o buffer sobrecarrega. O fato de que as placas de 8 bits usam um ciclo extra no barramento ISA por transferência também atrapalha. O que você pode fazer se tem uma placa de 8 bits é setar o tamanho de pacote NFS para 2kB (ou mesmo 1kB), ou tentar aumentar a velocidade do barramento ISA de maneira que o buffer da placa seja tratado mais rapidamente. Eu descobri que uma velha placa WD8003E rodando a 8MHz (sem nenhuma outra carga no sistema) consegue receber sem problemas (descarte/sobreposição de pacotes) com um tamanho de pacote NFS igual a 2kB, mas não com um igual a 4kN, onde a performance foi degradada por um fator de três.