O problema foi causado por:
- buffers de pacotes muito pequenos em um switch gigabit barato;
- algoritmo de prevenção de congestionamento inadequado usado nos Serviços de arquivos do Windows Server 2008;
- desativou o controle de fluxo no adaptador de rede (ele foi desativado por padrão).
Como o controle de fluxo estava desabilitado, o Windows enviava pacotes até o tamanho da janela em um lote usando conexão de 1 Gbps. Como o cliente de 100 Mbps recebe pacotes muito mais lentamente, quase todos os dados até o tamanho da janela precisavam ser armazenados em buffer por um comutador. Como este switch barato tem buffers muito pequenos (tamanhos de buffer não são sequer indicados nas especificações, mas tem que ser inferior a 64kB por porta, como até mesmo desabilitar o dimensionamento de janela não ajudou) teve que soltar os pacotes em excesso. A perda de pacotes causou um atraso de cerca de 0,25s visto em um gráfico. Mas o algoritmo de prevenção de congestionamento, usado no File Services, ou a falta dele, não reduziu o tamanho da janela TCP, então o próximo lote de pacotes não foi menor - ele congestionou a conexão novamente causando congestion collapse .
Conexões TCP padrão (não Serviços de Arquivo) devem usar algoritmo de controle de congestionamento diferente e não ficar congestionadas repetidamente. Eu suponho que tratar os serviços de arquivos especialmente pela pilha TCP do Windows ajuda nos benchmarks, por exemplo, no Samba.
Então as soluções são:
-
Ativar controle de fluxo nas propriedades do adaptador de rede. Não é uma solução ideal, pois qualquer transferência de serviços de arquivo para cliente de 100Mbps também reduzirá as transferências simultâneas para clientes de 1Gbps para menos de 100Mbps velocidades.
-
Ou conecte clientes de 100 Mbps a um switch de classe empresarial com buffers muito maiores. Essa é uma solução que usei. Tenho um switch "3Com SuperStack 3 3300 SM" de 10 anos com uma porta Ethernet MTB-B de 1000Base-SX de fibra ótica. Comprei um módulo mini-Gbic Cisco 1000BASE-SX (MGBSX1) com porta LC para meu switch gigabit Linksys e cabo de fibra multimodo LC / MT-RJ (cerca de US $ 150 para ambos) e conectei todos os 100Mbps clientes para este switch 3com. Também habilitei o controle de fluxo, mas ele não deve causar lentidão com nenhum cliente de 100 Mbps conectado.
Obrigado a SpacemanSpiff , cujos comentários ajudaram a resolver isso.