diff options
| author | Nataliia Solomko <natalirs1985@gmail.com> | 2025-08-01 17:11:16 +0300 |
|---|---|---|
| committer | Nataliia Solomko <natalirs1985@gmail.com> | 2025-08-06 17:18:30 +0300 |
| commit | 5da6f4a639e2f0153f295ef1d6b6c68b077d52a6 (patch) | |
| tree | 91a66b5e885a9738507972374681a49885626fb1 /python | |
| parent | 5631aed811981ff5fb3351eb368a2f7f544b8fbb (diff) | |
| download | vyos-1x-5da6f4a639e2f0153f295ef1d6b6c68b077d52a6.tar.gz vyos-1x-5da6f4a639e2f0153f295ef1d6b6c68b077d52a6.zip | |
T7655: Change VPP memory verification
Get Hugepages information from /sys/kernel/mm/hugepages instead of
/proc/meminfo
Add an error margin for memory calculations
Diffstat (limited to 'python')
| -rw-r--r-- | python/vyos/vpp/config_resource_checks/memory.py | 24 | ||||
| -rw-r--r-- | python/vyos/vpp/config_verify.py | 39 |
2 files changed, 26 insertions, 37 deletions
diff --git a/python/vyos/vpp/config_resource_checks/memory.py b/python/vyos/vpp/config_resource_checks/memory.py index 64fdf9abe..f8ccf7d47 100644 --- a/python/vyos/vpp/config_resource_checks/memory.py +++ b/python/vyos/vpp/config_resource_checks/memory.py @@ -28,7 +28,7 @@ from vyos.vpp.config_resource_checks.resource_defaults import default_resource_m def get_hugepages_info() -> dict: """ - Returns the information about HugePages + Returns the information about HugePages for default hugepage size retrieved from /proc/meminfo """ info = {} @@ -40,18 +40,18 @@ def get_hugepages_info() -> dict: return info -def get_total_hugepages_free_memory() -> int: +def get_total_hugepages_memory() -> int: """ - Returns the total amount of hugepage-backed free memory (in bytes) + Returns the total amount of hugepage memory (in bytes) """ info = get_hugepages_info() - hugepages_free = info.get('HugePages_Free') + hugepages_total = info.get('HugePages_Total') hugepage_size = info.get('Hugepagesize') * 1024 - return hugepage_size * hugepages_free + return hugepage_size * hugepages_total -def get_hugepages_total() -> int: +def get_total_hugepages_count() -> int: """ Returns the total count of hugepages """ @@ -69,18 +69,6 @@ def get_numa_count(): return int(m.group(1)) if m else 0 -def get_memory_from_kernel_settings(settings: dict) -> int: - hugepage_settings = settings.get('hugepage_size', {}) - - total_bytes = 0 - for size_str, info in hugepage_settings.items(): - count = int(info.get('hugepage_count', 0)) - page_bytes = human_memory_to_bytes(size_str) - total_bytes += count * page_bytes - - return total_bytes - - def buffer_size(settings: dict) -> int: numa_count = get_numa_count() buffers_per_numa = int( diff --git a/python/vyos/vpp/config_verify.py b/python/vyos/vpp/config_verify.py index f6c47d0c0..0e21a5a8a 100644 --- a/python/vyos/vpp/config_verify.py +++ b/python/vyos/vpp/config_verify.py @@ -226,27 +226,28 @@ 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 HugePage memory to compare with required memory for VPP - available_memory = mem_checks.get_total_hugepages_free_memory() - + available_memory = mem_checks.get_total_hugepages_memory() memory_required = mem_checks.total_memory_required(config['settings']) - # Check if there is a config currently active - # If yes, calculate how much memory it consumes - # and exclude it from required memory - if config.get('effective'): - memory_used = mem_checks.total_memory_required(config['effective']['settings']) - # If we want to reduce memory configs then there is nothing to check - if memory_used > memory_required: - return - memory_required -= memory_used - - if memory_required > available_memory: + if main_heap_size > available_memory: + available_memory_in_mb = bytes_to_human_memory(available_memory, 'M') + raise ConfigError( + f'"memory main-heap-size" must not be greater than hugepages memory. Reduce to {available_memory_in_mb} or less' + ) + + memory_required = round(memory_required / 1024**3, 1) + available_memory = round(available_memory / 1024**3, 1) + + # Allow 10% error margin + allowed_margin = memory_required * 0.1 + + # Compare HugePage memory with required memory for VPP + if memory_required > available_memory + allowed_margin: raise ConfigError( - 'Not enough free hugepage memory to start VPP: ' - f'available: {round(available_memory / 1024 ** 3, 1)} GB, ' - f'required: {round(memory_required / 1024 ** 3, 1)} GB. ' - 'Please add kernel memory options for HugePages and reboot' + f'Not enough free hugepage memory to start VPP: ' + f'available: {available_memory} GB, required: {memory_required} GB. ' + 'Please add kernel memory options for HugePages ' + '"set system option kernel memory hugepage-size ..." and reboot' ) @@ -396,7 +397,7 @@ def verify_vpp_host_resources(config: dict): max_map_count = int(config['settings']['host_resources']['max_map_count']) # Get HugePages total count - hugepages = mem_checks.get_hugepages_total() + hugepages = mem_checks.get_total_hugepages_count() if max_map_count < 2 * hugepages: Warning( |
