@@ -44,7 +44,9 @@ def id(self):
44
44
"""Computes a unique id for this test instance"""
45
45
return "all_dev" if self .all_devices else f"{ self .vcpus } vcpu_{ self .mem } mb"
46
46
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 :
48
50
"""Creates the initial snapshot that will be loaded repeatedly to sample latencies"""
49
51
vm = microvm_factory .build (
50
52
guest_kernel ,
@@ -59,6 +61,7 @@ def boot_vm(self, microvm_factory, guest_kernel, rootfs, pci_enabled) -> Microvm
59
61
mem_size_mib = self .mem ,
60
62
rootfs_io_engine = "Sync" ,
61
63
huge_pages = self .huge_pages ,
64
+ secret_free = secret_free ,
62
65
)
63
66
64
67
for _ in range (self .nets ):
@@ -107,7 +110,7 @@ def test_restore_latency(
107
110
We only test a single guest kernel, as the guest kernel does not "participate" in snapshot restore.
108
111
"""
109
112
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
111
114
)
112
115
113
116
metrics .set_dimensions (
@@ -154,14 +157,21 @@ def test_post_restore_latency(
154
157
metrics ,
155
158
uffd_handler ,
156
159
huge_pages ,
160
+ secret_free ,
157
161
):
158
162
"""Collects latency metric of post-restore memory accesses done inside the guest"""
159
163
if huge_pages != HugePagesConfig .NONE and uffd_handler is None :
160
164
pytest .skip ("huge page snapshots can only be restored using uffd" )
161
165
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
+
162
172
test_setup = SnapshotRestoreTest (mem = 1024 , vcpus = 2 , huge_pages = huge_pages )
163
173
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
165
175
)
166
176
167
177
metrics .set_dimensions (
@@ -215,11 +225,15 @@ def test_population_latency(
215
225
huge_pages ,
216
226
vcpus ,
217
227
mem ,
228
+ secret_free ,
218
229
):
219
230
"""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
+
220
234
test_setup = SnapshotRestoreTest (mem = mem , vcpus = vcpus , huge_pages = huge_pages )
221
235
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
223
237
)
224
238
225
239
metrics .set_dimensions (
@@ -267,15 +281,21 @@ def test_snapshot_create_latency(
267
281
uvm_plain ,
268
282
metrics ,
269
283
snapshot_type ,
284
+ secret_free ,
270
285
):
271
286
"""Measure the latency of creating a Full snapshot"""
272
287
288
+ if secret_free and snapshot_type .needs_dirty_page_tracking :
289
+ pytest .skip ("secret freedom and dirty pgae tracking are mutually exclusive" )
290
+
273
291
vm = uvm_plain
292
+ vm .memory_monitor = None
274
293
vm .spawn ()
275
294
vm .basic_config (
276
295
vcpu_count = 2 ,
277
296
mem_size_mib = 512 ,
278
297
track_dirty_pages = snapshot_type .needs_dirty_page_tracking ,
298
+ secret_free = secret_free ,
279
299
)
280
300
vm .start ()
281
301
vm .pin_threads (0 )
0 commit comments