Condividi tramite


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%

Miglioramento di un'applicazione lenta

Terminologia di rete

Versione di base: un'applicazione con prestazioni molto scarse

Revisione 2: riprogettazione per meno connessioni

Revisione 3: Invio di blocchi compressi

Miglioramenti futuri