Dois cartões com um cabo cruzado:
Como você está testando? Como você está medindo isso? Quando você diz que 20-40% nos dizem exatamente o que você quer dizer em cada instância, e como você está obtendo esse número.
A sobrecarga de ethernet é de cerca de 38 bytes por pacote e o TCP / IP tem cerca de 52 bytes de sobrecarga. Com pacotes de 1500 bytes, executando TCP / IP em ethernet, você está olhando para 94% de taxa de transferência de dados possível.
O aplicativo de envio pode estar enviando pequenos pedaços de dados, no entanto. Tome UDP (usado para streaming de vídeo, voz, etc). Se você está enviando 256 bytes por pacote, mais 90 bytes de sobrecarga, você terá 74% de utilização.
Então você tem a sobrecarga do SO e da pilha TCP / IP - ambos adicionam latência, o que afetará a largura de banda de maneiras complexas devido à maneira como o TCP / IP gerencia o carregamento da rede (os algoritmos tentam usar o máximo largura de banda sem perder pacotes).
Então você tem outro carregamento no computador. Se você estiver copiando dados fragmentados de um disco rígido lento, talvez você não esteja vendo o afunilamento da rede, mas outro afunilamento em outro lugar no PC.
As NICs 100base-T também são compatíveis com o servidor? Tem certeza de que eles não descarregam nenhum processamento no SO que deve ser feito na NIC?
Em que barramento estão os NICs? PCI, PCIe, etc? O que mais está naquele ônibus? A NIC está compartilhando um IRQ com outros dispositivos?
Você está usando o BIOS mais recente para a placa-mãe e NIC (se aplicável)? Drivers mais recentes?
O sistema operacional é um sistema operacional de servidor ou desktop (o agendador, pilhas, etc são configurados de forma diferente para diferentes cenários de desempenho)?
Existem muitas e muitas razões pelas quais você pode não estar obtendo a taxa de transferência desejada. A pergunta simples que você está fazendo acima não fornece informações suficientes para saber onde está o problema real.
Em uma rede normal, pode ser causado por colisões e outro tráfego de rede
A Ethernet é incrível pelo que faz, mas não é sincronizada. Isso significa que duas placas podem começar a transmitir de uma só vez, o que causa uma colisão.
Geralmente, uma colisão é detectada pelos dois cartões e ambos recuam por um período aleatório de tempo antes de tentar reenviar.
Isso, juntamente com a sobrecarga do pacote Ethernet e codificação, significa que, mesmo nas melhores circunstâncias, você não pode realmente esperar mais do que 80-90% de utilização.
Você pode aliviar isso usando roteadores e switches em vez de hubs entre computadores, mas até mesmo roteadores e switches descartarão pacotes se houver muitos dados, e eles só poderão melhorar a utilização total em alguns por cento.
O próprio pacote ethernet inclui overhead para clocking, endereçamento, etc. Se você habilitar grandes pacotes em sua rede, então a sobrecarga do pacote se torna pequena em relação ao tamanho dos dados, então para transferências grandes você pode obter melhor utilização. Isso não ajuda se seu aplicativo exigir muitos pacotes menores, como em aplicativos de streaming de áudio ou vídeo. Mesmo se você ativar pacotes grandes, você ainda pode estar enviando pacotes pequenos apenas porque é isso que o aplicativo está enviando.
-Adam