summaryrefslogtreecommitdiff
path: root/src/conf_mode/system_option.py
diff options
context:
space:
mode:
authorNataliia Solomko <natalirs1985@gmail.com>2026-04-14 18:07:41 +0300
committerNataliia Solomko <natalirs1985@gmail.com>2026-04-21 16:45:43 +0300
commit9cb6f4c001fa5d4f4ed26850fc99dde4c3692c8f (patch)
tree5309c08fd789a8560426c1d45e45050c1ad8ac22 /src/conf_mode/system_option.py
parentd9c7cf3bc0e76661f48bd0ce13acfc7be182a326 (diff)
downloadvyos-1x-9cb6f4c001fa5d4f4ed26850fc99dde4c3692c8f.tar.gz
vyos-1x-9cb6f4c001fa5d4f4ed26850fc99dde4c3692c8f.zip
vpp: T8460: Use isolated cpus for VPP cpu-cores
VPP CPU core assignment now uses kernel-isolated CPUs (from /sys/devices/system/cpu/isolated) with explicit corelist-workers instead of computing offsets from available cores with skip-cores/workers. Added validation that enough CPUs are actually isolated before VPP starts, and that isolate-cpus config only references existing CPU IDs. Moved smoketest for kernel option 'isolate-cpus' to test_vpp.py
Diffstat (limited to 'src/conf_mode/system_option.py')
-rwxr-xr-xsrc/conf_mode/system_option.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/conf_mode/system_option.py b/src/conf_mode/system_option.py
index 41b9a23bb..b7487de8a 100755
--- a/src/conf_mode/system_option.py
+++ b/src/conf_mode/system_option.py
@@ -28,7 +28,10 @@ from vyos.configverify import verify_interface_exists
from vyos.system import grub_util
from vyos.template import render
from vyos.utils.boot import boot_configuration_complete
+from vyos.utils.convert import range_str_to_list
+from vyos.utils.convert import list_to_range_str
from vyos.utils.cpu import get_cpus
+from vyos.utils.cpu import get_available_cpus
from vyos.utils.dict import dict_search
from vyos.utils.file import write_file
from vyos.utils.file import read_file
@@ -44,6 +47,7 @@ from vyos import ConfigError
from vyos import airbag
from vyos.vpp.config_resource_checks import memory as mem_check
+from vyos.vpp.config_resource_checks.resource_defaults import default_resource_map
airbag.enable()
@@ -239,6 +243,29 @@ def verify(options):
f'AMD pstate driver cannot be used with "{cpu_vendor}" CPU!'
)
+ isolate_cpus = dict_search('kernel.cpu.isolate_cpus', options)
+ if isolate_cpus:
+ available_cores = sorted({int(cpu['cpu']) for cpu in get_available_cpus()})
+ cpus_list = range_str_to_list(isolate_cpus)
+ reserved_cpus = default_resource_map.get('reserved_cpu_cores')
+
+ cpus_available = len(available_cores) - reserved_cpus
+ if len(cpus_list) > cpus_available:
+ raise ConfigError(
+ f'Cannot isolate {len(cpus_list)} CPUs ({isolate_cpus}): '
+ f'only {cpus_available} of {len(available_cores)} physical cores '
+ f'are available ({reserved_cpus} reserved for the system)'
+ )
+
+ not_available = [cpu for cpu in cpus_list if cpu not in available_cores]
+ if not_available:
+ not_available_str = list_to_range_str(not_available)
+ available_str = list_to_range_str(available_cores)
+ raise ConfigError(
+ f'CPU(s) {not_available_str} do not exist on this system. '
+ f'Available CPUs: {available_str}'
+ )
+
_, hp_memory_bytes = _get_total_hugepages_and_memory(
options['kernel'].get('memory', {})
)