Revision Three: Compressed Block Send

In dieser Version der Anwendung wird ein komprimierter Blockversand der Daten verwendet. Diese Änderung führt zu einer erheblichen Leistungsverbesserung.

BYTE tmp[3*ROWS*COLS];
FIELD Old = Map;
ComputeNext( Map );
n=Compact(Map,Old,tmp);
bind( s, ... );
connect( s, ... );
send( s, tmp, 3*n );
//can't do recv(s,tmp,n)
for(int i=0; i < n; )
    recv( s, tmp+i, n-i );
closesocket( s );

Änderungen in dieser Version

Diese Version spiegelt die folgenden Änderungen wider:

  • Zellenupdates werden nicht mehr serialisiert.
  • Da ein Block send verwendet wird, wird die Anwendung nicht mehr überschattet.
  • Die Datenkomprimierung wird verwendet, was zu einer weniger fetten Anwendung führt.

Es besteht weiterhin ein Problem mit dieser Version der Anwendung. das Deadlockrisiko besteht, da ein großer Sendesenden ohne Empfang verwendet wird. Der Server sendet ein Byte für alle 3 empfangenen Bytes. Dies kann zu einem Deadlock führen, wenn die Empfangspuffergröße für diese Beispielanwendung kleiner als 1.000 Bytes ist.

Wichtige Leistungsmetriken

Die folgenden Leistungsmetriken werden in Roundtripzeit (ROUND Trip Time, RTT), Goodput und Protokollmoverhead ausgedrückt. Eine Erläuterung dieser Begriffe finden Sie im Thema Netzwerkterminologie.

Diese Version spiegelt die folgenden Leistungsmetriken wider:

  • Zellenzeit – .002 * RTT
  • Goodput – 2 Kilobyte/RTT
  • Protokollaufwand – 14 %

6 % des Mehraufwands von 14 % stammen aus den Ethernet-Headern, und die anderen 8 % stammen aus dem Start und der Entfernung der Verbindung.

Verbessern einer langsamen Anwendung

Netzwerkterminologie

Baselineversion: Eine Anwendung mit sehr schlechter Leistung

Revision 1: Bereinigen des Offensichtlichen

Revision 2: Neugestaltung für weniger Verbindungen

Zukünftige Verbesserungen