@@ -44,7 +44,9 @@ def id(self):
4444 """Computes a unique id for this test instance"""
4545 return "all_dev" if self .all_devices else f"{ self .vcpus } vcpu_{ self .mem } mb"
4646
47- def boot_vm (self , microvm_factory , guest_kernel , rootfs , pci_enabled ) -> Microvm :
47+ def boot_vm (
48+ self , microvm_factory , guest_kernel , rootfs , pci_enabled , secret_free
49+ ) -> Microvm :
4850 """Creates the initial snapshot that will be loaded repeatedly to sample latencies"""
4951 vm = microvm_factory .build (
5052 guest_kernel ,
@@ -59,6 +61,7 @@ def boot_vm(self, microvm_factory, guest_kernel, rootfs, pci_enabled) -> Microvm
5961 mem_size_mib = self .mem ,
6062 rootfs_io_engine = "Sync" ,
6163 huge_pages = self .huge_pages ,
64+ secret_free = secret_free ,
6265 )
6366
6467 for _ in range (self .nets ):
@@ -107,7 +110,7 @@ def test_restore_latency(
107110 We only test a single guest kernel, as the guest kernel does not "participate" in snapshot restore.
108111 """
109112 vm = test_setup .boot_vm (
110- microvm_factory , guest_kernel_linux_5_10 , rootfs , pci_enabled
113+ microvm_factory , guest_kernel_linux_5_10 , rootfs , pci_enabled , False
111114 )
112115
113116 metrics .set_dimensions (
@@ -154,14 +157,21 @@ def test_post_restore_latency(
154157 metrics ,
155158 uffd_handler ,
156159 huge_pages ,
160+ secret_free ,
157161):
158162 """Collects latency metric of post-restore memory accesses done inside the guest"""
159163 if huge_pages != HugePagesConfig .NONE and uffd_handler is None :
160164 pytest .skip ("huge page snapshots can only be restored using uffd" )
161165
166+ if secret_free and uffd_handler is None :
167+ pytest .skip ("Restoring from a file is not compatible with Secret Freedom" )
168+
169+ if secret_free and huge_pages != HugePagesConfig .NONE :
170+ pytest .skip ("Huge pages are not supported with Secret Freedom yet" )
171+
162172 test_setup = SnapshotRestoreTest (mem = 1024 , vcpus = 2 , huge_pages = huge_pages )
163173 vm = test_setup .boot_vm (
164- microvm_factory , guest_kernel_linux_5_10 , rootfs , pci_enabled
174+ microvm_factory , guest_kernel_linux_5_10 , rootfs , pci_enabled , secret_free
165175 )
166176
167177 metrics .set_dimensions (
@@ -215,11 +225,15 @@ def test_population_latency(
215225 huge_pages ,
216226 vcpus ,
217227 mem ,
228+ secret_free ,
218229):
219230 """Collects population latency metrics (e.g. how long it takes UFFD handler to fault in all memory)"""
231+ if secret_free and huge_pages != HugePagesConfig .NONE :
232+ pytest .skip ("Huge pages are not supported with Secret Freedom yet" )
233+
220234 test_setup = SnapshotRestoreTest (mem = mem , vcpus = vcpus , huge_pages = huge_pages )
221235 vm = test_setup .boot_vm (
222- microvm_factory , guest_kernel_linux_5_10 , rootfs , pci_enabled
236+ microvm_factory , guest_kernel_linux_5_10 , rootfs , pci_enabled , secret_free
223237 )
224238
225239 metrics .set_dimensions (
@@ -267,15 +281,21 @@ def test_snapshot_create_latency(
267281 uvm_plain ,
268282 metrics ,
269283 snapshot_type ,
284+ secret_free ,
270285):
271286 """Measure the latency of creating a Full snapshot"""
272287
288+ if secret_free and snapshot_type .needs_dirty_page_tracking :
289+ pytest .skip ("secret freedom and dirty pgae tracking are mutually exclusive" )
290+
273291 vm = uvm_plain
292+ vm .memory_monitor = None
274293 vm .spawn ()
275294 vm .basic_config (
276295 vcpu_count = 2 ,
277296 mem_size_mib = 512 ,
278297 track_dirty_pages = snapshot_type .needs_dirty_page_tracking ,
298+ secret_free = secret_free ,
279299 )
280300 vm .start ()
281301 vm .pin_threads (0 )
0 commit comments