From fce4f84c69e3cb6e130fbe486154134bd62cd5f6 Mon Sep 17 00:00:00 2001 From: "Nataliia S." <81954790+natali-rs1985@users.noreply.github.com> Date: Tue, 8 Jul 2025 16:43:21 +0200 Subject: T7611: VPP Rewrite check for CPUs and memory (#44) --- python/vyos/vpp/config_resource_checks/cpu.py | 4 ++-- python/vyos/vpp/config_resource_checks/memory.py | 22 ++++++++++------------ .../config_resource_checks/resource_defaults.py | 21 +-------------------- python/vyos/vpp/config_verify.py | 20 +++++--------------- 4 files changed, 18 insertions(+), 49 deletions(-) (limited to 'python') diff --git a/python/vyos/vpp/config_resource_checks/cpu.py b/python/vyos/vpp/config_resource_checks/cpu.py index 6f360ae74..ee0bace2d 100644 --- a/python/vyos/vpp/config_resource_checks/cpu.py +++ b/python/vyos/vpp/config_resource_checks/cpu.py @@ -18,11 +18,11 @@ from vyos.utils.cpu import get_available_cpus, get_core_count -from vyos.vpp.config_resource_checks.resource_defaults import get_resource_defaults +from vyos.vpp.config_resource_checks.resource_defaults import default_resource_map # Get default value for reserved cpu cores -reserved_cpus = get_resource_defaults().get('reserved_cpu_cores') +reserved_cpus = default_resource_map.get('reserved_cpu_cores') def available_cores_count(cpu_settings: dict) -> int: diff --git a/python/vyos/vpp/config_resource_checks/memory.py b/python/vyos/vpp/config_resource_checks/memory.py index 44f0c9358..f5c7286bc 100644 --- a/python/vyos/vpp/config_resource_checks/memory.py +++ b/python/vyos/vpp/config_resource_checks/memory.py @@ -23,11 +23,7 @@ from vyos.vpp.utils import ( human_memory_to_bytes, human_page_memory_to_bytes, ) -from vyos.vpp.config_resource_checks.resource_defaults import get_resource_defaults - - -# Get default values for resource checks -defaults = get_resource_defaults() +from vyos.vpp.config_resource_checks.resource_defaults import default_resource_map def get_total_hugepages_free_memory() -> int: @@ -74,11 +70,13 @@ def buffer_size(settings: dict) -> int: numa_count = get_numa_count() buffers_per_numa = int( settings.get('buffers', {}).get( - 'buffers_per_numa', defaults.get('buffers_per_numa') + 'buffers_per_numa', default_resource_map.get('buffers_per_numa') ) ) data_size = int( - settings.get('buffers', {}).get('data_size', defaults.get('data_size')) + settings.get('buffers', {}).get( + 'data_size', default_resource_map.get('data_size') + ) ) buffers_memory = buffers_per_numa * data_size * numa_count return buffers_memory @@ -86,21 +84,21 @@ def buffer_size(settings: dict) -> int: def main_heap_page_size(settings: dict) -> int: heap_page_size = settings.get('memory', {}).get( - 'main_heap_page_size', defaults.get('main_heap_page_size') + 'main_heap_page_size', default_resource_map.get('main_heap_page_size') ) return human_page_memory_to_bytes(heap_page_size) def memory_main_heap(settings: dict) -> int: heap_size = settings.get('memory', {}).get( - 'main_heap_size', defaults.get('main_heap_size') + 'main_heap_size', default_resource_map.get('main_heap_size') ) return human_memory_to_bytes(heap_size) def ipv6_heap_size(settings: dict) -> int: heap_size = settings.get('ipv6', {}).get( - 'heap_size', defaults.get('ipv6_heap_size') + 'heap_size', default_resource_map.get('ipv6_heap_size') ) return human_memory_to_bytes(heap_size) @@ -111,7 +109,7 @@ def total_heap_size(heap_size: int, heap_page_size: int) -> int: def statseg_size(settings: dict) -> int: statseg_memory = settings.get('statseg', {}).get( - 'size', defaults.get('statseg_heap_size') + 'size', default_resource_map.get('statseg_heap_size') ) return human_memory_to_bytes(statseg_memory) @@ -132,7 +130,7 @@ def total_memory_required(settings: dict) -> int: 'memory_buffers': buffer_size(settings), 'netlink_buffer_size': int( settings.get('lcp', {}).get( - 'rx_buffer_size', defaults.get('netlink_rx_buffer_size') + 'rx_buffer_size', default_resource_map.get('netlink_rx_buffer_size') ) ), 'heap_size': total_heap_size( diff --git a/python/vyos/vpp/config_resource_checks/resource_defaults.py b/python/vyos/vpp/config_resource_checks/resource_defaults.py index 3c618accd..828683456 100644 --- a/python/vyos/vpp/config_resource_checks/resource_defaults.py +++ b/python/vyos/vpp/config_resource_checks/resource_defaults.py @@ -16,11 +16,8 @@ # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -import copy -import os - -__default_resource_map = { +default_resource_map = { # Default amount of buffers per NUMA (populated CPU socket) 'buffers_per_numa': 16384, # Default size of buffer (in bytes) @@ -44,19 +41,3 @@ __default_resource_map = { # Default heap size for IPv6 'ipv6_heap_size': '32M', } - - -def get_resource_defaults() -> dict: - resource_map = copy.deepcopy(__default_resource_map) - # Check if current runtime is smoke tests - # Since CI/CD runners are limited in resources, reduce the checks for tests - if is_smoketest(): - resource_map.update(min_memory='6G', min_cpus=2, reserved_cpu_cores=0) - - return resource_map - - -def is_smoketest(): - if os.path.exists('/tmp/vyos.smoketests.hint'): - return True - return False diff --git a/python/vyos/vpp/config_verify.py b/python/vyos/vpp/config_verify.py index 4505d205f..cda5cf012 100644 --- a/python/vyos/vpp/config_verify.py +++ b/python/vyos/vpp/config_verify.py @@ -23,14 +23,10 @@ from vyos.utils.cpu import get_core_count as total_core_count from vyos.vpp.control_host import get_eth_driver from vyos.vpp.config_resource_checks import cpu as cpu_checks, memory as mem_checks -from vyos.vpp.config_resource_checks import resource_defaults +from vyos.vpp.config_resource_checks.resource_defaults import default_resource_map from vyos.vpp.utils import human_memory_to_bytes, bytes_to_human_memory -# Get default values for resource checks -defaults = resource_defaults.get_resource_defaults() - - def verify_vpp_remove_kernel_interface(config: dict): """Common verify for removed kernel-interfaces. Verify that removed kernel interface are not used in 'vpp kernel-interfaces'. @@ -188,7 +184,7 @@ def verify_vpp_minimum_cpus(): Verify that the host system has enough physical CPU cores Current minimal requirement is 4 """ - min_cpus = defaults.get('min_cpus') + min_cpus = default_resource_map.get('min_cpus') if total_core_count() < min_cpus: raise ConfigError( 'This system does not meet minimal requirements for VPP. ' @@ -204,7 +200,7 @@ def verify_vpp_minimum_memory(): To avoid situations like when a machine nominally has 8192 MB (8 giga/gibibytes) But the OS sees only 7.75 GB, creating a fail condition for this check """ - min_mem = defaults.get('min_memory') + min_mem = default_resource_map.get('min_memory') total_memory = round(psutil.virtual_memory().total / (1024**3)) min_memory = round(human_memory_to_bytes(min_mem) / (1024**3)) @@ -229,14 +225,8 @@ def verify_vpp_memory(config: dict): f'The main heap size must be greater than or equal to page-size ({readable_heap_page})' ) - # Get available HupePage memory to compare with required memory for VPP - # (if it's smketests environment get system kernel settings for HugePages) - if not resource_defaults.is_smoketest(): - available_memory = mem_checks.get_total_hugepages_free_memory() - else: - available_memory = mem_checks.get_memory_from_kernel_settings( - config['kernel_memory_settings'] - ) + # Get available HugePage memory to compare with required memory for VPP + available_memory = mem_checks.get_total_hugepages_free_memory() memory_required = mem_checks.total_memory_required(config['settings']) -- cgit v1.2.3