Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Data Plane Development Kit (DPDK) in Azure offre un framework più veloce per l'elaborazione di pacchetti dello spazio utente per applicazioni che richiedono prestazioni elevate. Questo framework ignora lo stack di rete del kernel della macchina virtuale.
La tipica elaborazione dei pacchetti mediante lo stack di rete del kernel è gestita da interrupt. Quando l'interfaccia di rete riceve pacchetti in ingresso, si verifica un interrupt del kernel per elaborare il pacchetto e un cambio di contesto dallo spazio kernel allo spazio utente. DPDK elimina il cambio di contesto e il metodo gestito da interrupt privilegiando un'implementazione dello spazio utente tramite driver in modalità poll per l'elaborazione rapida dei pacchetti.
DPDK è costituito da set di librerie dello spazio utente che consentono l'accesso a risorse di livello inferiore. Queste risorse possono includere hardware, core logici, gestione della memoria e driver in modalità poll per le schede dell'interfaccia di rete.
DPDK può essere eseguito nelle macchine virtuali di Azure che supportano più distribuzioni del sistema operativo. DPDK fornisce una differenziazione delle prestazioni chiave nel gestire le implementazioni di virtualizzazione delle funzioni di rete. Queste implementazioni possono presentarsi sotto forma di appliance virtuali di rete (NVA), ad esempio router virtuali, firewall, VPN, servizi di bilanciamento del carico, framework Evolved Packet Core e applicazioni di tipo Denial of Service (DoS).
Un elenco delle istruzioni di installazione per DPDK nelle macchine virtuali MANA è disponibile qui: Scheda di rete di Microsoft Azure (MANA) e DPDK in Linux
Vantaggio
Più pacchetti al secondo (PPS): ignorando il kernel e acquisendo il controllo dei pacchetti nello spazio utente viene ridotto il numero di cicli grazie all'eliminazione dei cambi di contesto. Viene anche migliorata la frequenza dei pacchetti elaborati al secondo nelle macchine virtuali Linux di Azure.
Versioni minime dei sistemi operativi supportati
Sono supportate le distribuzioni seguenti in Azure Marketplace:
| Sistema operativo Linux | Versione del kernel |
|---|---|
| Ubuntu 18.04 | 4.15.0-1014-azure e versioni successive |
| SLES 15 SP1 | 4.12.14-8.19-azure+ |
| RHEL 7.5 | 3.10.0-862.11.6.el7.x86_64 e versioni successive |
| Debian 10 | 4.19.0-1-cloud+ |
Le versioni annotate sono i requisiti minimi. Sono supportate anche le versioni più recenti.
Un elenco dei requisiti per DPDK nelle macchine virtuali MANA è disponibile qui: Scheda di rete di Microsoft Azure (MANA) e DPDK in Linux
Supporto per kernel personalizzati
Per qualsiasi versione del kernel Linux non elencata, vedere Patches for building an Azure-tuned Linux kernel (Patch per la compilazione di un kernel Linux ottimizzato per Azure). Per altre informazioni, è anche possibile contattare aznetdpdk@microsoft.com.
Supporto di area
Tutte le aree di Azure supportano DPDK.
Prerequisiti
La rete accelerata deve essere abilitata su una macchina virtuale Linux. La macchina virtuale deve avere almeno due interfacce di rete, con un'interfaccia per la gestione. L'abilitazione della rete accelerata nell'interfaccia di gestione non è consigliata. Informazioni sulle modalità per Creare una macchina virtuale Linux con rete accelerata abilitata.
Inoltre, DPDK usa verbi RDMA per creare code di dati nella scheda di rete. Nella macchina virtuale verificare che i driver del kernel RDMA corretti siano caricati. Possono essere mlx4_ib, mlx5_ib o mana_ib a seconda delle dimensioni delle macchine virtuali.
Installare manualmente DPDK (scelta consigliata)
Le istruzioni di installazione di DPDK per le macchine virtuali MANA sono disponibili qui: Scheda di rete di Microsoft Azure (MANA) e DPDK in Linux
Installare le dipendenze di compilazione
RHEL7.5
yum -y groupinstall "Infiniband Support"
sudo dracut --add-drivers "mlx4_en mlx4_ib mlx5_ib" -f
yum install -y gcc kernel-devel-`uname -r` numactl-devel.x86_64 librdmacm-devel libmnl-devel meson
Compilare e installare DPDK manualmente
Scaricare il DPDK più recente. La versione 22.11 LTS o successiva è consigliata per Azure.
Generare la configurazione predefinita con
meson builddir.Eseguire la compilazione con
ninja -C builddir.Installare con
DESTDIR=<output folder> ninja -C builddir install.
Configurare l'ambiente di runtime
Dopo il riavvio, eseguire i comandi seguenti una sola volta:
Hugepage
- Configurare le hugepage eseguendo il comando seguente, una volta per ogni numanode:
echo 1024 | sudo tee /sys/devices/system/node/node*/hugepages/hugepages-2048kB/nr_hugepagesCreare una directory per il montaggio con
mkdir /mnt/huge.Montare le hugepage con
mount -t hugetlbfs nodev /mnt/huge.Verificare che le hugepage siano riservate con
grep Huge /proc/meminfo.L'esempio precedente riguarda 2M di grandi pagine. È anche possibile usare pagine enormi 1G.
Nota
È possibile modificare il file di grub in modo che le hugepage vengano riservate in fase di avvio seguendo le istruzioni per DPDK. Le istruzioni sono disponibili in fondo alla pagina. Quando si usa una macchina virtuale Linux di Azure, modificare invece i file in /etc/config/grub.d per riservare le hugepage dopo i riavvii.
Indirizzi MAC e IP: usare
ifconfig –aper visualizzare l'indirizzo IP e MAC delle interfacce di rete. Le interfacce di rete VF e NETVSC hanno lo stesso indirizzo MAC, ma solo NETVSC ha un indirizzo IP. Le interfacce VF sono in esecuzione come subordinate delle interfacce NETVSC.Indirizzi PCI
Eseguire il comando
ethtool -i <vf interface name>per visualizzare l'indirizzo PCI da usare per VF.Se per eth0 è abilitata la funzionalità di rete accelerata, verificare che testpmd non acquisisca per errore il dispositivo PCI VF per eth0. Se l'applicazione DPDK ha accidentalmente acquisito l'interfaccia di rete di gestione che causa la perdita della connessione SSH, usare la console seriale per terminare l'applicazione DPDK. È anche possibile usare la console seriale per arrestare o avviare la macchina virtuale.
Caricare ibuverbs a ogni riavvio con
modprobe -a ib_uverbs. Solo per SLES 15, caricare anche mlx4_ib conmodprobe -a mlx4_ib.
Master PMD
Le applicazioni DPDK devono essere eseguite sul pmD master esposto in Azure. Se l'applicazione viene eseguita direttamente tramite PMD VF, non riceverà tutti i pacchetti destinati alla VM, perché alcuni verranno visualizzati tramite l'interfaccia sintetica. DPDK supporta due tipi di PMD master: PMD NetVSC e PMD failsafe. Un pmD master garantisce che l'applicazione riceva tutti i pacchetti destinati. Assicura inoltre che l'applicazione continui a essere in esecuzione in modalità DPDK su MASTER PMD, anche se il VF viene revocato quando l'host viene gestito.
NetVSC PMD
NetVSC è il PMD consigliato per l'esecuzione come PMD master in Azure. Garantisce che l'applicazione riceva tutti i pacchetti destinati. Assicura inoltre che l'applicazione rimarrà in esecuzione in modalità DPDK, anche se VF viene revocato quando l'host viene servito. Per altre informazioni su come usare e configurare NETVSC PMD, vedere (https://doc.dpdk.org/guides/nics/netvsc.html).
Operatore alternativo PMD
Nota: l'esecuzione con PMD failsafe non è consigliata in Azure. Se la versione DPDK è 22.11 LTS o successiva, è consigliabile usare NETVSC PMD.
In alternativa, è possibile eseguire un'applicazione DPDK sul pmDD failsafe. Per altre informazioni sul PMD failsafe, vedere Libreria di driver in modalità di polling non riuscita.
Eseguire testpmd
Per eseguire testpmd in modalità root, usare sudo prima del comando testpmd.
Basic: verifica dell'integrità, inizializzazione dell'adattatore di tipo operatore alternativo
Eseguire i comandi seguenti per avviare un'applicazione testpmd a porta singola:
testpmd -w <pci address from previous step> \ -- -i \ --port-topology=chainedEseguire i comandi seguenti per avviare un'applicazione testpmd dual port:
testpmd -w <pci address nic1> \ -w <pci address nic2> \ -- -i
Dopo l'avvio, eseguire show port info all per controllare le informazioni relative alle porte. Dovrebbero essere visualizzate una o due porte DPDK net_netvsc.
- Usare
start <port> /stop <port>per avviare il traffico.
I comandi precedenti avviano testpmd in modalità interattiva, consigliata per provare i comandi testpmd.
Basic: ricevitore singolo/mittente singolo
I seguenti comandi stampano periodicamente i pacchetti per statistiche al secondo:
Sul lato TX, eseguire il comando seguente:
testpmd \ -l <core-list> \ -n <num of mem channels> \ -w <pci address of the device you plan to use> \ -- --port-topology=chained \ --nb-cores <number of cores to use for test pmd> \ --forward-mode=txonly \ --eth-peer=<port id>,<receiver peer MAC address> \ --stats-period <display interval in seconds>Sul lato RX, eseguire il comando seguente:
testpmd \ -l <core-list> \ -n <num of mem channels> \ -w <pci address of the device you plan to use> \ -- --port-topology=chained \ --nb-cores <number of cores to use for test pmd> \ --forward-mode=rxonly \ --eth-peer=<port id>,<sender peer MAC address> \ --stats-period <display interval in seconds>
Quando si eseguono i comandi precedenti in una macchina virtuale, modificare IP_SRC_ADDR e IP_DST_ADDR in app/test-pmd/txonly.c per la corrispondenza all'indirizzo IP effettivo delle macchine virtuali prima della compilazione. In caso contrario, i pacchetti vengono eliminati prima di raggiungere il destinatario.
Avanzata: mittente singolo/server d'inoltro singolo
I seguenti comandi stampano periodicamente i pacchetti per statistiche al secondo:
Sul lato TX, eseguire il comando seguente:
testpmd \ -l <core-list> \ -n <num of mem channels> \ -w <pci address of the device you plan to use> \ -- --port-topology=chained \ --nb-cores <number of cores to use for test pmd> \ --forward-mode=txonly \ --eth-peer=<port id>,<receiver peer MAC address> \ --stats-period <display interval in seconds>Sul lato FWD, eseguire il comando seguente:
testpmd \ -l <core-list> \ -n <num of mem channels> \ -w <pci address NIC1> \ -w <pci address NIC2> \ -- --nb-cores <number of cores to use for test pmd> \ --forward-mode=io \ --eth-peer=<recv port id>,<sender peer MAC address> \ --stats-period <display interval in seconds>
Quando si eseguono i comandi precedenti in una macchina virtuale, modificare IP_SRC_ADDR e IP_DST_ADDR in app/test-pmd/txonly.c per la corrispondenza all'indirizzo IP effettivo delle macchine virtuali prima della compilazione. In caso contrario, i pacchetti vengono eliminati prima di raggiungere il server d'inoltro. Non è possibile avere un terzo computer che riceve traffico inoltrato, perché il server d'inoltro testpmd non modifica gli indirizzi di livello 3, a meno che non si apportano alcune modifiche al codice.
Installare DPDK tramite il pacchetto di sistema (scelta non consigliata)
sudo yum install -y dpdk