2016-11-01 2 views
0

Die Sendefunktion 3 ~ 4 Mikrosekunden in meinem Linux-Server läuft in 3.10 wie die folgenden showes kosten würde:TCP/IP-Latenz und Performance-Tuning senden

struct timeval tv1,tv2; 
gettimeofday(&tv1,NULL) ; 
send(fd,strsend,strlen(strsend),MSG_NOSIGNAL) ; 
gettimeofday(&tv2,NULL) ; 
printf("(%d)(%d)\n",tv1.tv_usec,tv2.tv_usec) ; 

Die strlen (strsend) 212 Bytes wäre, also kann ich 5 messages von strsend fusionieren und senden, anstatt 5 mal sendend, es enthält 212 * 5 = 1060 das ist unter MTU 1500, die sendlatenz ist viel besser als aufrufen 5 mal senden.

Ich möchte wissen, ob ich 10 Nachrichten zusammenführen und nur einmal senden kann ?!
in diesem Fall enthält es 212 * 10 = 2120 Bytes, was über MTU 1500 ist, Vielleicht würde die Latenz verbessert werden, da ich nur einmal sende, aber gibt es irgendeine Nebenwirkung dabei? Jeder Konfigurationsparameter von NIC wäre hilfreich, um die Division mit der niedrigsten Latenzzeit durchzuführen?! Wird die Peer-Seite der tcp/ip-Leistung beeinflusst?

Antwort

1

Sie sollten auf jeden Fall versuchen, so viele Informationen in einem einzigen Anruf zu send zu sammeln, wie Sie können. 2KB wird im Allgemeinen als absolutes Minimum betrachtet. Ansonsten senden Sie unter anderem sehr kleine Datagramme auf die Leitung und reduzieren die Netzwerkeffizienz.

+0

für die Nachrichten, die Paketgröße> 1460, würde mehr Latenz im Kernel auftreten? Schließlich muss es in 2 Pakete geteilt werden, bevor es im Kernel gesendet wird. – barfatchen

+0

Es gibt keine Möglichkeit, dies zu vermeiden, da sie größer als die maximale Größe sind, die in ein Datagramm passt. Zumindest müssen Sie nicht zweimal in den Code hinein- und hinausgehen, der die Daten verarbeitet. –