summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorViacheslav Hletenko <v.gletenko@vyos.io>2025-02-28 08:20:21 +0200
committerGitHub <noreply@github.com>2025-02-28 08:20:21 +0200
commit7de0ab73af90d4d39519f3ba0dec80fb6b9badf5 (patch)
tree5950aaccb970abf000cad946a6667b8d47c10d36
parent8e779ca8ea0f6b859aea167918310236f6834425 (diff)
parent43374315e587306f4e40aefc6747ec9775752435 (diff)
downloadvyos-1x-7de0ab73af90d4d39519f3ba0dec80fb6b9badf5.tar.gz
vyos-1x-7de0ab73af90d4d39519f3ba0dec80fb6b9badf5.zip
Merge pull request #21 from HollyGurza/T7200
T7200: Reduce memory size usage for vpp smoke tests
-rwxr-xr-xsmoketest/scripts/cli/test_vpp.py29
-rwxr-xr-xsrc/conf_mode/vpp.py43
2 files changed, 59 insertions, 13 deletions
diff --git a/smoketest/scripts/cli/test_vpp.py b/smoketest/scripts/cli/test_vpp.py
index 426d19884..6c19fbba0 100755
--- a/smoketest/scripts/cli/test_vpp.py
+++ b/smoketest/scripts/cli/test_vpp.py
@@ -31,6 +31,7 @@ from vyos.configsession import ConfigSessionError
from vyos.utils.process import process_named_running
from vyos.utils.file import read_file
from vyos.utils.process import rc_cmd
+from vyos.vpp.utils import human_page_memory_to_bytes
sys.path.append(os.getenv('vyos_completion_dir'))
from list_mem_page_size import list_mem_page_size
@@ -1131,24 +1132,46 @@ class TestVPP(VyOSUnitTestSHIM.TestCase):
for config_entry in config_entries:
self.assertIn(config_entry, config)
- def test_13_mem_page_size(self):
+ def test_13_1_buffer_page_size(self):
sizes = ['default', 'default-hugepage'] + list_mem_page_size()
for size in sizes:
+ if human_page_memory_to_bytes(size) >= 1 << 30:
+ continue
self.cli_set(base_path + ['settings', 'buffers', 'page-size', size])
+ self.cli_commit()
+
+ conf = get_vpp_config()
+ self.assertEqual(conf['buffers']['page-size'], size)
+
+ def test_13_2_statseg_page_size(self):
+ sizes = ['default', 'default-hugepage'] + list_mem_page_size()
+ for size in sizes:
+ if human_page_memory_to_bytes(size) >= 1 << 30:
+ continue
self.cli_set(base_path + ['settings', 'statseg', 'page-size', size])
+ self.cli_commit()
+
+ conf = get_vpp_config()
+ self.assertEqual(conf['statseg']['page-size'], size)
+
+ def test_13_3_mem_page_size(self):
+ sizes = ['default', 'default-hugepage'] + list_mem_page_size()
+ for size in sizes:
+ if human_page_memory_to_bytes(size) >= 1 << 30:
+ continue
self.cli_set(
base_path + ['settings', 'memory', 'main-heap-page-size', size]
)
self.cli_commit()
conf = get_vpp_config()
- self.assertEqual(conf['buffers']['page-size'], size)
- self.assertEqual(conf['statseg']['page-size'], size)
self.assertEqual(conf['memory']['main-heap-page-size'], size)
def test_14_mem_default_hugepage(self):
sizes = list_mem_page_size(hugepage_only=True)
for size in sizes:
+ if human_page_memory_to_bytes(size) >= 1 << 30:
+ continue
self.cli_set(
base_path + ['settings', 'memory', 'default-hugepage-size', size]
)
diff --git a/src/conf_mode/vpp.py b/src/conf_mode/vpp.py
index 97e3c0c7d..90a3bb7fb 100755
--- a/src/conf_mode/vpp.py
+++ b/src/conf_mode/vpp.py
@@ -43,6 +43,7 @@ from vyos.vpp.utils import (
EthtoolGDrvinfo,
human_page_memory_to_bytes,
human_memory_to_bytes,
+ bytes_to_human_memory,
)
from vyos.vpp.configdb import JSONStorage
@@ -295,18 +296,22 @@ def verify_memory(settings):
settings.get('memory', {}).get('main_heap_size', '1G')
)
- memory_main_heap_page_size = settings.get('memory', {}).get(
- 'main_heap_page_size', 0
+ if memory_main_heap < 51 << 20:
+ # vpp is aborted when we try to use a smaller heap size
+ raise ConfigError('The main heap size must be greater than or equal to 51M')
+
+ memory_main_heap_page_size = human_page_memory_to_bytes(
+ settings.get('memory', {}).get('main_heap_page_size', 'default')
)
- if memory_main_heap_page_size:
- memory_main_heap_page_size = human_page_memory_to_bytes(
- memory_main_heap_page_size
- )
- memory_required += (memory_main_heap + memory_main_heap_page_size - 1) & ~(
- memory_main_heap_page_size - 1
+
+ if memory_main_heap_page_size > memory_main_heap:
+ raise ConfigError(
+ f'The main heap size must be greater than or equal to page-size({bytes_to_human_memory(memory_main_heap_page_size, "K")})'
)
- else:
- memory_required += memory_main_heap
+
+ memory_required += (memory_main_heap + memory_main_heap_page_size - 1) & ~(
+ memory_main_heap_page_size - 1
+ )
statseg_size = human_memory_to_bytes(settings.get('statseg', {}).get('size', '96M'))
memory_required += statseg_size
@@ -498,6 +503,24 @@ def verify(config):
'The max_map_count must be greater than or equal to (2 * nr_hugepages)'
)
+ if 'statseg' in config['settings']:
+ _size = human_memory_to_bytes(config['settings']['statseg'].get('size', '96M'))
+
+ if 'size' in config['settings']['statseg']:
+ if _size < 1 << 20:
+ raise ConfigError(
+ 'The statseg size must be greater than or equal to 1M'
+ )
+
+ if 'page_size' in config['settings']['statseg']:
+ _page_size = human_page_memory_to_bytes(
+ config['settings']['statseg']['page_size']
+ )
+ if _page_size > _size:
+ raise ConfigError(
+ f'The statseg size must be greater than or equal to page-size({bytes_to_human_memory(_page_size, "K")})'
+ )
+
# Check if deleted interfaces are not xconnect memebrs
for iface_config in config.get('removed_ifaces', []):
if iface_config['iface_name'] in config.get('xconn_members', {}):