Skip to content

Commit b5a0b54

Browse files
phip1611hertrste
authored andcommitted
testscript: do huge-page tests first to prevent memory fragmentation
The more test cases we have, the more allocations will happen in the VM hosts (the QEMU VMs). This causes memory fragmentation. We have more and more frequent CI failures with the huge page tests. Our assumption is that the memory is too fragmented to allocate 2 GiB of huge pages (1024x 2 MiB pages). By executing the huge-page tests first, we can work around this. On-behalf-of: SAP philipp.schuster@sap.com Signed-off-by: Philipp Schuster <philipp.schuster@cyberus-technology.de>
1 parent 4f43676 commit b5a0b54

File tree

1 file changed

+23
-22
lines changed

1 file changed

+23
-22
lines changed

tests/testscript.py

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
VIRTIO_ENTROPY_SOURCE = "1af4:1044"
2020

2121
# The VM we migrate has 2GiB of memory: 1024 * 2 MiB to cover RAM
22-
nr_hugepages = 1024
22+
NR_HUGEPAGES = 1024
2323

2424

2525
class SaveLogsOnErrorTestCase(unittest.TestCase):
@@ -590,17 +590,17 @@ def test_live_migration_with_hugepages(self):
590590
Test that a VM that utilizes hugepages is still using hugepages after live migration.
591591
"""
592592

593-
controllerVM.succeed("echo {} > /proc/sys/vm/nr_hugepages".format(nr_hugepages))
594-
computeVM.succeed("echo {} > /proc/sys/vm/nr_hugepages".format(nr_hugepages))
593+
controllerVM.succeed("echo {} > /proc/sys/vm/nr_hugepages".format(NR_HUGEPAGES))
594+
computeVM.succeed("echo {} > /proc/sys/vm/nr_hugepages".format(NR_HUGEPAGES))
595595
status, out = controllerVM.execute(
596596
"awk '/HugePages_Free/ { print $2; exit }' /proc/meminfo"
597597
)
598-
assert int(out) == nr_hugepages, "unable to allocate hugepages"
598+
assert int(out) == NR_HUGEPAGES, "unable to allocate hugepages"
599599

600600
status, out = computeVM.execute(
601601
"awk '/HugePages_Free/ { print $2; exit }' /proc/meminfo"
602602
)
603-
assert int(out) == nr_hugepages, "unable to allocate hugepages"
603+
assert int(out) == NR_HUGEPAGES, "unable to allocate hugepages"
604604

605605
controllerVM.succeed("virsh define /etc/domain-chv-hugepages-prefault.xml")
606606
controllerVM.succeed("virsh start testvm")
@@ -626,18 +626,18 @@ def test_live_migration_with_hugepages(self):
626626
status, out = controllerVM.execute(
627627
"awk '/HugePages_Free/ { print $2; exit }' /proc/meminfo"
628628
)
629-
assert int(out) == nr_hugepages, "not all huge pages have been freed"
629+
assert int(out) == NR_HUGEPAGES, "not all huge pages have been freed"
630630

631631
def test_live_migration_with_hugepages_failure_case(self):
632632
"""
633633
Test that migrating a VM with hugepages to a destination without huge pages will fail gracefully.
634634
"""
635635

636-
controllerVM.succeed("echo {} > /proc/sys/vm/nr_hugepages".format(nr_hugepages))
636+
controllerVM.succeed("echo {} > /proc/sys/vm/nr_hugepages".format(NR_HUGEPAGES))
637637
status, out = controllerVM.execute(
638638
"awk '/HugePages_Free/ { print $2; exit }' /proc/meminfo"
639639
)
640-
assert int(out) == nr_hugepages, "unable to allocate hugepages"
640+
assert int(out) == NR_HUGEPAGES, "unable to allocate hugepages"
641641

642642
controllerVM.succeed("virsh define /etc/domain-chv-hugepages-prefault.xml")
643643
controllerVM.succeed("virsh start testvm")
@@ -692,7 +692,7 @@ def test_hugepages(self):
692692
Test hugepage on-demand usage for a non-NUMA VM.
693693
"""
694694

695-
controllerVM.succeed("echo {} > /proc/sys/vm/nr_hugepages".format(nr_hugepages))
695+
controllerVM.succeed("echo {} > /proc/sys/vm/nr_hugepages".format(NR_HUGEPAGES))
696696
controllerVM.succeed("virsh define /etc/domain-chv-hugepages.xml")
697697
controllerVM.succeed("virsh start testvm")
698698

@@ -702,16 +702,14 @@ def test_hugepages(self):
702702
status, out = controllerVM.execute(
703703
"awk '/HugePages_Free/ { print $2; exit }' /proc/meminfo"
704704
)
705-
assert int(out) < nr_hugepages, "No huge pages have been used"
705+
assert int(out) < NR_HUGEPAGES, "No huge pages have been used"
706706

707707
def test_hugepages_prefault(self):
708708
"""
709709
Test hugepage usage with pre-faulting for a non-NUMA VM.
710710
"""
711711

712-
nr_hugepages = 1024
713-
714-
controllerVM.succeed("echo {} > /proc/sys/vm/nr_hugepages".format(nr_hugepages))
712+
controllerVM.succeed("echo {} > /proc/sys/vm/nr_hugepages".format(NR_HUGEPAGES))
715713
controllerVM.succeed("virsh define /etc/domain-chv-hugepages-prefault.xml")
716714
controllerVM.succeed("virsh start testvm")
717715

@@ -728,7 +726,7 @@ def test_numa_hugepages(self):
728726
Test hugepage on-demand usage for a NUMA VM.
729727
"""
730728

731-
controllerVM.succeed("echo {} > /proc/sys/vm/nr_hugepages".format(nr_hugepages))
729+
controllerVM.succeed("echo {} > /proc/sys/vm/nr_hugepages".format(NR_HUGEPAGES))
732730
controllerVM.succeed("virsh define /etc/domain-chv-numa-hugepages.xml")
733731
controllerVM.succeed("virsh start testvm")
734732

@@ -745,14 +743,14 @@ def test_numa_hugepages(self):
745743
status, out = controllerVM.execute(
746744
"awk '/HugePages_Free/ { print $2; exit }' /proc/meminfo"
747745
)
748-
assert int(out) < nr_hugepages, "No huge pages have been used"
746+
assert int(out) < NR_HUGEPAGES, "No huge pages have been used"
749747

750748
def test_numa_hugepages_prefault(self):
751749
"""
752750
Test hugepage usage with pre-faulting for a NUMA VM.
753751
"""
754752

755-
controllerVM.succeed("echo {} > /proc/sys/vm/nr_hugepages".format(nr_hugepages))
753+
controllerVM.succeed("echo {} > /proc/sys/vm/nr_hugepages".format(NR_HUGEPAGES))
756754
controllerVM.succeed("virsh define /etc/domain-chv-numa-hugepages-prefault.xml")
757755
controllerVM.succeed("virsh start testvm")
758756

@@ -1882,6 +1880,15 @@ def test_bdf_valid_device_id_with_function_id(self):
18821880
def suite():
18831881
# Test cases in alphabetical order
18841882
testcases = [
1883+
# First everything with huge-pages to prevent memory-fragmentation
1884+
# preventing huge-page allocation
1885+
LibvirtTests.test_numa_hugepages,
1886+
LibvirtTests.test_numa_hugepages_prefault,
1887+
LibvirtTests.test_hugepages,
1888+
LibvirtTests.test_hugepages_prefault,
1889+
LibvirtTests.test_live_migration_with_hugepages,
1890+
LibvirtTests.test_live_migration_with_hugepages_failure_case,
1891+
# Next, all other test cases.
18851892
LibvirtTests.test_bdf_explicit_assignment,
18861893
LibvirtTests.test_bdf_implicit_assignment,
18871894
LibvirtTests.test_bdf_invalid_device_id,
@@ -1892,8 +1899,6 @@ def suite():
18921899
LibvirtTests.test_disk_resize_qcow2,
18931900
LibvirtTests.test_disk_resize_raw,
18941901
LibvirtTests.test_hotplug,
1895-
LibvirtTests.test_hugepages,
1896-
LibvirtTests.test_hugepages_prefault,
18971902
LibvirtTests.test_libvirt_event_stop_failed,
18981903
LibvirtTests.test_libvirt_restart,
18991904
LibvirtTests.test_live_migration,
@@ -1905,8 +1910,6 @@ def suite():
19051910
LibvirtTests.test_live_migration_virsh_non_blocking,
19061911
LibvirtTests.test_live_migration_with_hotplug,
19071912
LibvirtTests.test_live_migration_with_hotplug_and_virtchd_restart,
1908-
LibvirtTests.test_live_migration_with_hugepages,
1909-
LibvirtTests.test_live_migration_with_hugepages_failure_case,
19101913
LibvirtTests.test_live_migration_with_serial_tcp,
19111914
LibvirtTests.test_live_migration_with_vcpu_pinning,
19121915
LibvirtTests.test_managedsave,
@@ -1915,8 +1918,6 @@ def suite():
19151918
LibvirtTests.test_network_hotplug_persistent_transient_detach_vm_restart,
19161919
LibvirtTests.test_network_hotplug_persistent_vm_restart,
19171920
LibvirtTests.test_network_hotplug_transient_vm_restart,
1918-
LibvirtTests.test_numa_hugepages,
1919-
LibvirtTests.test_numa_hugepages_prefault,
19201921
LibvirtTests.test_numa_topology,
19211922
LibvirtTests.test_serial_file_output,
19221923
LibvirtTests.test_serial_tcp,

0 commit comments

Comments
 (0)