1010import pytest
1111
1212import host_tools .drive as drive_tools
13- from framework .microvm import Microvm
13+ from framework .microvm import HugePagesConfig , Microvm
1414
1515USEC_IN_MSEC = 1000
1616NS_IN_MSEC = 1_000_000
@@ -36,6 +36,7 @@ class SnapshotRestoreTest:
3636 nets : int = 3
3737 blocks : int = 3
3838 all_devices : bool = False
39+ huge_pages : HugePagesConfig = HugePagesConfig .NONE
3940
4041 @property
4142 def id (self ):
@@ -55,6 +56,7 @@ def configure_vm(self, microvm_factory, guest_kernel, rootfs, metrics) -> Microv
5556 vcpu_count = self .vcpus ,
5657 mem_size_mib = self .mem ,
5758 rootfs_io_engine = "Sync" ,
59+ huge_pages = self .huge_pages ,
5860 )
5961
6062 for _ in range (self .nets ):
@@ -77,6 +79,7 @@ def configure_vm(self, microvm_factory, guest_kernel, rootfs, metrics) -> Microv
7779 "block_devices" : str (self .blocks ),
7880 "vsock_devices" : str (int (self .all_devices )),
7981 "balloon_devices" : str (int (self .all_devices )),
82+ "huge_pages_config" : str (self .huge_pages ),
8083 ** vm .dimensions ,
8184 }
8285 )
@@ -137,11 +140,15 @@ def test_restore_latency(
137140
138141@pytest .mark .nonci
139142@pytest .mark .parametrize ("uffd_handler" , [None , "valid" ])
143+ @pytest .mark .parametrize ("huge_pages" , HugePagesConfig )
140144def test_post_restore_latency (
141- microvm_factory , rootfs , guest_kernel_linux_5_10 , metrics , uffd_handler
145+ microvm_factory , rootfs , guest_kernel_linux_5_10 , metrics , uffd_handler , huge_pages
142146):
143147 """Collects latency metric of post-restore memory accesses done inside the guest"""
144- test_setup = SnapshotRestoreTest (mem = 1024 , vcpus = 2 )
148+ if huge_pages != HugePagesConfig .NONE and uffd_handler is None :
149+ pytest .skip ("huge page snapshots can only be restored using uffd" )
150+
151+ test_setup = SnapshotRestoreTest (mem = 1024 , vcpus = 2 , huge_pages = huge_pages )
145152 vm = test_setup .configure_vm (
146153 microvm_factory , guest_kernel_linux_5_10 , rootfs , metrics
147154 )
0 commit comments