Revisione uno: pulizia dell'ovvio
In questa versione del programma di esempio sono state apportate alcune modifiche ovvie che porterà passi iniziali al miglioramento delle prestazioni. Questa versione del codice è lontano dall'ottimizzare le prestazioni, ma è un buon passaggio incrementale che consente l'esame degli effetti di approcci incrementalmente migliori.
Avviso
Questo esempio dell'applicazione offre prestazioni intenzionalmente scarse, per illustrare i miglioramenti delle prestazioni possibili con le modifiche apportate al codice. Non usare questo esempio di codice nell'applicazione; è solo a scopo di illustrazione.
#include <windows.h>
BYTE Set(row, col, bAlive)
{
SOCKET s = socket(...);
BYTE byRet = 0;
BYTE tmp[3];
tmp[0] = (BYTE)row;
tmp[1] = (BYTE)col;
tmp[2] = (BYTE)bAlive;
bind( s, ... );
connect( s, ... );
send( s, &tmp, 3 );
recv( s, &byRet, 1 );
closesocket( s );
return byRet;
}
Modifiche in questa versione
Questa versione riflette le modifiche seguenti:
- Rimosso SNDBUF=0. I ritardi di 200 millisecondi dovuti agli invii non memorizzati e ai ritardi dei riconoscimenti vengono rimossi.
- Rimosso il comportamento Send-Send-Receive. Questa modifica elimina i ritardi di 200 millisecondi dovuti a Nagle e ritardate interazioni ACK.
- Rimosso presupposto little-endian. I byte sono ora in ordine.
Problemi rimanenti
In questa versione i problemi seguenti rimangono:
- L'applicazione è ancora connetti pesante. Poiché i ritardi di 600+ millisecondi vengono rimossi, l'applicazione raggiunge ora la velocità sostenuta di 12 connessioni al secondo. Molte connessioni simultanee diventano ora un problema.
- L'applicazione è ancora grasso; le celle invariate vengono ancora propagate al server.
- L'applicazione mostra ancora scarsa streaming; Gli invii da 3 byte sono ancora piccoli.
- L'applicazione invia ora 2 byte/RTT, che equivale a 4 KB/s su Ethernet direttamente connesso. Questo non è troppo veloce, ma TIME-WAIT probabilmente causerà prima problemi.
- Il sovraccarico è inferiore al 99,3%, che non è ancora una buona percentuale di sovraccarico.
Metriche delle prestazioni chiave
Le metriche di prestazioni chiave seguenti sono espresse in Round Trip Time (RTT), Goodput e Protocol Overhead. Per una spiegazione di questi termini, vedere l'argomento Terminologia di rete .
Questa versione riflette le metriche delle prestazioni seguenti:
- Tempo cella: 2×RTT
- Goodput- 2 byte/RTT
- Sovraccarico del protocollo: 99,3%
Argomenti correlati