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?
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
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. –