iperf3 in multi-threading per sfruttare al meglio 10GbE: una guida completa

Ultimo aggiornamento: 08/10/2025
Autore: Isaac
  • Aggiornare a iperf3 ≥ 3.16 e utilizzare 4–8 thread (-P) per saturare 10GbE.
  • Controllare RSS/offload e che la scheda di rete non sia limitata da PCIe degradato.
  • Selezionare bidirezionale (-d) e regolare window/zero-copy se la CPU è limitata.

Test con multithreading iperf3 per 10GbE

Nelle reti 10GbE sempre più diffuse nelle apparecchiature domestiche e professionali, Il collo di bottiglia di solito si sposta dalla scheda alla CPUPertanto, ottimizzare iperf3 per sfruttare più thread può fare la differenza tra rimanere a 6-8 Gbps o quasi saturare il collegamento. In questa guida, vedrete, con esempi concreti, come sfruttare la modalità multithreading, quali versioni sono necessarie e quali insidie ​​comporta. hardware evitare per non perdere prestazioni.

Oltre all'esecuzione di un comando, Il successo dipende dalla versione di iperf3, dalla configurazione del sistema, driver della NIC e persino della larghezza del collegamento PCIe. Vedrai casi pratici (da un mini PC con Intel N100 fino a un server con TrueNAS e Proxmox), parametri chiave iperf3, best practice per l'interpretazione dei risultati e una checklist diagnostica quando il contatore si blocca.

Che cos'è iperf3 e perché è importante in 10GbE?

iperf3 è uno strumento open source per misurare la larghezza di banda tra due computer utilizzando TCP, UDP o SCTP. È multipiattaforma (Windows, Linux, macOS, BSD, tra gli altri) e il suo codice è stato riscritto da zero rispetto a iperf2 per semplificarlo, aggiungere output JSON e diventare una base modulare più facile da integrare in altri programmi.

Rispetto ad altre utility, Consente di regolare le dimensioni della finestra TCP, definire la quantità di dati, selezionare il protocollo e generare più connessioni simultanee.In UDP, misura jitter e perdita, supporta il multicast e può impostare il throughput target; in TCP, offre opzioni come zero-copy, controllo della congestione e output di intervallo dettagliato.

Sui collegamenti da 10 Gbps o superiori, una singola connessione TCP potrebbe non essere sufficiente a saturare il collegamento; distribuire il carico su più thread e, a partire da iperf3 3.16, sfruttare più facilmente il multithreading aiuta a riempire il tubo quando la CPU o lo stack di rete sono limitanti.

Versioni: requisiti minimi e compatibilità

Per prima cosa, controlla la versione su entrambe le estremità con iperf3 -v. Dalla versione 3.16 iperf3 semplifica il multithreading, riducendo la necessità di Tricks y comandi Funzionalità aggiuntive comuni negli ambienti a 40 Gbps e superiori. Se la tua distribuzione è in ritardo (in genere in hypervisor o appliance), compilare la versione più recente è solitamente il modo più veloce; e controlla Tipi di rete in Hyper‑V, VirtualBox e VMware del tuo ambiente.

Un esempio reale: in un ambiente con OpenWrt/QWRT e Proxmox VE 8.3, OpenWrt aveva già una versione recente, ma Proxmox era obsoleto.Il problema è stato risolto compilando iperf 3.18 dal codice sorgente sull'host Proxmox e da quel momento in poi il multithreading è stato abilitato normalmente.

Saturazione di 10 GbE con flussi multipli in iperf3

Preparazione dell'ambiente 10GbE: CPU, NIC, driver e PCIe

Per raggiungere picchi prossimi a 9.8–9.9 Gbps, I cavi Cat6A e uno switch 10G non sono sufficienti.Bisogna guardare più in basso: versione del driver, RSS (Receive Side Scaling), coalescenza degli interrupt, offload (TSO/GSO/GRO/LRO) e, cosa più importante, collegamento PCIe della scheda.

Su Windows 10/11, in particolare con schede di rete 10G come ASUS XG-C100C, Aggiorna il driver, abilita RSS e controlla se SMB Multichannel è attivo. y controlla la connessione di rete in WindowsNei trasferimenti di file con NAS (ad esempio QNAP con QuTS Hero), la velocità dipenderà anche dalle prestazioni del immagazzinamento e la CPU NAS; è normale vedere ~6–8 Gbps se RAID o ZFS non lo supportano, mentre iperf3 (da memoria a memoria) può avvicinarsi a 10 GbE.

  Come proteggere con password i file compressi in Windows 11

Su Linux e BSD, Verificare che la scheda negozi la larghezza PCIe correttaUn caso tipico: un client è rimasto bloccato a ~3.5 Gbps nonostante avesse 10 GbE perché lo slot era degradato a x1 a 5 GT/s. Il comando lspci -vv ha mostrato "LnkSta: Velocità 5GT/s, Larghezza x1 (degradata)". Dopo aver regolato il BIOS Per forzare la porta a x16, la velocità è aumentata a circa 9.84 Gbps.

Modalità multithreading in iperf3: comandi essenziali

Il modello di test di base è semplice: avviare il server con iperf3 -s da un lato ed eseguire il client dall'altro. Da qui, aggiungi il parallelismo:

  • Flussi TCP multipli: iperf3 -c IP_SERVIDOR -P 4 genera 4 connessioni parallele. Regola -P alla CPU/NIC; su 10GbE, in genere sono sufficienti 4–8.
  • Bidirezionale simultaneo: iperf3 -c IP_SERVIDOR -P 4 -d misura il caricamento e lo scaricamento contemporaneamente, utile per convalidare il full duplex.
  • Direzione inversa (traffico dal server al client): -R.
  • Durata: -t 60 per test di 60 s; escludere inizia con -O 3 per evitare l'avvio lento del TCP.
  • Copia zero: -Z riduce il carico della CPU su Linux.
  • Affinità CPU: -A imposta l'affinità (utile per distribuire i thread su core diversi).
  • Associazione all'interfaccia: -B 10.0.0.2 scegliere esplicitamente l'IP/IF in uscita (vedere Come elencare le interfacce di rete in CMD).

Se lavori con UDP, controlla il flusso con -b e verificare la presenza di perdite/jitter; sebbene per saturare 10GbE e misurare lo stack di sistema, TCP è solitamente il punto di partenza.

Caso di studio 1: Mini PC Intel N100 con due 10GbE

Scenario: due iKOOCORE R2 Max (uno senza ventola con OpenWrt/QWRT come server e un altro con Proxmox VE come client), entrambi con doppia CPU Intel N100 da 10 GbE e 4 coreNella prima misurazione è stato osservato un upload di ~9.41 Gbps, ma il download è rimasto a ~8.6 Gbps e il test bidirezionale è risultato peggiore.

HTOP ha mostrato la traccia: un singolo core al 100% mentre il resto era inattivoSebbene l'utilizzo totale della CPU fosse di circa il 30%, un singolo thread saturo limitava la velocità effettiva. Per risolvere il problema, il server è stato avviato normalmente (iperf3 -s) e nel client è stato aggiunto -P 4 per aprire 4 flussi.

L'output, con intervalli di 10 s e quattro thread, è più dettagliato, ma La cosa importante è che è stato raggiunto il valore obiettivo: ~9.41 GbpsNel test full duplex con -d, le somme hanno raggiunto una media di circa 9.40 Gbps in entrambe le direzioni per un minuto, confermando che la CPU stava già distribuendo il carico su più thread e la NIC stava saturando il collegamento.

Nota pratica: se la versione del client è vecchia (come nel caso di Proxmox), la compilazione di iperf 3.18 ha risolto il divario di prestazioni e ha fornito supporto per le opzioni recenti sul lato che ne aveva più bisogno.

Caso di studio 2: TrueNAS + Proxmox e il collo di bottiglia PCIe

Configurazione: server con TrueNAS-13.0-U6 (FreeBSD 13.1) su schede Supermicro x8/x9, Doppia CPU Intel Westmere E5645 e scheda di rete Chelsio T420-CR; client con Proxmox VE 8.1.3 (Debian 12, kernel 6.5.11), Doppia CPU E5-2420 v2 e scheda di rete Chelsio T440-CRCablaggio diretto tramite DAC twinax tra host.

Il primo test ha fissato una media di circa 3.55 Gbps, con zero ritrasmissioni e una finestra di congestione stabile. La CPU non si è nemmeno preoccupata: utilizzo ~13–20% da parte di iperf3L'indizio decisivo è emerso osservando lo stato del collegamento PCIe: "LnkSta: Velocità 5 GT/s, Larghezza x1 (degradata)". Ciò significa che la scheda di rete da 10 G era collegata a una corsia PCIe x1 a 5 GT/s, limitando la velocità di trasmissione.

  8 esperti finanziari che sono donne di grande successo

Dopo aver esaminato il BIOS, ho trovato un'opzione critica nella Supermicro X9DBU-3F: Avanzate → Configurazione chipset → North Bridge → Configurazione IO integrata → IIO 1 IOU3 – Porta PCIePassando da "Auto" a "x16" la larghezza di banda e la velocità del collegamento sono state ripristinate. Il risultato: iperf3 ha raggiunto una velocità di ~9.84 Gbps sostenuta, con zero ritrasmissioni e un Cwnd stabile.

Inoltre, l'apertura di due client su due porte diverse (-p 5000 y -p 5001) Sono stati raggiunti ~19.58 Gbps aggregati. In quello scenario a doppia porta, due thread del Westmere funzionavano al 70-80% e l'Ivy Bridge al 30-40%., coerente con il caricamento multi-thread, spingendo il traffico attraverso due interfacce 10G contemporaneamente.

Interpretazione dei risultati: cosa cercare e come apportare modifiche

Nell'output di iperf3, Osserva la media finale e le linee di intervallo (predefinito 1 s; alcuni esempi utilizzano 10 s). Se si moltiplicano i MByte trasferiti per 8 e si dividono per il tempo dell'intervallo, il numero deve corrispondere ai Gbit/s riportati.

Se vedi un singolo filo saturo e il totale non aumenta, aumenta -P gradualmente (4, 6, 8) finché la velocità di trasmissione non smette di crescere. Se aumenta leggermente ma non raggiunge 9.8-9.9 Gbps, controllare gli offload e l'RSS. In caso di perdite o ritrasmissioni in TCP, valutare -w (finestra), -O (saltare Boot) e la qualità del collegamento fisico.

In due direzioni (-d), guarda le somme e il minuto per verificare che entrambe le direzioni siano vicine al massimo teorico. Grandi differenze tra velocità di upload e download indicano solitamente affinità, IRQ o RSS mal distribuiti.

Quando non è la CPU: diagnosi cronica di "6 Gbps"

Se si rimane a circa 6–7 Gbps (molto tipico nelle nuove configurazioni), scartare questi punti uno per uno:

  • Vecchia versione: I client 3.7 con server 3.16 funzionano, ma è consigliabile aggiornarli entrambi per beneficiare dei miglioramenti e delle correzioni del multithreading.
  • PCIe degradato: controlla larghezza e velocità con lspci -vv (Linux) o strumenti del fornitore; un x1 a 5 GT/s limita la NIC da 10G.
  • RSS disabilitato: senza condivisione degli interrupt, solo un core rimane al 100%. Su Windows, abilitalo nel driver; su Linux, seleziona ethtool -l e RPS/RFS.
  • Scarichi e coalescenza: TSO/GSO/GRO/LRO e la coalescenza degli interrupt riducono il carico della CPU; regolare con ethtool.
  • MTU/Jumbo frame: Non aumenta sempre la produttività, ma è utile con le CPU deboli. Abilitalo su entrambe le estremità e sullo switch, se lo supporta.
  • Immagazzinamento: Nei test NAS, il collo di bottiglia potrebbe essere RAID/ZFS; utilizzare iperf3 per isolare la rete (da memoria a memoria) e non il disco.
  • PMI e multicanale: Su Windows, SMB Multichannel velocizza i backup; se non è abilitato, i file verranno eseguiti più lentamente anche se iperf3 funziona a 9-10 Gbps.

È anche una buona idea regolare i buffer di sistema in Linux quando si cerca picchi sostenuti: sysctl net.core.rmem_max y net.core.wmem_max Le velocità elevate prevengono i colli di bottiglia dei socket; non sono obbligatorie per 10 GbE su LAN a bassa latenza, ma sono utili negli scenari più impegnativi.

Installazione rapida su Windows, Linux e macOS

Su Windows scarica i binari attendibili, decomprimili ed eseguili da CMD o PowerShell; Se Windows non rileva la scheda di rete, vedere la guida alle soluzioni. Aprire una console, andare alla cartella ed eseguire iperf3.exe -s o iperf3.exe -c IPSe stai eseguendo test su più subnet, assicurati di abilitare la porta 5201/TCP sul tuo firewall.

  Come usare TextCortex con Office: guida completa e vantaggi concreti

Su Linux/macOS, install è solitamente un comando: su Debian/Ubuntu sudo apt-get install iperf3, su RHEL/CentOS sudo yum install iperf3, su macOS con Homebrew brew install iperf3Se il tuo sistema è obsoleto, compilandolo dal codice sorgente otterrai la versione più recente.

Parametri utili di iperf3 (client e server)

Per controllare la sessione in dettaglio, Queste bandiere ti fanno risparmiare tempo:

  • generale: -p porta, --cport porta client (>=3.1), -f formato (k/K/m/M/g/G), -i intervallo, -F archivio, -B legamento, -V verboso, -J JSON, --logfile (>=3.1), -h aiuto, -v versione.
  • server: -s server, -D Diavolo, -I File PID.
  • Cliente: -c PI, --sctp SCTP, -u UDP, -b larghezza di banda, -t tempo metereologico, -n byte, -k pacchetti, -l lunghezza del buffer, -P fili, -R inversione, -w finestra TCP, -M MSS, -N TCP senza ritardo, -4/-6 IPv4/IPv6, -S TOSSE, -L Tag IPv6, -Z copia zero, -O salta lo stivale, -T qualificazione, -C algoritmo di congestione.

Ricordare -P si applica tramite flussoSe risolvi -b Se UDP o il sistema impongono limiti ai socket, ogni thread potrebbe raggiungere il proprio limite massimo; provare con meno thread ma meglio ottimizzati.

Impatto e limitazioni: cosa misura iperf3 (e cosa no)

iperf3 è ottimo per stressare la rete, ma può inondare la tua LAN se lo esegui in produzioneEvita test lunghi nelle ore di punta e coordinati con altri team se condividi le risorse. I loro modelli di traffico non sempre replicano i carichi applicativi reali.

Tra i suoi svantaggi, Non ha un'interfaccia grafica di serie, richiede parametri di ottimizzazione e non conserva la cronologia. Sebbene supporti molti protocolli, ci sono scenari (ad esempio, alcune funzionalità IPv6 o multiplexing specifici) in cui altri strumenti potrebbero essere più adatti.

Alternative quando hai bisogno di qualcos'altro

Se iperf3 non fa al caso tuo, Queste opzioni possono farti risparmiare:

  • iperf2: obsoleto ma utile per vecchie compatibilità; è presente la classica GUI (jperf).
  • netperf: molto potente per TCP/UDP e latenza, più tecnico da gestire.
  • nocciola: leggero per misurare la larghezza di banda/perdita senza troppe complicazioni.
  • bwping/bwping6: ICMP per stimare la larghezza di banda quando non è possibile aprire TCP/UDP (meno accurato).
  • CLI Speedtest / CLI Fast.com: per Internet pubblico; non sostituire iperf3 sulle LAN.

Se il tuo obiettivo è ottenere 10 GbE, inizia con iperf3 multithread: Controllare la versione ≥3.16, abilitare 4–8 thread, controllare il collegamento RSS e PCIe e controllare i driver/offloadCon questi requisiti minimi, sistemi modesti come un Intel N100 hanno raggiunto i 10 GbE (9.40-9.85 Gbps), mentre le configurazioni più vecchie sono passate da 3.5 a 9.8 Gbps dopo aver corretto un semplice x1 in PCIe. La chiave è distribuire il lavoro tra i core, evitare colli di bottiglia nascosti e leggere le metriche corrette per sapere quando regolare ciascun parametro.

Spiegazione del tipo di rete VirtualBox
Articolo correlato:
VirtualBox: guida completa ai tipi di rete, usi e trucchi