Skip to content

Commit

Permalink
hugepage_reset: Test compatible with different NUMA topologies
Browse files Browse the repository at this point in the history
As the test will set 8 hugepages, this works fine
for systems with 2 NUMA nodes, having e.g. 8 nodes
is going to lead the on_numa_node variant to fail
since the binded node doesn't have enough hugepages.

As the cfg already suggests to allocate 1G hugepages
on boot time, let's make user decision how many hugepages
allocate, adding an informative comment in the cfg as well.

Finally, if system hugepage_size is 1GB, allocates at
runtime enough hugepages in all valid nodes.

Signed-off-by: mcasquer <[email protected]>
  • Loading branch information
mcasquer committed Jan 16, 2025
1 parent 561916a commit d77d567
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 4 deletions.
6 changes: 4 additions & 2 deletions qemu/tests/cfg/hugepage_reset.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@
pre_command = 'echo 3 > /proc/sys/vm/drop_caches && echo 1 > /proc/sys/vm/compact_memory'
mem = 4096
origin_nr = 8
# Please set hugepage in kernel command line before this test:
# default_hugepagesz=1G hugepagesz=1G hugepages=8
# Please allocate enough hugepages at boot time for this test.
# IMPORTANT! Keep in mind the system's memory and number of NUMA nodes.
# Also check the hugepage size has changed to 1G
# Example: default_hugepagesz=1G hugepagesz=1G hugepages=24
expected_hugepage_size = 1048576
Windows:
x86_64:
Expand Down
22 changes: 20 additions & 2 deletions qemu/tests/hugepage_reset.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,24 @@ def run(test, params, env):
:param env: Dictionary with the test environment.
"""

def allocate_largepages_per_node():
"""
The functions is inteded to set 1G hugepages per NUMA
node when the system has four or more of these nodes.
For this function to work the hugepage size should be 1G.
This way a QEMU failure could be avoided if it's unable
to allocate memory.
"""
node_list = host_numa_node.online_nodes_withcpumem
if len(node_list) >= 4:
for node in node_list:
node_mem_free = int(
host_numa_node.read_from_node_meminfo(node, "MemFree")
)
mem_kb = mem * 1024
if node_mem_free > mem_kb:
hp_config.set_node_num_huge_pages(4, node, "1048576")

def set_hugepage():
"""Set nr_hugepages"""
try:
Expand Down Expand Up @@ -107,9 +125,9 @@ def heavyload_install():
"No node on your host has sufficient free memory for " "this test."
)
hp_config = test_setup.HugePageConfig(params)
if params.get("on_numa_node"):
allocate_largepages_per_node()
hp_config.target_hugepages = origin_nr
test.log.info("Setup hugepage number to %s", origin_nr)
hp_config.setup()
hugepage_size = utils_memory.get_huge_page_size()
params["hugepage_path"] = hp_config.hugepage_path
params["start_vm"] = "yes"
Expand Down

0 comments on commit d77d567

Please sign in to comment.