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 / Model | Sophos XG Network Appliance |
| Motherboard | Sophos "XG" |
| BIOS | American Megatrends Inc. 5.11 |
| CPU | Intel Core i7-6700K @ 4.00 GHz |
| CPU | 4 core / 8 thread |
| RAM | 7.7 GiB |
| Storage | ADATA ASU800SS-128GT 119.2 GB |
| OS | Debian 12 Bookworm |
| Kernel | 6.1.0-51-amd64 |
| IOMMU | Intel VT-d / DMAR |
| IOMMU Domain | Translated |
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 |
|---|---|
| Chipset | Intel 82598EB rev 01 |
| PCI Device ID | 8086:10c6 |
| Subsystem Vendor | Silicom Ltd. |
| Port 1 | 0000:01:00.0 |
| Port 2 | 0000:01:00.1 |
| PCI Root Port | 00:01.0 |
| PCIe Link | Gen1 2.5 GT/s x8 |
| Media | Fiber / SFP |
| Driver VPP | vfio-pci |
| IOMMU Group | Group 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 |
|---|---|
| VPP | 25.02-release |
| DPDK | 24.11.1 |
| Debian | 12 Bookworm |
| Kernel | 6.1.0-51-amd64 |
| Hugepages | 1024 × 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-errormiliaran
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