Skip to content

Commit 34a3286

Browse files
committed
test: unify hugepage snapshot testing
Just have a single test that is parametrized by snapshot type. This will then automatically also test mincore diff snapshots. Signed-off-by: Patrick Roy <[email protected]>
1 parent 406ddd3 commit 34a3286

File tree

1 file changed

+12
-43
lines changed

1 file changed

+12
-43
lines changed

tests/integration_tests/performance/test_huge_pages.py

Lines changed: 12 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -68,22 +68,31 @@ def test_hugetlbfs_boot(uvm_plain):
6868
)
6969

7070

71-
def test_hugetlbfs_snapshot(microvm_factory, guest_kernel_linux_5_10, rootfs):
71+
def test_hugetlbfs_snapshot(
72+
microvm_factory, guest_kernel_linux_5_10, rootfs, snapshot_type
73+
):
7274
"""
7375
Test hugetlbfs snapshot restore via uffd
76+
77+
Despite guest memory being backed by huge pages, enabling differential snapshots
78+
causes KVM to set up guest mappings at 4k granularity
7479
"""
7580

7681
### Create Snapshot ###
7782
vm = microvm_factory.build(guest_kernel_linux_5_10, rootfs)
7883
vm.memory_monitor = None
7984
vm.spawn()
80-
vm.basic_config(huge_pages=HugePagesConfig.HUGETLBFS_2MB, mem_size_mib=128)
85+
vm.basic_config(
86+
huge_pages=HugePagesConfig.HUGETLBFS_2MB,
87+
mem_size_mib=128,
88+
track_dirty_pages=snapshot_type.needs_dirty_page_tracking,
89+
)
8190
vm.add_net_iface()
8291
vm.start()
8392

8493
check_hugetlbfs_in_use(vm.firecracker_pid, "/anon_hugepage")
8594

86-
snapshot = vm.snapshot_full()
95+
snapshot = vm.make_snapshot(snapshot_type)
8796

8897
vm.kill()
8998

@@ -95,46 +104,6 @@ def test_hugetlbfs_snapshot(microvm_factory, guest_kernel_linux_5_10, rootfs):
95104
check_hugetlbfs_in_use(vm.firecracker_pid, "/anon_hugepage")
96105

97106

98-
def test_hugetlbfs_diff_snapshot(microvm_factory, uvm_plain):
99-
"""
100-
Test hugetlbfs differential snapshot support.
101-
102-
Despite guest memory being backed by huge pages, differential snapshots still work at 4K granularity.
103-
"""
104-
105-
### Create Snapshot ###
106-
uvm_plain.memory_monitor = None
107-
uvm_plain.spawn()
108-
uvm_plain.basic_config(
109-
huge_pages=HugePagesConfig.HUGETLBFS_2MB,
110-
mem_size_mib=128,
111-
track_dirty_pages=True,
112-
)
113-
uvm_plain.add_net_iface()
114-
uvm_plain.start()
115-
116-
# Wait for microvm to boot
117-
118-
base_snapshot = uvm_plain.snapshot_diff()
119-
uvm_plain.resume()
120-
121-
# Run command to dirty some pages
122-
uvm_plain.ssh.check_output("sync")
123-
124-
snapshot_diff = uvm_plain.snapshot_diff()
125-
snapshot_merged = snapshot_diff.rebase_snapshot(base_snapshot)
126-
127-
uvm_plain.kill()
128-
129-
vm = microvm_factory.build()
130-
vm.spawn()
131-
vm.restore_from_snapshot(
132-
snapshot_merged, resume=True, uffd_handler_name="on_demand"
133-
)
134-
135-
# Verify if the restored microvm works.
136-
137-
138107
@pytest.mark.parametrize("huge_pages", HugePagesConfig)
139108
def test_ept_violation_count(
140109
microvm_factory,

0 commit comments

Comments
 (0)