diff options
| author | Viacheslav Hletenko <v.gletenko@vyos.io> | 2025-02-28 08:20:21 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-02-28 08:20:21 +0200 |
| commit | 7de0ab73af90d4d39519f3ba0dec80fb6b9badf5 (patch) | |
| tree | 5950aaccb970abf000cad946a6667b8d47c10d36 | |
| parent | 8e779ca8ea0f6b859aea167918310236f6834425 (diff) | |
| parent | 43374315e587306f4e40aefc6747ec9775752435 (diff) | |
| download | vyos-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-x | smoketest/scripts/cli/test_vpp.py | 29 | ||||
| -rwxr-xr-x | src/conf_mode/vpp.py | 43 |
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', {}): |
