Poți obține o performanță de milioane de pachete pe secundă pe o mașină virtuală Proxmox prin configurarea unui bridge Open vSwitch (OVS) cu Data Plane Development Kit (DPDK). Soluția necesită activarea unor funcționalități hardware specifice, precum IOMMU, în BIOS-ul serverului și în configurația GRUB. Trebuie să instalezi pachetele necesare OVS și DPDK din depozitele Debian și să creezi manual un bridge activat pentru DPDK. Apoi, treci această conexiune de rețea de mare viteză direct către mașina ta virtuală.

Rețelistica virtuală standard din Proxmox este mai mult decât adecvată pentru majoritatea sarcinilor. Este stabilă, fiabilă și ușor de configurat. Totuși, pentru anumite sarcini de înaltă performanță, stiva de rețea standard a Linux poate deveni un blocaj. Aplicațiile care trebuie să proceseze un număr uriaș de pachete de rețea foarte rapid, cum ar fi un router virtual, un firewall de mare debit sau o aplicație de virtualizare a funcțiilor de rețea (NFV), pot împinge sistemul implicit la limitele sale. Acest ghid este actualizat pentru Proxmox VE 8.x, care se bazează pe Debian 12 "Bookworm".

Acest ghid oferă un tutorial detaliat, pas cu pas, pentru configurarea acestei arhitecturi de rețea avansate pe serverul tău Proxmox. Vom explica conceptele de bază ale OVS și DPDK în termeni simpli. Vei primi comenzile și configurațiile exacte necesare pentru a construi un mediu de rețea virtual capabil să gestioneze milioane de pachete pe secundă. Așa deblochezi întregul potențial de rețea al mediului tău de găzduire VPS.

Ce sunt Open vSwitch și DPDK?

Pentru a înțelege scopul, trebuie mai întâi să înțelegi uneltele. Open vSwitch și DPDK sunt două tehnologii separate care, atunci când sunt combinate, creează o cale de date incredibil de rapidă pentru mașinile tale virtuale.

Open vSwitch (OVS)

Gândește-te la bridge-ul Linux standard din Proxmox ca la un simplu sens giratoriu. Duce traficul de la punctul A la punctul B, dar nu este foarte inteligent. Open vSwitch este un comutator virtual programabil, bogat în funcționalități. Este ca și cum ai înlocui sensul giratoriu simplu cu un nod rutier masiv, pe mai multe niveluri, controlat inteligent. OVS oferă funcționalități avansate precum VLAN-uri, Calitatea Serviciului (QoS) și monitorizare detaliată a traficului, care nu sunt disponibile într-un bridge standard.

Data Plane Development Kit (DPDK)

DPDK este un set de biblioteci și drivere care permite procesarea extrem de rapidă a pachetelor. Într-un server normal, fiecare pachet de rețea trebuie să treacă prin kernel-ul Linux. Kernel-ul inspectează pachetul, decide unde trebuie să meargă și apoi îl trimite mai departe. Acest proces este sigur și fiabil, dar este și relativ lent din cauza comutării de context și a overhead-ului implicat. Acesta este "traficul urban" al căii de date a serverului tău.

DPDK creează o bandă expres dedicată. Permite unei aplicații din spațiul utilizatorului, cum ar fi Open vSwitch, să ocolească complet kernel-ul Linux și să comunice direct cu hardware-ul plăcii de rețea. Acest lucru elimină overhead-ul kernel-ului și permite o cale directă, neîntreruptă, pentru pachetele de rețea. Asta îți permite să procesezi milioane de pachete pe secundă în loc de sute de mii.

De ce ai avea nevoie de această configurație?

Această configurare avansată nu este pentru toată lumea. Este o configurație specializată pentru aplicații intensive din punct de vedere al rețelei. Ai folosi OVS cu DPDK dacă construiești:

  • Un router virtual de înaltă performanță: Dacă folosești o mașină virtuală pentru a rula software de rutare precum pfSense sau VyOS și trebuie să gestionezi trafic pentru o rețea mare la viteze de 10Gbps sau mai mari.
  • Un firewall virtual sau un sistem de detectare a intruziunilor (IDS): Aparatele de securitate care trebuie să inspecteze fiecare pachet care trece prin ele necesită o procesare extrem de rapidă a pachetelor pentru a nu deveni un blocaj.
  • Virtualizarea funcțiilor de rețea (NFV): Aceasta este practica de a rula servicii de rețea, precum load balancere și firewall-uri, ca mașini virtuale în loc de hardware dedicat. Acest lucru necesită o performanță I/O foarte ridicată.

Dacă scopul tău este să găzduiești un site web sau o aplicație standard, această configurație este probabil exagerată. Dar pentru sarcini grele de rețea, este o schimbare de joc.

Ghid de instalare și configurare pas cu pas

Pasul 1: Activează depozitele oficiale Debian Bookworm

Proxmox VE 8 se bazează pe Debian 12 (Bookworm). Pentru a instala pachetele necesare DPDK și OVS, trebuie mai întâi să te asiguri că depozitele oficiale Debian sunt activate pe gazda ta Proxmox. Deschide fișierul `/etc/apt/sources.list`.

sudo nano /etc/apt/sources.list

Adaugă următoarele linii în fișier. Acest lucru îi spune serverului tău unde să găsească pachetele oficiale pentru Bookworm și actualizările sale de securitate.

deb http://deb.debian.org/debian bookworm main
deb-src http://deb.debian.org/debian bookworm main

deb http://security.debian.org/debian-security bookworm-security main
deb-src http://security.debian.org/debian-security bookworm-security main

deb http://deb.debian.org/debian bookworm-updates main
deb-src http://deb.debian.org/debian bookworm-updates main

Pasul 2: Activează IOMMU și hugepages

Acesta este un pas critic. IOMMU (Input-Output Memory Management Unit) este o caracteristică hardware care permite sistemului de operare gazdă să ofere unei mașini virtuale acces direct la o componentă hardware fizică, cum ar fi o placă de rețea. Acest lucru se numește passthrough. DPDK necesită acest nivel de acces direct. Hugepages sunt blocuri mari și contigue de memorie pe care DPDK le folosește pentru bufferele sale de memorie de înaltă performanță.

Mai întâi, trebuie să te asiguri că IOMMU (adesea numit VT-d pentru Intel sau AMD-Vi pentru AMD) și SR-IOV sunt activate în BIOS-ul serverului tău. Apoi, editează fișierul de configurare al bootloader-ului GRUB.

sudo nano /etc/default/grub

Găsește linia care începe cu `GRUB_CMDLINE_LINUX_DEFAULT` și adaugă următorii parametri în interiorul ghilimelelor. Acest lucru îi spune kernel-ului Linux să activeze IOMMU și să rezerve patru hugepages de 1 gigabyte la pornire.

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt default_hugepagesz=1G hugepagesz=1G hugepages=4"

Aplică modificarea configurației bootloader-ului.

sudo update-grub

Pasul 3: Încarcă automat modulul vfio-pci

Driverul `vfio-pci` este cel care permite gazdei să treacă în siguranță un dispozitiv hardware către o mașină virtuală. Trebuie să ne asigurăm că acest modul este încărcat automat de fiecare dată când serverul pornește.

echo vfio-pci | sudo tee -a /etc/modules-load.d/modules.conf

Pasul 4: Repornește și verifică

Acum, trebuie să repornești gazda Proxmox pentru ca aceste modificări să aibă efect. După ce serverul este din nou online, trebuie să verifici dacă totul funcționează conform așteptărilor.

Verifică dacă IOMMU este activ căutând maparea DMAR în mesajele kernel-ului.

dmesg | grep -e DMAR -e IOMMU

Verifică dacă hugepages au fost rezervate. Este posibil să trebuiască să instalezi mai întâi un instrument ajutător.

sudo apt install libhugetlbfs-bin -y
hugeadm --explain

Verifică dacă modulul kernel `vfio-pci` este încărcat.

lsmod | grep vfio-pci

În final, montează sistemul de fișiere hugepages astfel încât aplicații precum DPDK să îl poată utiliza.

sudo mkdir -p /mnt/huge
sudo mount -t hugetlbfs -o pagesize=1G none /mnt/huge

Pasul 5: Instalează Open vSwitch și DPDK

Acum poți instala pachetele software necesare din depozitul Debian pe care l-ai activat mai devreme.

sudo apt install dpdk openvswitch-switch-dpdk -y

Apoi, trebuie să spui sistemului să utilizeze implicit versiunea Open vSwitch activată pentru DPDK.

sudo update-alternatives --set ovs-vswitchd /usr/lib/openvswitch-switch-dpdk/ovs-vswitchd-dpdk

Pasul 6: Configurează Open vSwitch pentru DPDK

Acum trebuie să configurăm OVS pentru a utiliza DPDK. Aceste comenzi se execută o singură dată pentru a seta configurația în baza de date OVS.

# Activează suportul DPDK
sudo ovs-vsctl set Open_vSwitch . "other_config:dpdk-init=true"

# Fixează procesele DPDK pe nucleul CPU 1 (0x1 este masca de biți pentru primul nucleu)
sudo ovs-vsctl set Open_vSwitch . "other_config:dpdk-lcore-mask=0x1"

# Alocă 2GB de memorie hugepage pentru DPDK
sudo ovs-vsctl set Open_vSwitch . "other_config:dpdk-socket-mem=2048"

# Activează suportul IOMMU pentru conexiunile mașinilor virtuale
sudo ovs-vsctl set Open_vSwitch . "other_config:vhost-iommu-support=true"

# Repornește OVS pentru a aplica noua configurație
sudo systemctl restart ovs-vswitchd.service

Pasul 7: Leagă placa de rețea la driverul DPDK

Acest pas deligă placa ta de rețea fizică de la driverul standard al kernel-ului Linux și o leagă la driverul `vfio-pci` astfel încât DPDK să o poată controla direct. Mai întâi, găsește adresa PCI a plăcii tale de rețea folosind scriptul de legare a dispozitivelor DPDK.

sudo dpdk-devbind.py -s

Caută adaptorul tău de rețea de 10GbE în rezultat. În acest exemplu, adresa sa este `0000:02:00.1`. Acum, leagă acest dispozitiv la driverul `vfio-pci`.

sudo dpdk-devbind.py --bind=vfio-pci 0000:02:00.1

Verifică din nou starea pentru a confirma că dispozitivul este acum gestionat de driverul `vfio-pci`.

Pasul 8: Creează bridge-ul și portul OVS DPDK

Acum creăm un nou bridge OVS care utilizează calea de date `netdev`, necesară pentru DPDK.

sudo ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev

Apoi, adaugă placa ta de rețea la bridge ca un port de tip DPDK.

sudo ovs-vsctl add-port br0 dpdk-p0 -- set Interface dpdk-p0 type=dpdk options:dpdk-devargs=0000:02:00.1

Poți verifica starea noului tău bridge și port.

sudo ovs-vsctl show

Pasul 9: Conectează o mașină virtuală la bridge

Acesta este pasul final de configurare. Trebuie să creăm un dispozitiv de rețea virtual special (un port vhost-user) și să-l trecem către mașina virtuală. Mai întâi, creează un director pentru a stoca fișierele socket pentru aceste conexiuni.

sudo mkdir -p /var/run/openvswitch

Acum, adaugă un nou port `dpdkvhostuserclient` la bridge-ul tău. Acest port se va conecta la mașina ta virtuală.

sudo ovs-vsctl add-port br0 vhost-user-1 -- set Interface vhost-user-1 type=dpdkvhostuserclient options:vhost-server-path=/var/run/openvswitch/vhost-user-1

În final, editează fișierul de configurare pentru mașina ta virtuală. Asigură-te că mașina virtuală este oprită. Va trebui să găsești ID-ul ei în interfața Proxmox. Pentru acest exemplu, presupunem că ID-ul este 100.

sudo nano /etc/pve/qemu-server/100.conf

Adaugă următoarele linii în fișier. Acestea sunt argumente avansate QEMU pe care Proxmox le va transmite mașinii virtuale. Ele configurează dispozitivul de rețea vhost-user, activează vIOMMU pentru oaspete și îi alocă 1GB de memorie hugepages.

args: -machine q35,kernel_irqchip=split -device intel-iommu,intremap=on,caching-mode=on -chardev socket,id=char1,path=/var/run/openvswitch/vhost-user-1,server=off -netdev type=vhost-user,id=mynet1,chardev=char1,vhostforce=on -device virtio-net-pci,mac=00:00:00:00:00:01,netdev=mynet1
hugepages: 1024

Acum poți porni mașina ta virtuală. Va avea o interfață de rețea conectată direct la bridge-ul tău OVS-DPDK de înaltă performanță.

Ai configurat cu succes o stivă de rețea de înaltă performanță în Proxmox. Aceasta este o configurație avansată care deblochează un potențial extraordinar pentru aplicațiile intensive din punct de vedere al rețelei. Demonstrează puterea și flexibilitatea pe care le obții cu un mediu de server neadministrat, unde ai controlul de a ajusta fiecare aspect al sistemului pentru nevoile tale specifice.

Sursă și Atribuire

Aceast articol se bazează pe date originale ale ENGINYRING.COM. Pentru metodologia completă și pentru a asigura integritatea datelor, articolul original trebuie citat. Sursa canonică este disponibilă la: Cum să accelerezi rețelistica în Proxmox folosind Open vSwitch și DPDK.