Aracılığıyla paylaş


Linux sanal makinesinde DPDK'yı ayarlama

Azure'da Veri Düzlemi Geliştirme Seti (DPDK), yoğun performans gerektiren uygulamalar için daha hızlı bir kullanıcı alanı paket işleme çerçevesi sunar. Bu çerçeve, sanal makinenin çekirdek ağ yığınını atlar.

Çekirdek ağ yığınını kullanan tipik paket işlemlerinde işlem kesmeye dayalıdır. Ağ arabirimi gelen paketleri aldığında, paketin işlenmesi için bir çekirdek kesintisi oluşur ve çekirdek alanından kullanıcı alanına bir bağlam değişikliği gerçekleşir. DPDK, hızlı paket işleme için polling mod sürücülerini kullanan bir kullanıcı alanı uygulamasını tercih ederek bağlam değiştirme ve kesme temelli yöntemi ortadan kaldırır.

DPDK, alt düzey kaynaklara erişim sağlayan kullanıcı alanı kitaplıklarından oluşur. Bu kaynaklar ağ arabirimi kartları için donanım, mantıksal çekirdek, bellek yönetimi ve yoklama modu sürücülerini içerebilir.

DPDK, birden çok işletim sistemi dağıtımlarını destekleyen Azure sanal makinelerinde çalışabilir. DPDK, ağ işlevi sanallaştırma uygulamalarının yönlendirilmesinde önemli performans farklılaştırması sağlar. Bu uygulamalar sanal yönlendiriciler, güvenlik duvarları, VPN'ler, yük dengeleyiciler, gelişmiş paket çekirdekleri ve hizmet reddi (DDoS) uygulamaları gibi ağ sanal gereçleri (NVA) biçimini alabilir.

MANA VM'lerinde DPDK için kurulum yönergelerinin listesini burada bulabilirsiniz: Linux üzerinde Microsoft Azure Ağ Bağdaştırıcısı (MANA) ve DPDK

Avantaj

Saniye başına daha yüksek paketler (PPS): Çekirdeği atlamak ve kullanıcı alanında paketlerin denetimini almak, bağlam anahtarlarını ortadan kaldırarak döngü sayısını azaltır. Ayrıca Azure Linux sanal makinelerinde saniye başına işlenen paketlerin oranını artırır.

Desteklenen işletim sistemleri en düşük sürümleri

Azure Marketplace'tan aşağıdaki dağıtımlar desteklenir:

Linux İşletim Sistemi Çekirdek sürümü
Ubuntu 18.04 4.15.0-1014-azure+
SLES 15 SP1 4.12.14-8.19-azure+
RHEL 7.5 3.10.0-862.11.6.el7.x86_64+
Debian 10 4.19.0-1-cloud+

Belirtilen sürümler en düşük gereksinimlerdir. Daha yeni sürümler de desteklenir.

MANA VM'lerinde DPDK gereksinimlerinin listesini burada bulabilirsiniz: Linux üzerinde Microsoft Azure Ağ Bağdaştırıcısı (MANA) ve DPDK

Özel çekirdek desteği

Listelenmeyen tüm Linux çekirdek sürümleri için bkz: Azure'a göre ayarlanmış Linux çekirdeği oluşturma için düzeltme ekleri. Daha fazla bilgi için ile de iletişime geçebilirsiniz aznetdpdk@microsoft.com.

Bölge desteği

Tüm Azure bölgeleri DPDK'i destekler.

Önkoşullar

Linux sanal makinesinde hızlandırılmış ağ etkinleştirilmelidir. Sanal makinede yönetim için bir arabirim içeren en az iki ağ arabirimi olmalıdır. Yönetim arabiriminde Hızlandırılmış ağın etkinleştirilmesi önerilmez. Hızlandırılmış ağ etkinleştirilmiş bir Linux sanal makinesi oluşturmayı öğrenin.

Ayrıca DPDK, Ağ Bağdaştırıcısı'nda veri kuyrukları oluşturmak için RDMA fiillerini kullanır. VM'de doğru RDMA çekirdek sürücülerinin yüklendiğinden emin olun. Vm boyutlarına bağlı olarak mlx4_ib, mlx5_ib veya mana_ib olabilir.

MANA VM'leri için DPDK yükleme yönergelerine buradan ulaşabilirsiniz: Linux üzerinde Microsoft Azure Ağ Bağdaştırıcısı (MANA) ve DPDK

Derleme bağımlılıklarını yükle

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

DPDK'yi el ile derleme ve yükleme

  1. En son DPDK'yi indirin. Azure için sürüm 22.11 LTS veya üzeri önerilir.

  2. ile meson builddirvarsayılan yapılandırmayı oluşturun.

  3. Derleyin ninja -C builddir ile.

  4. Yükleyin DESTDIR=<output folder> ninja -C builddir install ile.

Çalışma zamanı ortamını yapılandırma

Yeniden başlattıktan sonra aşağıdaki komutları bir kez çalıştırın:

  1. Huge Pages

    • Her numa düğümü için bir kez aşağıdaki komutu çalıştırarak hugepage'i yapılandırın:
     echo 1024 | sudo tee /sys/devices/system/node/node*/hugepages/hugepages-2048kB/nr_hugepages
    
    • mkdir /mnt/huge ile bağlamak için bir dizin oluşturun.

    • mount -t hugetlbfs nodev /mnt/huge ile hugepages'leri bağlayın.

    • Büyük sayfaların grep Huge /proc/meminfo kullanılarak ayrılmış olduğundan emin olun.

    • Yukarıdaki örnek 2M büyük sayfalara yöneliktir. 1 GB büyük sayfalar da kullanılabilir.

    Not

    Grub dosyasını değiştirmenin bir yolu vardır; DPDK talimatlarını izleyerek, önyükleme sırasında büyük sayfaların ayrılması sağlanabilir. Yönergeler sayfanın en altındadır. Azure Linux sanal makinesi kullanırken, yeniden başlatmalar arasında büyük sayfaları ayırmak için /etc/config/grub.d altındaki dosyaları değiştirin.

  2. MAC ve IP adresleri: Ağ arabirimlerinin MAC ve IP adresini görüntülemek için kullanın ifconfig –a . VF ağ arabirimi ve NETVSC ağ arabirimi aynı MAC adresine sahiptir, ancak yalnızca NETVSC ağ arabiriminin IP adresi vardır. VF arabirimleri, NETVSC arabirimlerinin alt arabirimleri olarak çalışır.

  3. PCI adresleri

    • ethtool -i <vf interface name> hangi PCI adresinin VF için kullanılacağını öğrenmek için kullanın.

    • eth0 hızlandırılmış ağ etkinleştirilmişse, testpmd'nin yanlışlıkla eth0 için VF pci cihazını devralmadığından emin olun. DPDK uygulaması yanlışlıkla yönetim ağ arabirimini devralıyorsa ve SSH bağlantınızı kaybetmenize neden oluyorsa, DPDK uygulamasını durdurmak için seri konsolunu kullanın. Sanal makineyi durdurmak veya başlatmak için seri konsolunu da kullanabilirsiniz.

  4. Her yeniden başlatmada ibuverbsmodprobe -a ib_uverbs. Yalnızca SLES 15 için, mlx4_ib ile birlikte modprobe -a mlx4_ib de yükleyin.

Usta PMD

DPDK uygulamaları, Azure'da kullanıma sunulan ana PMD üzerinden çalıştırılmalıdır. Uygulama doğrudan VF PMD üzerinden çalışıyorsa, bazı paketler yapay arabirim üzerinde gösterildiğinden VM'ye hedeflenen tüm paketleri almaz. DPDK iki ana PMD türünü destekler: NetVSC PMD ve Failsafe PMD. Ana PMD, uygulamanın hedeflenen tüm paketleri almasını garanti eder. Ayrıca ana bilgisayar hizmetlendirilirken VF iptal edilse bile uygulamanın ana PMD üzerinden DPDK modunda çalışmaya devam ettiğinden emin olur.

NetVSC PMD

NetVSC, Azure'da ana PMD olarak çalıştırılması önerilen PMD'dir. Uygulamanın, hedeflenen tüm paketleri almasını garanti eder. Ayrıca, ana bilgisayara bakım yapılırken VF iptal edilse dahi uygulamanın DPDK modunda çalışmaya devam ettiğinden emin olur. NetVSC PMD'yi kullanma ve yapılandırma hakkında daha fazla bilgi için bkz. (https://doc.dpdk.org/guides/nics/netvsc.html).

Failsafe PMD

Not: Azure'da güvenli PMD ile çalışma önerilmez. DPDK sürümünüz 22.11 LTS veya daha yeniyse NetVSC PMD kullanılması önerilir.

Alternatif olarak, bir DPDK uygulamasını emniyetli PMD üzerinden çalıştırabilirsiniz. Hatasız PMD hakkında daha fazla bilgi için bkz Hatasız yoklama modu sürücü kitaplığı.

Testpmd çalıştırma

testpmd'yi root modunda çalıştırmak için sudo testpmd komutundan önce kullanın.

Temel: Sanity denetimi, emniyetli bağdaştırıcı başlatma

  1. Tek bir bağlantı noktası testpmd uygulamasını başlatmak için aşağıdaki komutları çalıştırın:

    testpmd -w <pci address from previous step> \
      -- -i \
      --port-topology=chained
    
  2. Çift bağlantı noktası testpmd uygulamasını başlatmak için aşağıdaki komutları çalıştırın:

    testpmd -w <pci address nic1> \
    -w <pci address nic2> \
    -- -i
    

Başlatıldıktan sonra bağlantı noktası bilgilerini denetlemek için komutunu çalıştırın show port info all . net_netvsc bir veya iki DPDK bağlantı noktası görmeniz gerekir.

  1. Trafiği başlatmak için kullanın start <port> /stop <port> .

Önceki komutlar testpmd'yi etkileşimli modda başlatır ve testpmd komutlarını denemek için önerilir.

Temel: Tek gönderen/tek alıcı

Aşağıdaki komutlar, saniye başına paket istatistiklerini düzenli aralıklarla yazdırır:

  1. TX tarafında aşağıdaki komutu çalıştırın:

    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>
    
  2. RX tarafında aşağıdaki komutu çalıştırın:

    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>
    

Bir sanal makinede önceki komutları çalıştırırken, derlemeden önce sanal makinelerin gerçek IP adresiyle eşleşecek şekilde IP_SRC_ADDRapp/test-pmd/txonly.c. Aksi takdirde paketler alıcıya ulaşmadan önce bırakılır.

Gelişmiş: Tek gönderen/tek iletici

Aşağıdaki komutlar, saniye başına paket istatistiklerini düzenli aralıklarla yazdırır:

  1. TX tarafında aşağıdaki komutu çalıştırın:

    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>
    
  2. FWD tarafında aşağıdaki komutu çalıştırın:

    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>
    

Bir sanal makinede önceki komutları çalıştırırken, derlemeden önce sanal makinelerin gerçek IP adresiyle eşleşecek şekilde IP_SRC_ADDRapp/test-pmd/txonly.c. Aksi takdirde, paketler ileticiye ulaşmadan önce bırakılır. Bazı kod değişiklikleri yapmadığınız sürece, testpmd ileticisi katman 3 adreslerini değiştirmediğinden, üçüncü bir makineye iletilen trafiği alamazsınız.

sudo yum install -y dpdk

Kaynaklar