Hello everyone,
These days I’m trying to set up vpp on VyOS.
According to documents, I noticed we should use set system option kernel cpu isolate-cpus x,xx-xx to isolate specified CPUs from the kernel scheduler.
But vyos vpp wouldn’t use these isolated cpu at this time (rolling 2026.04.02). The doc (VPP Dataplane CPU Configuration — VyOS rolling release (current)) says:
The system automatically assigns cores using the following rules:
- The first two CPU cores are always reserved for the operating system and other services.
- The main VPP thread is assigned to the first available core after the reserved ones.
- The remaining allocated cores are used for worker threads.
So vpp will always use cpu2 for main thread and cpu3,4,5,… for worker threads.
I think this behavior is not what we expect and should be considered a bug. Specifically, when a user explicitly defines isolate-cpus for the dataplane, the expectation is that VPP will utilize those dedicated resources. However, the current “automatic assignment” logic completely ignores these isolated cores and instead grabs other cores that might be intended for system services. This leads to a critical waste of CPU resources and results in performance degradation.
The correct behavior should not rely on a hardcoded sequence. Instead, we should be able to manually define the CPU core binding for each VPP interface. This is the only way to ensure strict alignment between the CPU and the NIC on the same NUMA node, which is essential to obtain normal performance.
The points mentioned above are based on my recent learning. If there are any inaccuracies in my understanding, please feel free to point them out.