Lorsque je fais traceroute d'un Solaris m/c à un autre en utilisant une interface réseau de 10 gig, il faut 0,073 ms pour des paquets de 40 octets.Calcul du temps de trajet aller-retour de Tcp en utilisant java
Lorsque je fais la même chose en java, le temps est beaucoup plus long. Il est plus long même après 10 itérations. Quelle pourrait être la raison ?
Java: Sender (Snippet)
Socket sendingSocket = new Socket(address, RECEIVER_PORT);
sendingSocket.setTcpNoDelay(true);
OutputStream outputStream = sendingSocket.getOutputStream();
byte[] msg = new byte[64]; // assume that it is populated.
for (int i = 0; i < 10000; i++) {
long start = System.nanoTime();
outputStream.write(msg,0,64);
outputStream.flush();
inputStream.read(msg,0,64); // inputStream is initialized like outputstream
long end = System.nanoTime();
}
Il prend beaucoup plus 69 Millis et il ne dépend même pas de la taille d'octets. Même si je le réduis pour dire un tableau de 1 byte, cela prend encore 69 millis. Un commentaire/suggestion?
Autre observation: 1. OutputStream.write et affleurent ne prend que 6 micros. 2. De même, de l'autre côté TCPReceiver qui reçoit et écrit en arrière, il ne prend que 6 micros.
Solution: Merci à tous ceux que vous avez répondu pour cette requête. J'ai trouvé que c'était dû à la taille du tampon socket:
Taille de tampon par défaut définie sur solaris m/c.
Received Taille du tampon 49152.
Envoi Taille du tampon 7552.
I augmenté la taille de la mémoire tampon de prise et la performance correspond presque traceroute.
Alors que je suis d'accord avec votre comparaison STMP et TCP sont deux choses différentes, 65 millis est beaucoup trop dans le cas de TCP. – 2sb
@ 2sb vous envoyez également beaucoup plus de données dans le cas TCP, presque deux fois plus. – EJP
@ 2sb: Je suis d'accord - 65 millis ne semble pas raisonnable. C'est pourquoi je voudrais commencer avec un tcpdump pour aider à éliminer certaines causes potentielles. –