Mengaktifkan pemrosesan paket jaringan yang lebih cepat dengan DPDK


Dokumen ini menjelaskan cara mengaktifkan Data Plane Development Kit (DPDK) pada instance virtual machine (VM) untuk pemrosesan paket jaringan yang lebih cepat.

DPDK adalah framework untuk aplikasi yang membutuhkan performa tinggi dan memerlukan pemrosesan paket yang cepat, latensi rendah, dan performa yang konsisten. DPDK menyediakan serangkaian library bidang data dan pengontrol antarmuka jaringan (NIC) yang mengabaikan jaringan kernel dan berjalan langsung di ruang pengguna. Misalnya, mengaktifkan DPDK di VM berguna saat menjalankan perintah berikut:

  • Deployment virtualisasi fungsi jaringan (NFV)

  • Aplikasi software-defined networking (SDN)

  • Streaming video atau aplikasi voice-over IP

Anda dapat menjalankan DPDK di VM menggunakan salah satu jenis NIC virtual (vNIC) berikut:

  • Direkomendasikan: gVNIC

    Antarmuka jaringan virtual berperforma tinggi, aman, dan skalabel yang dirancang khusus untuk Compute Engine yang berhasil menerapkan virtIO sebagai vNIC generasi berikutnya.

  • VirtIO-Net

    Driver ethernet open source yang memungkinkan VM mengakses hardware fisik secara efisien, seperti block storage dan adaptor jaringan.

Salah satu masalah saat menjalankan DPDK di lingkungan virtual, bukan di hardware fisik, adalah bahwa lingkungan virtual tidak memiliki dukungan untuk SR-IOV dan I/O Memory Management Unit (IOMMU) untuk aplikasi berperforma tinggi. Untuk mengatasi batasan ini, Anda harus menjalankan DPDK pada alamat fisik tamu, bukan alamat virtual host menggunakan salah satu driver berikut:

Sebelum memulai

  • Siapkan autentikasi, jika Anda belum melakukannya. Autentikasi adalah proses verifikasi identitas Anda untuk akses ke layanan dan API Google Cloud. Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat melakukan autentikasi ke Compute Engine sebagai berikut.

    Pilih tab untuk melihat bagaimana Anda berencana menggunakan contoh di halaman ini:

    Konsol

    Saat menggunakan Konsol Google Cloud untuk mengakses API dan layanan Google Cloud, Anda tidak perlu menyiapkan autentikasi.

    gcloud

    1. Instal Google Cloud CLI, lalu initialize dengan menjalankan perintah berikut:

      gcloud init
    2. Menetapkan region dan zona default.

    REST

    Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, gunakan kredensial yang Anda berikan ke gcloud CLI.

      Instal Google Cloud CLI, lalu initialize dengan menjalankan perintah berikut:

      gcloud init

Persyaratan

Saat membuat VM untuk menjalankan DPDK, pastikan hal-hal berikut:

  • Untuk menghindari kurangnya konektivitas jaringan saat menjalankan aplikasi Anda, gunakan dua jaringan Virtual Private Cloud:

    • Jaringan VPC untuk bidang kontrol

    • Jaringan VPC untuk bidang data

  • Kedua jaringan VPC tersebut harus menentukan hal berikut:

    • Subnet dengan rentang alamat IP unik

    • Region yang sama untuk subnetnya

    • Jenis VNIC yang sama—gVNIC atau VirtIO-Net

  • Saat membuat VM:

    • Anda harus menentukan region yang sama dengan subnet kedua jaringan VPC.

    • Anda harus menentukan jenis vNIC yang akan digunakan dengan DPDK.

    • Anda harus menentukan rangkaian mesin yang didukung untuk gVNIC atau VirtIO-Net.

Pembatasan

Menjalankan DPDK pada VM memiliki batasan berikut:

  • Anda hanya dapat menggunakan subnet stack tunggal untuk dua jaringan VPC yang digunakan di VM.

  • Jika Anda menggunakan gVNIC sebagai jenis vNIC untuk kedua jaringan VPC, pastikan hal berikut:

  • Jika ingin mengaktifkan performa jaringan per VM Tier_1 untuk performa jaringan yang lebih tinggi saat membuat VM, Anda harus menentukan hal berikut:

Mengonfigurasi VM untuk menjalankan DPDK

Bagian ini menjelaskan cara membuat VM untuk menjalankan DPDK.

Membuat jaringan VPC

Buat dua jaringan VPC, untuk bidang data dan bidang kontrol, menggunakan Google Cloud Console, Google Cloud CLI, atau Compute Engine API. Kemudian, Anda dapat menentukan jaringan ini saat membuat VM.

Konsol

  1. Buat jaringan VPC untuk bidang data:

    1. Di konsol Google Cloud, buka VPC networks.

      Buka VPC networks

      Halaman VPC networks akan terbuka.

    2. Klik Create VPC network.

      Halaman Create a VPC network akan terbuka.

    3. Di kolom Name, masukkan nama jaringan Anda.

    4. Di bagian New Subnet, lakukan hal berikut:

      1. Di kolom Name, masukkan nama subnet Anda.

      2. Di menu Region, pilih region untuk subnet Anda.

      3. Pilih IPv4 (single-stack) (default).

      4. Di Rentang IPv4, masukkan alamat rentang IPv4 yang valid dalam notasi CIDR.

      5. Klik Done.

    5. Klik Create.

      Halaman VPC networks akan terbuka. Diperlukan waktu hingga satu menit sebelum pembuatan jaringan VPC selesai.

  2. Buat jaringan VPC untuk bidang kontrol dengan aturan firewall guna mengizinkan koneksi SSH ke VM:

    1. Klik Create VPC network lagi.

      Halaman Create a VPC network akan terbuka.

    2. Di kolom Name, masukkan nama jaringan Anda.

    3. Di bagian New Subnet, lakukan hal berikut:

      1. Di kolom Name, masukkan nama subnet.

      2. Di menu Region, pilih region yang sama dengan yang Anda tentukan untuk subnet jaringan bidang data.

      3. Pilih IPv4 (single-stack) (default).

      4. Di Rentang IPv4, masukkan alamat rentang IPv4 yang valid dalam notasi CIDR.

      5. Klik Done.

    4. Di tab Aturan firewall IPv4, pilih kotak centang NETWORK_NAME-allow-ssh.

      Dengan NETWORK_NAME adalah nama jaringan yang Anda tentukan pada langkah sebelumnya.

    5. Klik Create.

      Halaman VPC networks akan terbuka. Diperlukan waktu hingga satu menit sebelum pembuatan jaringan VPC selesai.

gcloud

  1. Guna membuat jaringan VPC untuk bidang data tersebut, ikuti langkah-langkah berikut:

    1. Buat jaringan VPC dengan subnet yang dibuat secara manual menggunakan perintah gcloud compute networks create dengan flag --subnet-mode yang ditetapkan ke custom.

      gcloud compute networks create DATA_PLANE_NETWORK_NAME \
          --bgp-routing-mode=regional \
          --mtu=MTU \
          --subnet-mode=custom
      

      Ganti kode berikut:

      • DATA_PLANE_NETWORK_NAME: nama jaringan VPC untuk bidang data.

      • MTU: unit transmisi maksimum (MTU), yang merupakan ukuran paket terbesar di jaringan. Nilainya harus di antara 1300 dan 8896. Nilai defaultnya adalah 1460. Sebelum menetapkan MTU ke nilai yang lebih tinggi dari 1460, lihat Unit transmisi maksimum.

    2. Buat subnet untuk jaringan bidang data VPC yang baru saja Anda buat menggunakan perintah gcloud compute networks subnets create.

      gcloud compute networks subnets create DATA_PLANE_SUBNET_NAME \
          --network=DATA_PLANE_NETWORK_NAME \
          --range=DATA_PRIMARY_RANGE \
          --region=REGION
      

      Ganti kode berikut:

      • DATA_PLANE_SUBNET_NAME: nama subnet untuk jaringan bidang data.

      • DATA_PLANE_NETWORK_NAME: nama jaringan dataplane yang Anda tentukan di langkah sebelumnya.

      • DATA_PRIMARY_RANGE: rentang IPv4 yang valid untuk subnet dalam notasi CIDR.

      • REGION: region tempat membuat subnet.

  2. Guna membuat jaringan VPC untuk bidang kontrol dengan aturan firewall guna mengizinkan koneksi SSH ke VM, ikuti langkah-langkah berikut:

    1. Buat jaringan VPC dengan subnet yang dibuat secara manual menggunakan perintah gcloud compute networks create dengan flag --subnet-mode yang ditetapkan ke custom.

      gcloud compute networks create CONTROL_PLANE_NETWORK_NAME \
          --bgp-routing-mode=regional \
          --mtu=MTU \
          --subnet-mode=custom
      

      Ganti kode berikut:

      • CONTROL_PLANE_NETWORK_NAME: nama jaringan VPC untuk bidang kontrol.

      • MTU: MTU, yang merupakan ukuran paket terbesar jaringan. Nilainya harus di antara 1300 dan 8896. Nilai defaultnya adalah 1460. Sebelum menetapkan MTU ke nilai yang lebih tinggi dari 1460, lihat Unit transmisi maksimum.

    2. Buat subnet untuk jaringan bidang kontrol VPC yang baru saja Anda buat menggunakan perintah gcloud compute networks subnets create.

      gcloud compute networks subnets create CONTROL_PLANE_SUBNET_NAME \
          --network=CONTROL_PLANE_NETWORK_NAME \
          --range=CONTROL_PRIMARY_RANGE \
          --region=REGION
      

      Ganti kode berikut:

      • CONTROL_PLANE_SUBNET_NAME: nama subnet untuk jaringan bidang kontrol.

      • CONTROL_PLANE_NETWORK_NAME: nama jaringan bidang kontrol yang Anda tentukan pada langkah sebelumnya.

      • CONTROL_PRIMARY_RANGE: rentang IPv4 yang valid untuk subnet dalam notasi CIDR.

      • REGION: region tempat membuat subnet, yang harus sesuai dengan region yang Anda tentukan di subnet jaringan bidang data.

    3. Buat aturan firewall VPC yang mengizinkan SSH ke dalam jaringan bidang kontrol menggunakan perintah gcloud compute firewall-rules create dengan flag --allow yang ditetapkan ke tcp:22.

      gcloud compute firewall-rules create FIREWALL_RULE_NAME \
          --action=allow \
          --network=CONTROL_PLANE_NETWORK_NAME \
          --rules=tcp:22
      

      Ganti kode berikut:

      • FIREWALL_RULE_NAME: nama aturan firewall.

      • CONTROL_PLANE_NETWORK_NAME: nama jaringan bidang kontrol yang Anda buat di langkah sebelumnya.

API

  1. Guna membuat jaringan VPC untuk bidang data tersebut, ikuti langkah-langkah berikut:

    1. Buat jaringan VPC dengan subnet yang dibuat secara manual dengan membuat permintaan POST ke metode networks.insert dengan kolom autoCreateSubnetworks ditetapkan ke false.

      POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks
      
      {
        "autoCreateSubnetworks": false,
        "name": "DATA_PLANE_NETWORK_NAME",
        "mtu": MTU
      }
      

      Ganti kode berikut:

      • PROJECT_ID: project ID dari project saat ini.

      • DATA_PLANE_NETWORK_NAME: nama jaringan untuk bidang data.

      • MTU: unit transmisi maksimum (MTU), yang merupakan ukuran paket terbesar di jaringan. Nilainya harus di antara 1300 dan 8896. Nilai defaultnya adalah 1460. Sebelum menetapkan MTU ke nilai yang lebih tinggi dari 1460, lihat Unit transmisi maksimum.

    2. Buat subnet untuk jaringan bidang data VPC dengan membuat permintaan POST ke metode subnetworks.insert.

      POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks
      
      {
        "ipCidrRange": "DATA_PRIMARY_RANGE",
        "name": "DATA_PLANE_SUBNET_NAME",
        "network": "projects/PROJECT_ID/global/networks/DATA_PLANE_NETWORK_NAME"
      }
      

      Ganti kode berikut:

      • PROJECT_ID: project ID project tempat jaringan bidang data berada.

      • REGION: region tempat Anda ingin membuat subnet.

      • DATA_PRIMARY_RANGE: rentang IPv4 utama untuk subnet baru dalam notasi CIDR.

      • DATA_PLANE_SUBNET_NAME: nama subnet untuk jaringan bidang data yang Anda buat di langkah sebelumnya.

      • DATA_PLANE_NETWORK_NAME: nama jaringan bidang data yang Anda buat di langkah sebelumnya.

  2. Guna membuat jaringan VPC bagi bidang kontrol dengan aturan firewall untuk mengizinkan SSH ke VM, ikuti langkah-langkah berikut:

    1. Buat jaringan VPC dengan subnet yang dibuat secara manual dengan membuat permintaan POST ke metode networks.insert dengan kolom autoCreateSubnetworks ditetapkan ke false.

      POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks
      
      {
        "autoCreateSubnetworks": false,
        "name": "CONTROL_PLANE_NETWORK_NAME",
        "mtu": MTU
      }
      

      Ganti kode berikut:

      • PROJECT_ID: project ID dari project saat ini.

      • CONTROL_PLANE_NETWORK_NAME: nama jaringan untuk bidang kontrol.

      • MTU: MTU, yang merupakan ukuran paket terbesar jaringan. Nilainya harus di antara 1300 dan 8896. Nilai defaultnya adalah 1460. Sebelum menetapkan MTU ke nilai yang lebih tinggi dari 1460, lihat Unit transmisi maksimum.

    2. Buat subnet untuk jaringan kontrol data VPC dengan membuat permintaan POST ke metode subnetworks.insert.

      POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks
      
      {
        "ipCidrRange": "CONTROL_PRIMARY_RANGE",
        "name": "CONTROL_PLANE_SUBNET_NAME",
        "network": "projects/PROJECT_ID/global/networks/CONTROL_PLANE_NETWORK_NAME"
      }
      

      Ganti kode berikut:

      • PROJECT_ID: project ID project tempat jaringan bidang kontrol berada.

      • REGION: region tempat Anda ingin membuat subnet.

      • CONTROL_PRIMARY_RANGE: rentang IPv4 utama untuk subnet baru dalam notasi CIDR.

      • CONTROL_PLANE_SUBNET_NAME: nama subnet untuk jaringan bidang kontrol yang Anda buat di langkah sebelumnya.

      • CONTROL_PLANE_NETWORK_NAME: nama jaringan bidang kontrol yang Anda buat di langkah sebelumnya.

    3. Buat aturan firewall VPC yang mengizinkan SSH ke dalam jaringan bidang kontrol dengan membuat permintaan POST ke metode firewalls.insert. Dalam permintaan, tetapkan kolom IPProtocol ke tcp dan kolom ports ke 22.

      POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
      
      {
        "allowed": [
          {
            "IPProtocol": "tcp",
            "ports": [ "22" ]
          }
        ],
        "network": "projects/PROJECT_ID/global/networks/CONTROL_PLANE_NETWORK_NAME"
      }
      

      Ganti kode berikut:

      • PROJECT_ID: project ID project tempat jaringan bidang kontrol berada.

      • CONTROL_PLANE_NETWORK_NAME: nama jaringan bidang kontrol yang Anda buat di langkah sebelumnya.

Untuk mengetahui opsi konfigurasi lainnya saat membuat jaringan VPC, lihat Membuat dan mengelola jaringan VPC.

Membuat VM yang menggunakan jaringan VPC untuk DPDK

Buat VM yang mengaktifkan gVNIC atau virtIO-Net di dua jaringan VPC yang Anda buat sebelumnya menggunakan Google Cloud Console, gcloud CLI, dan Compute Engine API.

Direkomendasikan: Tentukan Ubuntu LTS atau Ubuntu Pro sebagai image sistem operasi karena dukungan pengelola paketnya untuk VFIO tanpa UIO dan IOMMU {i>driver<i}. Jika Anda tidak ingin menentukan salah satu sistem operasi ini, sebaiknya tetapkan Debian 11 atau yang lebih baru untuk pemrosesan paket yang lebih cepat.

Konsol

Buat VM yang menggunakan dua subnet jaringan VPC yang Anda buat pada langkah sebelumnya dengan melakukan hal berikut:

  1. Di konsol Google Cloud, buka VM instances.

    Buka instance VM

    Halaman VM instances akan terbuka.

  2. Klik Create instance.

    Halaman Create an instance akan terbuka.

  3. Di kolom Name, masukkan nama untuk VM Anda.

  4. Di menu Region, pilih region yang sama tempat Anda membuat jaringan pada langkah sebelumnya.

  5. Di menu Zone, pilih zona untuk VM Anda.

  6. Di bagian Machine configuration, lakukan hal berikut:

    1. Pilih salah satu opsi berikut:

      • Untuk workload umum, pilih tab General destination (default).

      • Untuk workload berperforma intensif, pilih tab ComputeOptimized.

      • Untuk workload rasio memori-ke-vCPU tinggi, pilih tab MemoryOptimized.

      • Untuk beban kerja yang menggunakan Graphics processing unit (GPU), pilih tab GPUs.

    2. Opsional. Jika Anda menentukan GPU di langkah sebelumnya dan ingin mengubah GPU agar terpasang ke VM, lakukan satu atau beberapa tindakan berikut:

      1. Di menu GPU type, pilih salah satu jenis GPU.

      2. Di menu Number of GPU, pilih jumlah GPU.

    3. Di menu Series, pilih deret mesin.

    4. Pada menu Machine type, pilih jenis mesin.

    5. Opsional: Luaskan Advanced configurations, dan ikuti petunjuk untuk menyesuaikan mesin lebih lanjut untuk VM ini.

  7. Opsional: Di bagian Boot disk, klik Change, lalu ikuti petunjuk untuk mengubah disk image.

  8. Luaskan bagian Advanced options.

  9. Luaskan bagian Networking.

  10. Di bagian Network performance configuration, lakukan hal berikut:

    1. Pada menu Network interface card, pilih salah satu opsi berikut:

      • Untuk menggunakan gVNIC, pilih gVNIC.

      • Untuk menggunakan VirtIO-Net, pilih VirtIO.

    2. Opsional: Untuk mendapatkan performa jaringan yang lebih tinggi dan latensi yang lebih rendah, centang kotak Enable Tier_1 networking.

  11. Di bagian Network interfaces, lakukan hal berikut:

    1. Di baris default, klik Delete item "default".

    2. Klik Add network interface.

      Bagian New network interface akan muncul.

    3. Di menu Network, pilih jaringan bidang kontrol yang Anda buat pada langkah sebelumnya.

    4. Klik Done.

    5. Klik Add network interface lagi.

      Bagian New network interface akan muncul.

    6. Di menu Network, pilih jaringan bidang data yang Anda buat di langkah sebelumnya.

    7. Klik Done.

  12. Klik Create.

    Halaman VM instances akan terbuka. Diperlukan waktu hingga satu menit sebelum pembuatan VM selesai.

gcloud

Buat VM yang menggunakan dua subnet jaringan VPC yang Anda buat pada langkah sebelumnya menggunakan perintah gcloud compute instances create dengan flag berikut:

gcloud compute instances create VM_NAME \
    --image-family=IMAGE_FAMILY \
    --image-project=IMAGE_PROJECT \
    --machine-type=MACHINE_TYPE  \
    --network-interface=network=CONTROL_PLANE_NETWORK_NAME,subnet=CONTROL_PLANE_SUBNET_NAME,nic-type=VNIC_TYPE \
    --network-interface=network=DATA_PLANE_NETWORK_NAME,subnet=DATA_PLANE_SUBNET_NAME,nic-type=VNIC_TYPE \
    --zone=ZONE

Ganti kode berikut:

  • VM_NAME: nama VM.

  • IMAGE_FAMILY: kelompok image untuk sistem operasi yang akan diinisialisasi dengan boot disk. Atau, Anda dapat menentukan flag --image=IMAGE dan mengganti IMAGE dengan versi gambar tertentu. Pelajari cara melihat daftar gambar yang tersedia di project image Compute Engine.

  • IMAGE_PROJECT: nama project gambar yang berisi disk image.

  • MACHINE_TYPE: jenis mesin, telah ditentukan atau kustom, untuk VM.

  • VNIC_TYPE: jenis vNIC yang digunakan untuk jaringan bidang kontrol dan jaringan bidang data. Nilainya harus berupa salah satu dari berikut:

    • Untuk menggunakan gVNIC, tentukan GVNIC.

    • Untuk menggunakan VirtIO-Net, tentukan VIRTIO_NET.

  • CONTROL_PLANE_NETWORK_NAME: nama jaringan bidang kontrol yang Anda buat di langkah sebelumnya.

  • CONTROL_PLANE_SUBNET_NAME: nama subnet untuk jaringan bidang kontrol yang Anda buat di langkah sebelumnya.

  • DATA_PLANE_NETWORK_NAME: nama jaringan bidang data yang Anda buat di langkah sebelumnya.

  • DATA_PLANE_SUBNET_NAME: nama subnet untuk jaringan bidang kontrol yang Anda buat secara otomatis pada langkah sebelumnya.

  • ZONE: zona tempat membuat VM. Tentukan zona dalam region yang sama dengan subnet yang Anda buat di langkah sebelumnya.

Misalnya, untuk membuat VM bernama dpdk-vm di zona us-central1-a yang menentukan persistent disk SSD sebesar 512 GB, jenis mesin C2 yang telah ditetapkan dengan 60 vCPU, jaringan Tier_1, dan data pesawat dan jaringan bidang kontrol yang menggunakan gVNIC, jalankan perintah berikut:

gcloud compute instances create dpdk-vm \
    --boot-disk-size=512GB \
    --boot-disk-type=pd-ssd \
    --image-project=ubuntu-os-cloud \
    --image-family=ubuntu-2004-lts \
    --machine-type=c2-standard-60 \
    --network-performance-configs=total-egress-bandwidth-tier=TIER_1 \
    --network-interface=network=control,subnet=control,nic-type=GVNIC \
    --network-interface=network=data,subnet=data,nic-type=GVNIC \
    --zone=us-central1-a

API

Buat VM yang menggunakan dua subnet jaringan VPC yang Anda buat pada langkah sebelumnya dengan membuat permintaan POST ke metode instances.insert dengan hal berikut kolom:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  "name": "VM_NAME",
  "machineType": "MACHINE_TYPE",
  "disks": [
    {
      "initializeParams": {
        "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE_FAMILY"
      }
    }
  ],
  "networkInterfaces": [
    {
      "network": "global/networks/CONTROL_PLANE_NETWORK_NAME",
      "subnetwork": "regions/REGION/subnetworks/CONTROL_PLANE_SUBNET_NAME",
      "nicType": "VNIC_TYPE"
    },
    {
      "network": "global/networks/DATAPLANE_NETWORK_NAME",
      "subnetwork": "regions/REGION/subnetworks/DATA_PLANE_SUBNET_NAME",
      "nicType": "VNIC_TYPE"
    }
  ]
}

Ganti kode berikut:

  • PROJECT_ID: project ID project tempat jaringan VPC bidang kontrol dan jaringan VPC bidang data berada.

  • ZONE: zona tempat membuat VM.

  • VM_NAME: nama VM.

  • MACHINE_TYPE: jenis mesin, telah ditentukan atau kustom, untuk VM.

  • IMAGE_PROJECT: nama project gambar yang berisi disk image.

  • IMAGE_FAMILY: kelompok image untuk sistem operasi yang akan diinisialisasi dengan boot disk. Atau, Anda dapat menentukan versi image tertentu. Pelajari cara melihat daftar gambar dalam project gambar Compute Engine.

  • CONTROL_PLANE_NETWORK_NAME: nama jaringan bidang kontrol yang Anda buat di langkah sebelumnya.

  • REGION: region tempat ada subnet bidang kontrol dan jaringan bidang data.

  • CONTROL_PLANE_SUBNET_NAME: nama subnet untuk jaringan bidang kontrol yang Anda buat di langkah sebelumnya.

  • VNIC_TYPE: jenis vNIC yang digunakan untuk jaringan bidang kontrol dan jaringan bidang data. Nilainya harus berupa salah satu dari berikut:

    • Untuk menggunakan gVNIC, tentukan GVNIC.

    • Untuk menggunakan VirtIO-Net, tentukan VIRTIO_NET.

  • DATA_PLANE_NETWORK_NAME: nama jaringan bidang data yang Anda buat di langkah sebelumnya.

  • DATA_PLANE_SUBNET_NAME: nama subnet untuk jaringan bidang kontrol yang Anda buat di langkah sebelumnya.

Misalnya, untuk membuat VM bernama dpdk-vm di zona us-central1-a yang menentukan persistent disk SSD sebesar 512 GB, jenis mesin C2 yang telah ditetapkan dengan 60 vCPU, jaringan Tier_1, dan data pesawat dan jaringan bidang kontrol yang menggunakan gVNIC, buat permintaan POST berikut:

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/instances

{
  "name": "dpdk-vm",
  "machineType": "c2-standard-60",
  "disks": [
    {
      "initializeParams": {
        "diskSizeGb": "512GB",
        "diskType": "pd-ssd",
        "sourceImage": "projects/ubuntu-os-cloud/global/images/ubuntu-2004-lts"
      },
      "boot": true
    }
  ],
  "networkInterfaces": [
    {
      "network": "global/networks/control",
      "subnetwork": "regions/us-central1/subnetworks/control",
      "nicType": "GVNIC"
    },
    {
      "network": "global/networks/data",
      "subnetwork": "regions/us-central1/subnetworks/data",
      "nicType": "GVNIC"
    }
  ],
  "networkPerformanceConfig": {
    "totalEgressBandwidthTier": "TIER_1"
  }
}

Untuk opsi konfigurasi lainnya saat membuat VM, baca Membuat dan memulai instance VM.

Menginstal DPDK di VM Anda

Untuk menginstal DPDK di VM, ikuti langkah-langkah berikut:

  1. Hubungkan ke VM yang Anda buat di bagian sebelumnya menggunakan SSH.

  2. Konfigurasikan dependensi untuk penginstalan DPDK:

    sudo apt-get update && sudo apt-get upgrade -yq
    sudo apt-get install -yq build-essential ninja-build python3-pip \
        linux-headers-$(uname -r) pkg-config libnuma-dev
    sudo pip install pyelftools meson
    
  3. Instal DPDK:

    wget https://fast.dpdk.org/rel/dpdk-23.07.tar.xz
    tar xvf dpdk-23.07.tar.xz
    cd dpdk-23.07
    
  4. Untuk membuat DPDK dengan contoh:

    meson setup -Dexamples=all build
    sudo ninja -C build install; sudo ldconfig
    

Instal driver

Untuk menyiapkan DPDK agar berjalan pada driver, instal driver dengan memilih salah satu metode berikut:

Menginstal VFIO tanpa IOMMU

Untuk menginstal driver VFIO tanpa IOMMU, ikuti langkah-langkah berikut:

  1. Periksa apakah VFIO diaktifkan:

    cat /boot/config-$(uname -r) | grep NOIOMMU
    

    Jika VFIO tidak diaktifkan, ikuti langkah-langkah di Menginstal UIO.

  2. Aktifkan mode No-IOMMU di VFIO:

    sudo bash -c 'echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode'
    

Instal UIO

Untuk menginstal driver UIO di DPDK, pilih salah satu metode berikut:

Menginstal UIO menggunakan git

Untuk menginstal driver UIO di DPDK menggunakan git, ikuti langkah-langkah berikut:

  1. Clone igb_uio repositori git ke disk di VM Anda:

    git clone https://dpdk.org/git/dpdk-kmods
    
  2. Dari direktori induk repositori git yang di-clone, buat modul dan instal driver UIO di DPDK:

    pushd dpdk-kmods/linux/igb_uio
    sudo make
    sudo depmod && sudo insmod igb_uio.ko
    popd
    

Menginstal UIO menggunakan paket Linux

Untuk menginstal driver UIO di DPDK menggunakan paket Linux, ikuti langkah-langkah berikut:

  1. Menginstal dpdk-igb-uio-dkms paket:

    sudo apt-get install -y dpdk-igb-uio-dkms
    
  2. Instal driver UIO di DPDK:

    sudo modprobe igb_uio
    

Ikat DPDK ke driver, lalu uji

Untuk mengikat DPDK ke driver yang Anda instal di bagian sebelumnya, ikuti langkah-langkah berikut:

  1. Dapatkan nomor slot Peripheral Component Interconnect (PCI) untuk antarmuka jaringan saat ini:

    sudo lspci | grep -e "gVNIC" -e "Virtio network device"
    

    Misalnya, jika VM menggunakan ens4 sebagai antarmuka jaringan, nomor slot PCI adalah 00:04.0.

  2. Hentikan antarmuka jaringan yang terhubung ke adaptor jaringan:

    sudo ip link set NETWORK_INTERFACE_NAME down
    

    Ganti NETWORK_INTERFACE_NAME dengan nama antarmuka jaringan yang ditentukan dalam jaringan VPC. Untuk mengetahui antarmuka jaringan yang digunakan VM, lihat konfigurasi antarmuka jaringan:

    sudo ifconfig
    
  3. Ikat DPDK ke driver:

    sudo dpdk-devbind.py --bind=DRIVER PCI_SLOT_NUMBER
    

    Ganti kode berikut:

    • DRIVER: driver untuk mengikat DPDK. Tentukan salah satu nilai berikut:

      • Driver UIO: igb_uio

      • Driver VFIO tanpa IOMMU: vfio-pci

    • PCI_SLOT_NUMBER: nomor slot PCI antarmuka jaringan saat ini dengan format 00:0NUMBER.0.

  4. Buat direktori /mnt/huge, lalu buat beberapa halaman besar untuk digunakan DPDK untuk buffering:

    sudo mkdir /mnt/huge
    sudo mount -t hugetlbfs -o pagesize=1G none /mnt/huge
    sudo bash -c 'echo 4 > /sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages'
    sudo bash -c 'echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages'
    
  5. Uji apakah DPDK dapat menggunakan antarmuka jaringan yang Anda buat pada langkah sebelumnya dengan menjalankan aplikasi contoh testpmd yang disertakan dengan library DPDK:

    sudo ./build/app/dpdk-testpmd
    

    Untuk informasi selengkapnya tentang menguji DPDK, lihat Opsi Command Line Testpmd.

Lepaskan DPDK

Setelah menggunakan DPDK, Anda dapat melepaskannya dari driver yang telah Anda instal di bagian sebelumnya. Untuk melepaskan DPDK, ikuti langkah-langkah berikut:

  1. Lepaskan DPDK dari driver:

    sudo dpdk-devbind.py -u PCI_SLOT_NUMBER
    

    Ganti PCI_SLOT_NUMBER dengan nomor slot PCI yang Anda tentukan pada langkah sebelumnya. Jika Anda ingin memverifikasi nomor slot PCI untuk antarmuka jaringan saat ini:

    sudo lspci | grep -e "gVNIC" -e "Virtio network device"
    

    Misalnya, jika VM menggunakan ens4 sebagai antarmuka jaringan, nomor slot PCI adalah 00:04.0.

  2. Muat ulang driver jaringan Compute Engine:

    sudo bash -c 'echo PCI_SLOT_NUMBER > /sys/bus/pci/drivers/VNIC_DIRECTORY/bind'
    sudo ip link set NETWORK_INTERFACE_NAME up
    

    Ganti kode berikut:

    • PCI_SLOT_NUMBER: nomor slot PCI yang Anda tentukan pada langkah sebelumnya.

    • VNIC_DIRECTORY: direktori vNIC. Bergantung pada jenis vNIC yang Anda gunakan, tentukan salah satu nilai berikut:

      • gVNIC: gvnic

      • VirtIO-Net: virtio-pci

    • NETWORK_INTERFACE_NAME: nama antarmuka jaringan yang Anda tentukan di bagian sebelumnya.

Langkah selanjutnya