Pktgen-DPDK का उपयोग करने का तरीका
सर्वर नेटवर्क
Lastmod: 2024-06-17
Published: 2024-06-13

सारांश

मैंने कुछ छोटे पैकेटों के लोड परीक्षण करने के लिए Pktgen-DPDK का उपयोग करने का निर्णय लिया।

इसके लिए आपको पहले IOMMU को सक्षम करना आवश्यक है। IOMMU को सक्षम करने के मेमो

वातावरण

लक्षित वातावरणसंस्करण
उबंटू22.04
DPDK23.11.1
Pktgen-DPDKमुख्य शाखा
NICइंटेल X520 DA2

आवश्यक पैकेजों का इंस्टॉलेशन

  • निर्भरताओं का इंस्टॉलेशन

    sudo apt-get update
    sudo apt-get install -y git build-essential libnuma-dev python3-pyelftools linux-headers-$(uname -r) meson ninja-build
    

DPDK का निर्माण और इंस्टॉलेशन

  • DPDK पुस्तकालय का डाउनलोड

    • DPDK डाउनलोड वर्तमान में नवीनतम LTS, 23.11.1 का उपयोग करने का निर्णय लिया है।
    wget https://fast.dpdk.org/rel/dpdk-23.11.1.tar.xz
    tar xf dpdk-23.11.1.tar.xz
    cd dpdk-stable-23.11.1
    
  • DPDK का निर्माण

    meson setup build
    ninja -C build
    
  • इंस्टॉलेशन

    ninja -C build install
    ldconfig
    

Hugepages की सेटिंग

  • Hugepages की सेटिंग DPDK उच्च प्रदर्शन सुनिश्चित करने के लिए बड़े मेमोरी पृष्ठों (Hugepages) का उपयोग करता है।

    echo "vm.nr_hugepages=1024" > /etc/sysctl.d/90-hugapage.conf
    sysctl --system
    

Pktgen-DPDK का निर्माण और इंस्टॉलेशन

  • Pktgen-DPDK

    git clone https://github.com/pktgen/Pktgen-DPDK.git
    cd Pktgen-DPDK
    
  • निर्माण

    meson setup build
    ninja -C build
    
  • इंस्टॉलेशन

    ninja -C build install
    

नेटवर्क इंटरफेस को बाइंड करना

  • नेटवर्क इंटरफेस की जांच

    dpdk-devbind.py --status
    
    Network devices using kernel driver
    ===================================
    0000:07:00.0 'RTL8111/8168/8211/8411 PCI Express Gigabit Ethernet Controller 8168' if=enp7s0 drv=r8169 unused=
    0000:09:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' if=enp9s0f0 drv=ixgbe unused=
    0000:09:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' if=enp9s0f1 drv=ixgbe unused=
    
  • vfio-pci को बाइंड करना

    dpdk-devbind.py --bind=vfio-pci 0000:09:00.1
    
  • यदि Error: Driver 'vfio-pci' is not loaded. है vfio-pci ड्राइवर को लोड करें

    modprobe vfio-pci
    
  • बाइंडिंग की स्थिति की पुष्टि करें

    dpdk-devbind.py --status
    Network devices using DPDK-compatible driver
    ============================================
    0000:09:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' drv=vfio-pci unused=ixgbe
    

    drv=vfio-pci होना चाहिए, इसलिए सब ठीक है।

Pktgen-DPDK का उपयोग करना

  • Pktgen-DPDK को चालू करना

    pktgen -l 0-1 -n 2 --proc-type auto --socket-mem 512 -- -P -m "[1-2].0"
    
  • DPDK के विकल्प

    • -l 0-1
      • लॉजिकल कोर 0-1 का DPDK द्वारा उपयोग करना
    • -n 2
      • 2 मेमोरी चैनलों का उपयोग करना
    • –proc-type auto
      • प्रोसेस प्रकार को स्वचालित रूप से निर्धारित करना
    • –socket-mem 512
      • सॉकेट 0 के लिए 512MB आवंटित करना
  • pktgen के विकल्प

    • -P
      • प्रोमिस्कस मोड सक्रिय करें
    • -m “[1-2].0”
      • प्रत्येक पोर्ट के कोर आवंटन को निर्दिष्ट करें। इस मामले में, पोर्ट 1 और 2 को कोर 0 में आवंटित करें।

वास्तविकता में डेटा पैकेट भेजना

reset 0
set 0 dst mac XX:XX:XX:XX:XX:XX // लक्ष्य MAC पता
set 0 dst ip 192.168.3.2        // लक्ष्य IP पता
set 0 src ip 192.168.3.1/24     // स्रोत IP पता
set 0 size 64                   // पेलोड आकार
start 0

अंत में

इससे, NIC से लगभग 10Mpps के शॉर्ट पैकेट निकलने चाहिए।
इससे DDoS जैसे हालात का पुन निर्माण किया जा सकता है! इसलिए, मैंने Pktgen-DPDK का उपयोग किया।