Existem vários fatores. A primeira é a máquina que você está usando. Se windows e linux estiverem em hardware diferente, a medição não tem sentido.
Claro que você tem que medir o ping médio após muitas tentativas, os primeiros pings podem incluir outros atrasos.
Os pacotes precisam passar pelo kernel (pilha de ip e driver de dispositivo de rede) e, em seguida, entrar novamente quando a resposta é recebida. Nesse estágio, pode haver muitos fatores que influenciam a diferença:
- o que é realmente cronometrado: duas implementações diferentes de ping podem fazer mais ou menos trabalho padronizado entre iniciar o cronômetro e realmente enviar a coisa (e o mesmo no caminho de recepção).
- existência de filtros: firewalls e outros, podem introduzir etapas extras granularidade do clock de
- : quão finamente os processos são multiplexados pelo kernel? Mesmo entre diferentes níveis de linux, o tamanho do tick pode variar muito, ou o kernel pode ser mais ou menos tickless (executando sem interrupções se houver apenas um processo em execução).
- gerenciamento de processos: com que rapidez e de que maneira o processo é despertado quando o pacote volta? O Windows e o Linux fazem isso de maneiras completamente diferentes.
- O que o resto do sistema está fazendo? Há IO pesado acontecendo ao mesmo tempo que tornaria o kernel ocupado? Existe uma mudança se você
nice
o ping para uma prioridade mais alta? - Escala de frequência: o gerenciamento da frequência da CPU pode variar muito: o Linux tem muitos "governadores" que fazem as coisas de maneira diferente. Então, é possível que o Linux esteja rodando com menor velocidade de clock quando ocioso - também, um momento de comutação de frequência tem latência extra.
- A implementação e compilação da
ping
utility também pode ter alguns efeitos menores (embora a latência in-kernel seja provavelmente a principal contribuição).
O kernel Linux é conhecido por atingir o limite de taxa de transferência de rede em nível de 10 gigabits . Então ... não deve fazer muita diferença a velocidades de microssegundos. É provável que seja uma questão de agendamento, latências do sistema operacional e assim por diante. E a latência de ping não representa o desempenho real sob carga. Você não deve tomar essa medida como um fator quando você decide alguma coisa. Você precisa de muitos outros benchmarks, particularmente sob cargas realistas.
E finalmente, as configurações do kernel do linux podem influenciar bastante o desempenho - os projetos em tempo real precisam de um kernel dedicado para executar em um nível ideal. Você encontrará mais variações entre diferentes configurações (em ambas as plataformas) do que encontrou nessas duas tentativas.