Precisa de latência ultra baixa, como minimizar?

3

Tenho várias máquinas do Windows Server 2008 R2 que agem como clientes e estão conectadas a outro servidor no mesmo datacenter. Eu não tenho acesso ao servidor. Eu preciso minimizar a latência entre os clientes e o servidor. Eles se comunicam via Macromedia Flash (Winsockets) e trocam comandos muito pequenos (20-30 bytes). A latência usual é de 200 a 400 microssegundos, mas a partir da minha experiência e de alguns testes (feitos com o MS Network Monitor) parece que no aplicativo Flash os tempos de resposta são muitas vezes vários milissegundos, no leaset, e isso não é devido ao software.

Eu suspeito que possa ser por causa do algoritmo Nagle ou ACKs atrasados. Eu tentei desativar ambos através do registro, mas parece não ter efeito no Server 2008 R2. Eu sei que posso ajustar o MTU e alguns outros valores com o registro: DefaultSendWindow, DefaultReceiveWindow, GlobalMaxTcpWindowSize, TcpWindowSize. Eu suponho que eu deveria tentar definir o buffer de envio para 0 e receber buffer para um valor grande, esta é a estratégia correta?

Eu tenho a CPU mais rápida que consegui, desativei a moderação de interrupção para a placa de rede, o que mais posso fazer para minimizar a latência? Até 100 microssegundos são importantes para mim.

    
por Yekoor 06.12.2014 / 00:53

2 respostas

4

Aqui está o documento de diretrizes de ajuste de desempenho da Microsoft para o Windows Server 2008 R2:

link

Existem 136 páginas de diretrizes de ajuste de desempenho nesse documento.

Você também pode obter algumas informações interessantes em support.microsoft.com/kb/214397/en-us

Você também pode tentar desativar a Plataforma de Filtragem do Windows, que geralmente não é recomendada, mas pode ajudar a reduzir a jornada de E / S pelo sistema operacional.

Você também tem uma enorme quantidade de tecnologias que a Microsoft criou no Windows, especificamente voltadas para redes de baixa latência, embora a maioria delas seja aprimoramentos específicos em 2012, não para 2008 R2:

link

  1. Data Center Bridging

  2. Data Center Transmission Control Protocol (DCTCP)

  3. Kernel Mode Remote Direct Memory Access (kRDMA)

  4. Network Interface Card (NIC) Teaming

  5. NetworkDirect

  6. Receive Segment Coalescing (RSC)

  7. Receive Side Scaling (RSS)

  8. Registered Input/Output (RIO) API Extensions

  9. Transmission Control Protocol (TCP) Loopback Optimization

  10. Low Latency Workloads Management and Operations

Mas há tanta coisa que você poderá fazer com ajustes de software. Simplesmente atualizando seu hardware para Infiniband / RDMA sobre Ethernet convergente , você obterá drásticas reduções na latência que nunca ser capaz de conseguir invertendo bits no registro do Windows.

Por fim, aqui está uma resposta mais rápida sobre o ACK atrasado . Eu não sei se isso é realmente seu problema ou não, mas:

Subkey: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\

Entry: TcpAckFrequency

Value Type: REG_DWORD, number Valid Range: 0-255 Default: 2
Description: Specifies the number of ACKs that will be outstanding before the delayed ACK timer is ignored. Microsoft does not recommend changing the default value without careful study of the environment.

If you set the value to 1, every packet is acknowledged immediately because there is only one outstanding TCP ACK as a segment is just received. The value of 0 (zero) is not valid and is treated as the default, 2. The only time the ACK number is 0 is when a segment is not received and the host is not going to acknowledge the data.

    
por 06.12.2014 / 02:09
2

Comece desativando o grande descarregamento de envio, a pilha da rede espere para enviar o pacote para encher o buffer, com a opção de enviar mais pacotes pequenos, mas ajuda para um aplicativo de alta velocidade.

    
por 06.12.2014 / 00:59