diff options
| author | Viacheslav Hletenko <v.gletenko@vyos.io> | 2026-04-24 15:43:36 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-04-24 15:43:36 +0300 |
| commit | 0cc2bbfc54370cce2d2c7540fb155e464207f1be (patch) | |
| tree | 2b608d1bbed6c35524accec3bfd2d178519b6307 /src/conf_mode/system_option.py | |
| parent | bce0b25640665f105f3fd270f6ba9571d14fb6e6 (diff) | |
| parent | 9cb6f4c001fa5d4f4ed26850fc99dde4c3692c8f (diff) | |
| download | vyos-1x-0cc2bbfc54370cce2d2c7540fb155e464207f1be.tar.gz vyos-1x-0cc2bbfc54370cce2d2c7540fb155e464207f1be.zip | |
Merge pull request #5130 from natali-rs1985/T8460
vpp: T8460: Use isolated cpus for VPP cpu-cores
Diffstat (limited to 'src/conf_mode/system_option.py')
| -rwxr-xr-x | src/conf_mode/system_option.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/conf_mode/system_option.py b/src/conf_mode/system_option.py index ac6e7768d..003e8c9f5 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', {}) ) |
