summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniil Baturin <daniil@vyos.io>2025-08-19 16:00:34 +0100
committerGitHub <noreply@github.com>2025-08-19 16:00:34 +0100
commit4ad89d66634b7aa1464ae3e44bce179be48cc2bf (patch)
treeba18ed6d8f6e17ab2d34c457e8c05638fd23dab3 /src
parent41c9b0427b123041b0df5a2739468befb2f4e2db (diff)
parent5fa2ba9bae1f3f86ad9aa5c13eefa0aff49fd7f4 (diff)
downloadvyos-1x-4ad89d66634b7aa1464ae3e44bce179be48cc2bf.tar.gz
vyos-1x-4ad89d66634b7aa1464ae3e44bce179be48cc2bf.zip
Merge pull request #4647 from natali-rs1985/T7678
T7678: Move "vpp settings host-resources" to "system option resource-limits"
Diffstat (limited to 'src')
-rwxr-xr-xsrc/conf_mode/system_option.py36
-rwxr-xr-xsrc/conf_mode/vpp.py26
2 files changed, 36 insertions, 26 deletions
diff --git a/src/conf_mode/system_option.py b/src/conf_mode/system_option.py
index fbe7231df..303557412 100755
--- a/src/conf_mode/system_option.py
+++ b/src/conf_mode/system_option.py
@@ -33,6 +33,7 @@ from vyos.utils.process import cmd
from vyos.utils.process import is_systemd_service_running
from vyos.utils.network import is_addr_assigned
from vyos.utils.network import is_intf_addr_assigned
+from vyos.utils.system import sysctl_write
from vyos.configdep import set_dependents
from vyos.configdep import call_dependents
from vyos import ConfigError
@@ -266,6 +267,41 @@ def apply(options):
else:
write_file(kernel_dynamic_debug, f'module {module} -p')
+ if 'resource_limits' in options:
+ unit_map = {'M': 1 << 20, 'G': 1 << 30}
+
+ total_pages = 0
+ total_bytes = 0
+
+ hp_sizes = options.get('kernel', {}).get('memory', {}).get('hugepage_size', {})
+ for size_str, hp_config in hp_sizes.items():
+ pages = int(hp_config.get('hugepage_count', 0))
+ total_pages += pages
+ total_bytes += pages * int(size_str[:-1]) * unit_map[size_str[-1]]
+
+ # Minimum recommended system values
+ max_map_count_min = 65530 # ensures large workload compatibility
+ shmmax_min = 8589934592 # 8 GiB safe default for large allocations
+
+ max_map_count_conf = options['resource_limits'].get('max_map_count', 'auto')
+ shmmax_conf = options['resource_limits'].get('shmmax', 'auto')
+
+ parameters = {
+ 'vm.max_map_count': (
+ max(total_pages * 2, max_map_count_min)
+ if max_map_count_conf == 'auto'
+ else int(max_map_count_conf)
+ ),
+ 'kernel.shmmax': (
+ max(total_bytes, shmmax_min)
+ if shmmax_conf == 'auto'
+ else int(shmmax_conf)
+ ),
+ }
+
+ for parameter, value in parameters.items():
+ sysctl_write(parameter, value)
+
if __name__ == '__main__':
try:
diff --git a/src/conf_mode/vpp.py b/src/conf_mode/vpp.py
index 90e71e522..966158ab7 100755
--- a/src/conf_mode/vpp.py
+++ b/src/conf_mode/vpp.py
@@ -35,7 +35,6 @@ from vyos.ifconfig import Section
from vyos.template import render
from vyos.utils.boot import boot_configuration_complete
from vyos.utils.process import call
-from vyos.utils.system import sysctl_read, sysctl_apply
from vyos.vpp import VPPControl
from vyos.vpp import control_host
@@ -53,7 +52,6 @@ from vyos.vpp.config_verify import (
verify_vpp_memory,
verify_vpp_statseg_size,
verify_vpp_interfaces_dpdk_num_queues,
- verify_vpp_host_resources,
verify_routes_count,
)
from vyos.vpp.config_filter import iface_filter_eth
@@ -363,9 +361,6 @@ def verify(config):
# Check if available memory is enough for current VPP config
verify_vpp_memory(config)
- if 'max_map_count' in config['settings'].get('host_resources', {}):
- verify_vpp_host_resources(config)
-
if 'statseg' in config['settings']:
verify_vpp_statseg_size(config['settings'])
@@ -478,27 +473,6 @@ def generate(config):
render(service_conf, 'vpp/startup.conf.j2', config['settings'])
render(systemd_override, 'vpp/override.conf.j2', config)
- # apply sysctl values
- # default: https://github.com/FDio/vpp/blob/v23.10/src/vpp/conf/80-vpp.conf
- # vm.nr_hugepages are now configured in section
- # 'set system option kernel memory hugepage-size 2M hugepage-count <count>'
- sysctl_config: dict[str, str] = {
- 'vm.max_map_count': config['settings']['host_resources']['max_map_count'],
- 'vm.hugetlb_shm_group': '0',
- 'kernel.shmmax': config['settings']['host_resources']['shmmax'],
- }
- # we do not want to lower current values
- for sysctl_key, sysctl_value in sysctl_config.items():
- # perform check only for quantitative params
- if sysctl_key == 'vm.hugetlb_shm_group':
- pass
- current_value = sysctl_read(sysctl_key)
- if int(current_value) > int(sysctl_value):
- sysctl_config[sysctl_key] = current_value
-
- if not sysctl_apply(sysctl_config):
- raise ConfigError('Cannot configure sysctl parameters for VPP')
-
return None