summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorViacheslav Hletenko <v.gletenko@vyos.io>2025-08-06 18:18:44 +0300
committerGitHub <noreply@github.com>2025-08-06 18:18:44 +0300
commit1550cb9b84595a672d99694b838aa633800452ec (patch)
tree91a66b5e885a9738507972374681a49885626fb1 /python
parent5631aed811981ff5fb3351eb368a2f7f544b8fbb (diff)
parent5da6f4a639e2f0153f295ef1d6b6c68b077d52a6 (diff)
downloadvyos-1x-1550cb9b84595a672d99694b838aa633800452ec.tar.gz
vyos-1x-1550cb9b84595a672d99694b838aa633800452ec.zip
Merge pull request #55 from natali-rs1985/T7655
T7655: Change VPP memory verification
Diffstat (limited to 'python')
-rw-r--r--python/vyos/vpp/config_resource_checks/memory.py24
-rw-r--r--python/vyos/vpp/config_verify.py39
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(