@@ -68,22 +68,30 @@ 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 """
73- Test hugetlbfs snapshot restore via uffd
75+ Test hugetlbfs snapshot restore via
76+
77+ Despite guest memory being backed by huge pages, differential snapshots still work at 4K granularity.
7478 """
7579
7680 ### Create Snapshot ###
7781 vm = microvm_factory .build (guest_kernel_linux_5_10 , rootfs )
7882 vm .memory_monitor = None
7983 vm .spawn ()
80- vm .basic_config (huge_pages = HugePagesConfig .HUGETLBFS_2MB , mem_size_mib = 128 )
84+ vm .basic_config (
85+ huge_pages = HugePagesConfig .HUGETLBFS_2MB ,
86+ mem_size_mib = 128 ,
87+ track_dirty_pages = snapshot_type .needs_dirty_page_tracking ,
88+ )
8189 vm .add_net_iface ()
8290 vm .start ()
8391
8492 check_hugetlbfs_in_use (vm .firecracker_pid , "/anon_hugepage" )
8593
86- snapshot = vm .snapshot_full ( )
94+ snapshot = vm .make_snapshot ( snapshot_type )
8795
8896 vm .kill ()
8997
@@ -95,46 +103,6 @@ def test_hugetlbfs_snapshot(microvm_factory, guest_kernel_linux_5_10, rootfs):
95103 check_hugetlbfs_in_use (vm .firecracker_pid , "/anon_hugepage" )
96104
97105
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-
138106@pytest .mark .parametrize ("huge_pages" , HugePagesConfig )
139107def test_ept_violation_count (
140108 microvm_factory ,
0 commit comments