Pengalaman Install VPP + DPDK + FRR di Debian 12: Berhadapan dengan Intel 82598EB, VFIO, IOMMU, dan Bug Link Silicom

Dalam proses membangun router berbasis Linux menggunakan VPP, DPDK, dan FRR, saya menemukan bahwa instalasi paket sebenarnya bukan bagian yang paling sulit.

Masalah sesungguhnya muncul ketika software bertemu dengan hardware lama, kartu NIC OEM/non-reference, IOMMU, VFIO, serta versi DPDK yang ternyata tidak selalu cocok dengan perangkat yang digunakan.

Tulisan ini merupakan catatan pengalaman membangun router-lab menggunakan:

  • Debian 12 Bookworm
  • FD.io VPP
  • DPDK
  • FRRouting (FRR)
  • Intel 82598EB 10 Gigabit Ethernet
  • vfio-pci
  • Intel VT-d / IOMMU

Kasus ini cukup menarik karena server sempat hang total beberapa kali, link 10G terdeteksi down padahal sebenarnya aktif, hingga muncul counter rx-error miliaran.


1. Hardware yang Digunakan

Mesin yang saya gunakan adalah sebuah Sophos XG network appliance yang dimodifikasi untuk kebutuhan router-lab.

Platform

Komponen Spesifikasi
Merek / ModelSophos XG Network Appliance
MotherboardSophos "XG"
BIOSAmerican Megatrends Inc. 5.11
CPUIntel Core i7-6700K @ 4.00 GHz
CPU4 core / 8 thread
RAM7.7 GiB
StorageADATA ASU800SS-128GT 119.2 GB
OSDebian 12 Bookworm
Kernel6.1.0-51-amd64
IOMMUIntel VT-d / DMAR
IOMMU DomainTranslated

CPU i7-6700K memang bukan CPU server, tetapi masih cukup menarik untuk eksperimen VPP karena memiliki clock yang relatif tinggi.


2. NIC 10G untuk VPP / DPDK

NIC utama menggunakan chipset Intel 82598EB 10-Gigabit AF Dual Port.

Atribut Nilai
ChipsetIntel 82598EB rev 01
PCI Device ID8086:10c6
Subsystem VendorSilicom Ltd.
Port 10000:01:00.0
Port 20000:01:00.1
PCI Root Port00:01.0
PCIe LinkGen1 2.5 GT/s x8
MediaFiber / SFP
Driver VPPvfio-pci
IOMMU GroupGroup 2

Hal penting di sini adalah subsystem vendor-nya Silicom, bukan reference card Intel. Hal ini nantinya menjadi petunjuk utama ketika DPDK salah mendeteksi kondisi link.

0000:01:00.0
0000:01:00.1

Kedua port berada dalam satu IOMMU group bersama:

00:01.0

3. NIC Management Tetap Menggunakan Kernel Linux

NIC management menggunakan Intel I211 dan tidak diserahkan kepada VPP.

PCI Chip Fungsi
02:00.0 Intel I211 Management
03:00.0 - 06:00.0 Intel I211 Tidak aktif
09:00.0 Intel I211 Tidak aktif
0a:00.0 Intel I210 Fiber NIC tambahan
0b:00.0 Intel I210 Fiber NIC tambahan

Interface management:

enp2s0
192.168.161.254/24

NIC management sengaja tidak disentuh oleh DPDK/VPP sehingga akses SSH dan administrasi tetap menggunakan network stack Linux biasa.

Catatan: Saat bereksperimen dengan DPDK, sebaiknya selalu sisakan satu NIC management yang tidak diserahkan ke VPP.

4. Versi Software yang Akhirnya Stabil

Komponen Versi
VPP25.02-release
DPDK24.11.1
Debian12 Bookworm
Kernel6.1.0-51-amd64
Hugepages1024 × 2 MB
Total Hugepages±2 GB

Konfigurasi hugepages:

vm.nr_hugepages=1024

5. Masalah Pertama: Server Hang Total Saat DPDK Start

Ini adalah masalah paling serius. Server sempat freeze total tiga kali saat proses startup VPP/DPDK.

06:39
06:59
07:10

Polanya selalu sama: ketika DPDK mulai menginisialisasi NIC Intel 82598EB, mesin berhenti merespons.

Tidak hanya SSH yang mati. Keyboard dan sistem secara keseluruhan ikut hang, sehingga recovery hanya bisa dilakukan dengan power cycle manual.

Saat itu versi yang digunakan adalah:

VPP 26.06
DPDK 26.03

Setelah beberapa kali pengujian, indikasinya mengarah kuat ke masalah kompatibilitas DPDK tersebut dengan Intel 82598EB.


6. Solusi: Downgrade ke VPP 25.02 + DPDK 24.11.1

Daripada terus memaksa versi terbaru, akhirnya saya melakukan downgrade.

Target kombinasi yang digunakan:

VPP 25.02-release
DPDK 24.11.1

Paket utamanya:

apt install vpp vpp-plugin-core vpp-plugin-dpdk libvppinfra

Semua paket harus berasal dari versi release yang konsisten. Mencampur versi vpp, libvppinfra, dan vpp-plugin-dpdk berpotensi menghasilkan masalah lain.

Setelah kembali ke VPP 25.02 dengan DPDK 24.11.1, Intel 82598EB tidak lagi membuat server hang.

Pelajaran: DPDK terbaru tidak selalu menjadi DPDK terbaik, terutama untuk NIC generasi lama.

7. Masalah Kedua: Carrier Down Padahal Link Hidup

Setelah masalah hang selesai, VPP menampilkan:

carrier down
Link speed: unknown

Awalnya saya mencurigai SFP, fiber, switch, atau NIC. Namun setelah NIC dikembalikan sementara ke driver kernel Linux, hasilnya normal:

Link detected: yes
Speed: 10000Mb/s
Duplex: Full

Dengan kata lain, hardware dan layer fisik sebenarnya sehat. Masalah hanya muncul ketika NIC dikendalikan DPDK.


8. Akar Masalah: SDP3 pada Kartu Silicom

Chip NIC memang Intel 82598EB, tetapi board menggunakan subsystem vendor Silicom Ltd.

Pada implementasi tertentu, DPDK menggunakan sinyal SDP3 untuk menentukan kondisi TX disable atau laser.

Masalahnya, kartu Silicom ini tidak menggunakan SDP3 dengan cara yang diasumsikan driver.

Akibatnya DPDK membaca kondisi tersebut seolah-olah:

TX_DISABLE

padahal link fisik sebenarnya hidup.

Solusinya adalah menggunakan devarg:

fiber_sdp3_no_tx_disable=1

Parameter tersebut digunakan pada masing-masing device:

0000:01:00.0
    fiber_sdp3_no_tx_disable=1

0000:01:00.1
    fiber_sdp3_no_tx_disable=1

Setelah parameter tersebut diterapkan:

carrier up
10 Gbps
full duplex

muncul dengan benar pada kedua port.


9. Masalah Ketiga: Counter rx-error Miliaran

VPP juga sempat menunjukkan angka seperti:

rx-error 149437141080

Yang aneh, nilainya identik pada kedua port. Secara statistik hal ini sangat mencurigakan.

Indikasinya berasal dari pembacaan register statistik FCoE seperti:

FCCRC
FCLAST

Register tersebut tidak tersedia dengan cara yang sama pada Intel 82598, sehingga nilai yang terbaca dapat berupa garbage value.

Dalam kasus saya, counter tersebut akhirnya diperlakukan sebagai masalah kosmetik/statistik, bukan kerusakan RX sebenarnya.


10. Verifikasi dengan Traffic Nyata

IP test yang digunakan:

VPP Port 1 : 10.10.21.2/30
Peer       : 10.10.21.1

VPP Port 2 : 10.10.22.2/30
Peer       : 10.10.22.1

Mapping interface:

1/0/0 <-> 10.10.21.1
1/0/1 <-> 10.10.22.1

Hasil ping:

100 packets transmitted
100 packets received
0% packet loss

Kedua port juga menunjukkan:

carrier up
10 Gbps
full duplex

Traffic test nyata seperti ini jauh lebih penting daripada mempercayai satu counter statistik saja.


11. Masalah Keempat: Out-of-Memory Saat VPP Start

Saya juga sempat menemukan error:

Out-of-memory, calling os_panic()

Mesin hanya memiliki sekitar 7.7 GiB RAM, sementara hugepages dialokasikan sebesar:

1024 x 2 MB = 2 GB

Setelah konfigurasi di-reset, paket dibuat konsisten, dan VPP kembali ke versi 25.02, masalah OOM tidak muncul lagi.

Beberapa perintah untuk monitoring memory:

free -h
grep Huge /proc/meminfo

12. Masalah Kelima: NIC Berebut antara Kernel dan VPP

DPDK membutuhkan kontrol langsung terhadap perangkat PCI menggunakan:

vfio-pci

Namun saat boot, Linux dapat lebih dulu mengikat Intel 82598EB ke:

ixgbe

Akibatnya ketika VPP start, NIC sudah lebih dulu dimiliki kernel.

Secara sederhana terjadi perlombaan:

Linux kernel
   |
 ixgbe
   |
vfio-pci
   |
  VPP

Hal seperti ini harus dibuat deterministik jika sistem ingin digunakan sebagai router produksi.


13. Membuat Binding VFIO Persisten

Load vfio-pci saat boot

File:

/etc/modules-load.d/vfio-pci.conf

Isi:

vfio-pci

Claim Device ID Intel 82598EB

File:

/etc/modprobe.d/vpp-vfio.conf

Isi:

options vfio-pci ids=8086:10c6

Device ID 8086:10c6 adalah Intel 82598EB yang digunakan pada kedua port 10G.

Driver Override melalui udev

Rule tambahan dibuat pada:

/etc/udev/rules.d/99-vpp-vfio.rules

Tujuannya adalah memastikan perangkat diarahkan secara konsisten ke vfio-pci sebelum digunakan oleh VPP.


14. Mengecek Binding PCI

Gunakan:

lspci -nnk -s 01:00.0
lspci -nnk -s 01:00.1

Kondisi yang diinginkan:

Kernel driver in use: vfio-pci

Bukan:

Kernel driver in use: ixgbe

Cek juga modul VFIO:

lsmod | grep vfio

Jika belum aktif:

modprobe vfio-pci

15. IOMMU dan VFIO

DPDK bekerja sangat dekat dengan hardware. NIC melakukan DMA langsung ke memory dan VPP memproses packet tanpa melalui network stack Linux biasa.

Karena itu IOMMU dan VFIO bukan sekadar persyaratan agar DPDK bisa start.

Pada mesin ini:

DMAR
Default domain type: Translated

NIC 10G berada pada IOMMU group:

Group 2

yang berisi:

00:01.0
01:00.0
01:00.1

NIC management berada di group berbeda sehingga tidak ikut terkena perubahan driver ketika NIC 10G diserahkan kepada VFIO.


16. Keterbatasan PCIe

Intel 82598EB terhubung menggunakan:

PCIe Gen1
2.5 GT/s
x8

Bandwidth-nya masih cukup untuk satu jalur 10G, tetapi karena kartu memiliki dua port 10G, jangan langsung mengharapkan:

2 x 10 Gbps full line-rate

secara simultan tanpa mempertimbangkan keterbatasan bus PCIe.


17. Keterbatasan CPU

CPU yang digunakan:

Intel Core i7-6700K
4 Core / 8 Thread

Clock tinggi cukup membantu VPP, tetapi physical core hanya empat. Jika nantinya menggunakan:

  • VPP main thread
  • VPP worker
  • FRR
  • Linux service
  • Monitoring

maka pembagian CPU harus direncanakan dengan baik.


18. Ringkasan Masalah dan Solusi

Masalah Solusi Hasil
DPDK membuat server hang Downgrade VPP 26.06 ke 25.02 DPDK 24.11.1 stabil
Link terdeteksi down fiber_sdp3_no_tx_disable=1 Carrier UP 10G
rx-error miliaran Verifikasi dengan traffic nyata Traffic normal
VPP OOM Reset config dan samakan versi paket VPP start normal
vfio-pci belum aktif modules-load.d VFIO tersedia saat boot
Kernel mengambil NIC modprobe + udev driver override Binding konsisten

19. Hasil Akhir

Debian 12 Bookworm
Kernel 6.1.0-51-amd64

VPP 25.02-release
DPDK 24.11.1

Intel 82598EB

0000:01:00.0 -> vfio-pci
0000:01:00.1 -> vfio-pci

Devarg:
fiber_sdp3_no_tx_disable=1

Hugepages:
1024 x 2 MB

Kedua interface akhirnya berhasil mencapai:

carrier up
10 Gbps
full duplex

Traffic test:

100/100 packet received
0% packet loss

Yang paling penting, server tidak lagi hang ketika DPDK menginisialisasi NIC.


20. Pelajaran yang Saya Dapat

1. Versi terbaru belum tentu paling cocok

DPDK 26.03   -> bermasalah
DPDK 24.11.1 -> stabil

Untuk hardware lama, release LTS yang matang sering kali lebih cocok daripada versi terbaru.

2. Chip Intel belum tentu berarti kartunya buatan Intel

Dalam kasus saya:

Chip      : Intel 82598EB
Subsystem : Silicom Ltd.

Perbedaan desain board ternyata cukup untuk menyebabkan driver salah membaca status link.

3. Selalu uji hardware menggunakan driver kernel

Urutan troubleshooting yang menurut saya cukup efektif:

Hardware
   |
Kernel Driver
   |
VFIO
   |
DPDK
   |
VPP
   |
Routing / FRR

Dengan cara ini, masalah dapat diisolasi satu layer demi satu layer.

4. Jangan percaya satu counter statistik saja

Jika counter terlihat aneh, selalu verifikasi menggunakan traffic nyata seperti:

ping
iperf3
packet counter
drop counter

5. Binding PCI harus deterministik

File yang saya gunakan:

/etc/modules-load.d/vfio-pci.conf
/etc/modprobe.d/vpp-vfio.conf
/etc/udev/rules.d/99-vpp-vfio.rules

Setelah reboot, selalu periksa kembali:

lspci -nnk

6. RAM harus diperhatikan

RAM       : 7.7 GiB
Hugepages : 2 GiB

Sisa memory harus dibagi antara Debian, VPP, FRR, logging, SSH, dan monitoring.

7. Selalu backup konfigurasi

Contohnya:

/root/startup.conf.bak-2606

Backup sederhana seperti ini sangat membantu ketika harus melakukan rollback.


21. Kesimpulan

Membangun router menggunakan VPP + DPDK + FRR di Debian 12 ternyata bukan sekadar:

apt install vpp

Di belakangnya terdapat hubungan antara:

PCIe
 |
IOMMU
 |
VFIO
 |
DPDK PMD
 |
VPP
 |
FRR

Pada kasus Intel 82598EB + Silicom ini, gejalanya pada awalnya terlihat seperti hardware rusak:

  • Server hang
  • Carrier down
  • rx-error miliaran

Namun ternyata penyebabnya merupakan kombinasi dari:

  • Kompatibilitas versi DPDK
  • Perilaku SDP3 pada kartu Silicom
  • Pembacaan statistik pada Intel 82598
  • Konfigurasi VFIO
  • Persistensi PCI binding

Kombinasi yang akhirnya stabil pada mesin ini adalah:

Debian 12
VPP 25.02
DPDK 24.11.1
vfio-pci
fiber_sdp3_no_tx_disable=1

Hasil akhirnya:

10 Gbps
Full Duplex
Carrier UP
100/100 ping
0% packet loss
Kesimpulan utama:
Ketika DPDK bermasalah, jangan langsung menyalahkan hardware. Uji hardware menggunakan driver kernel terlebih dahulu, kemudian isolasi masalah satu layer demi satu layer.
Untuk networking hardware lama, versi software yang paling matang sering kali lebih berharga daripada versi yang paling baru.

Referensi Perintah Troubleshooting

# Cek PCI dan driver
lspci -nnk

# Detail NIC
lspci -nnvv -s 01:00.0
lspci -nnvv -s 01:00.1

# Cek VFIO
lsmod | grep vfio

# Load vfio-pci
modprobe vfio-pci

# Cek IOMMU
dmesg | grep -Ei 'DMAR|IOMMU'

# Cek RAM
free -h

# Cek hugepages
grep -i huge /proc/meminfo

# Status VPP
systemctl status vpp

# Masuk VPP CLI
vppctl

# Cek interface
vppctl show interface

# Cek hardware VPP
vppctl show hardware

Catatan: Dokumentasi ini berdasarkan hardware dan versi software yang spesifik. Perilaku pada NIC, firmware, kernel, atau versi DPDK lainnya dapat berbeda. Selalu lakukan pengujian sebelum menerapkan konfigurasi pada router produksi.

No comments:

Post a Comment