diff options
| author | Nataliia S. <81954790+natali-rs1985@users.noreply.github.com> | 2025-07-08 16:43:21 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-08 15:43:21 +0100 |
| commit | fce4f84c69e3cb6e130fbe486154134bd62cd5f6 (patch) | |
| tree | e95c8cc66c9d563f392ff283aa33dc7f1c7bf6b9 | |
| parent | 50f8d4bd4ad6e69aa57797f5875e708850b45ef7 (diff) | |
| download | vyos-1x-fce4f84c69e3cb6e130fbe486154134bd62cd5f6.tar.gz vyos-1x-fce4f84c69e3cb6e130fbe486154134bd62cd5f6.zip | |
T7611: VPP Rewrite check for CPUs and memory (#44)
| -rw-r--r-- | python/vyos/vpp/config_resource_checks/cpu.py | 4 | ||||
| -rw-r--r-- | python/vyos/vpp/config_resource_checks/memory.py | 22 | ||||
| -rw-r--r-- | python/vyos/vpp/config_resource_checks/resource_defaults.py | 21 | ||||
| -rw-r--r-- | python/vyos/vpp/config_verify.py | 20 | ||||
| -rwxr-xr-x | smoketest/scripts/cli/test_vpp.py | 10 |
5 files changed, 18 insertions, 59 deletions
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']) diff --git a/smoketest/scripts/cli/test_vpp.py b/smoketest/scripts/cli/test_vpp.py index 3dfbb4cc8..feb0f3fb3 100755 --- a/smoketest/scripts/cli/test_vpp.py +++ b/smoketest/scripts/cli/test_vpp.py @@ -41,7 +41,6 @@ VPP_CONF = '/run/vpp/vpp.conf' base_path = ['vpp'] driver = 'dpdk' interface = 'eth1' -system_memory_path = ['system', 'option', 'kernel', 'memory'] def get_vpp_config(): @@ -97,9 +96,6 @@ class TestVPP(VyOSUnitTestSHIM.TestCase): def setUp(self): self.cli_set(base_path + ['settings', 'interface', interface, 'driver', driver]) self.cli_set(base_path + ['settings', 'unix', 'poll-sleep-usec', '10']) - self.cli_set( - system_memory_path + ['hugepage-size', '2M', 'hugepage-count', '2048'] - ) def tearDown(self): try: @@ -114,12 +110,6 @@ class TestVPP(VyOSUnitTestSHIM.TestCase): self.cli_delete(['interfaces', 'ethernet', interface, 'address']) self.cli_commit() - # delete kernel memory settings - self.cli_delete( - system_memory_path + ['hugepage-size', '2M', 'hugepage-count', '2048'] - ) - self.cli_commit() - self.assertFalse(os.path.exists(VPP_CONF)) self.assertFalse(process_named_running(PROCESS_NAME)) |
