Antes de executar seu teste, eu me certificaria de que a JVM esteja aquecida e definida para uma prioridade em tempo real. Você deve conseguir uma latência abaixo de 0,1 ms além da latência da rede.
Estamos tentando melhorar a latência média do aplicativo proxy Java.
O aplicativo Java recebe uma mensagem de um cliente e faz proxy para um servidor necessário.
O protocolo é binário, assíncrono.
A topologia é:
Client (1) - Java proxy (2) - Server (3)
O fluxo de chamadas é
(1)-(2)-(3)-(2)-(1)
O requisito é uma sobrecarga de latência média de 2 ms para um salto de uma direção para o proxy Java.
Percebemos que, se aumentarmos o número de clientes, a sobrecarga de latência diminuirá linearmente.
Vamos dizer,
1 client -> Java proxy latency overhead = 6 ms.
2 clients -> Java proxy latency overhead = 3 ms.
4 clients -> Java proxy latency overhead = 1.5 ms.
Por outro lado, devemos cumprir o requisito de latência, mesmo com um cliente.
O mesmo comportamento que observamos, se substituirmos a implementação de proxy do Java pela implementação do Erlang.
Podemos fazer alguma coisa para o ajuste de baixo nível do SO?
Host proxy Java é 2 Nehalem CPU X5550 2.67GHz, 16 hw threads no total; Servidor Red Hat Enterprise Linux versão 5.6
Antes de executar seu teste, eu me certificaria de que a JVM esteja aquecida e definida para uma prioridade em tempo real. Você deve conseguir uma latência abaixo de 0,1 ms além da latência da rede.
O seu proxy Java está bloqueando enquanto aguarda a resposta do servidor? Isso explicaria as vezes que você está vendo.