Tra gli strumenti più popolari per monitorare le prestazioni di rete c’è sicuramente iperf3. Si tratta di un software open source per il benchmarking della rete che funziona in modalità client-server: è cioè necessario eseguire un’istanza di iperf3 come server su una macchina e un’altra istanza come client, su un altro dispositivo, per avviare le misurazioni.
Una volta stabilita la connessione, iperf3 inizia a trasferire dati dal client al server (e viceversa, se necessario). Misura la velocità di trasferimento dati, registra eventuali errori di trasmissione e fornisce statistiche dettagliate sulle prestazioni della rete.
Alla fine della sessione di misurazione, iperf3 fornisce un rapporto completo delle prestazioni della rete, inclusi parametri come la larghezza di banda media, la latenza, il jitter e così via: permette di realizzare uno speed test in locale, verificando eventuali anomalie.
Microsoft invita a non utilizzare iperf3 in Windows: queste le motivazioni
iperf3 è un software mantenuto da un’organizzazione chiamata ESnet (Energy Sciences Network). Microsoft ne sconsiglia l’utilizzo in ambiente Windows, innanzi tutto perché l’applicazione non effettua chiamate native utilizzando le API dell’azienda di Redmond ma soltanto chiamate Linux/POSIX.
La comunità di iperf3 utilizza Cygwin come livello di emulazione che permette il funzionamento dell’utilità su Windows. Tuttavia, ciò comporta potenziali problemi di compatibilità e prestazioni, poiché non tutte le funzionalità di iperf3 sono supportate in Windows. L’emulazione stesso può essere responsabile di cali di performance, soprattutto quando si devono verificare parametri sensibili alla latenza.
James Kehr, del team Windows Networking Microsoft, racconta che anche gli sviluppatori di iperf3 non raccomandano l’uso della loro applicazione in Windows. Mentre l’azienda di Redmond suggerisce di ripiegare, al posto di iperf3, su strumenti alternativi come ntttcp (Windows NT Test TCP) e ctsTraffic. Entrambe, infatti, sono programmi Windows nativi che assicurano prestazioni migliori rispetto a iperf3 e risultati attendibili.
Come utilizzare ntttcp
ntttcp è un tool nativo Windows che consente l’esecuzione di test di rete sintetici tra diverse piattaforme, inclusi Windows e Linux. I test di rete sintetici sono progettati per simulare e valutare le prestazioni di una rete in condizioni controllate e riproducibili. Utilizzano strumenti software o hardware per generare traffico di rete in maniera artificiosa e misurare vari parametri, come la larghezza di banda, la latenza, la perdita di pacchetti e altre metriche di prestazione.
Microsoft fornisce un paio di esempi per avviare il server e il client ntttcp ed eseguire test di trasferimento dati su una determinata connessione, con parametri specifici per controllare la durata della prova, la lunghezza del buffer e altri dettagli.
Per attivare il modulo server di ntttcp (il progetto è mantenuto su GitHub), si può usare la sintassi seguente:
ntttcp -r -m 1,*,<IP> -t 60
La prima opzione -r
specifica l’avvio del server ntttcp; -m 1,*,<IP>
indica il numero di thread utilizzati (in questo caso, un solo thread); l’asterisco (*) esprime nessuna affinità CPU specifica ovvero che il processo può essere eseguito su qualunque core. L’ultima opzione -t 60
indica la durata del test, espressa in secondi.
Lato client, il seguente comando invierà il traffico di rete verso l’IP del server ntttcp specificato:
ntttcp -s -m 1,*,<IP> -l 128K -t 60
Il riferimento a -l 128K
imposta la lunghezza del buffer utilizzato per i trasferimenti di rete. In questo caso, il buffer è impostato a 128 KB.
Come utilizzare ctsTraffic
Un’utilità molto simile a ntttcp è ctsTraffic, anch’essa consigliata da Microsoft. Pure disponibile su GitHub, ctsTraffic utilizza anch’essa un approccio client-server basato su riga di comando.
Per avviare il modulo server, ad esempio, l’azienda di Redmond suggerisce la seguente sintassi:
ctstraffic.exe -listen:* -Buffer:"$(128KB)" -Transfer:"$(1TB)" -ServerExitLimit:1 -consoleverbosity:1 -TimeLimit:60000
L’istruzione proposta specifica che il server ctsTraffic sia posto in ascolto su tutte le interfacce di rete disponibili, imposta la lunghezza del buffer a 128 KB, trasferire 1 TB di dati, chiede di arrestare il server dopo un solo trasferimento e configura la modalità di verbosità della console per visualizzare i dettagli durante l’esecuzione del test. Il limite di tempo per l’esecuzione del test è fissato a 60.000 millisecondi, ovvero 60 secondi.
Lato client, invece, si può utilizzare il comando seguente:
ctstraffic.exe -target:<IP> -Connections:1 -Buffer:"$(128KB)" -Transfer:"$(1TB)" -Iterations:1 -consoleverbosity:1 -TimeLimit:60000
Il riferimento al target, permette di indicare l’indirizzo IP del server a cui inviare i dati. Successivamente si specificano il numero di connessioni TCP simultanee che il client utilizzerà per inviare dati al server, in questo caso, una. Le altre opzioni sono sovrapponibili a quelle già viste in precedenza.
In generale, i risultati più attendibili sembrano prodotti da un tool come ntttcp.