@@ -68,22 +68,30 @@ def test_hugetlbfs_boot(uvm_plain):
68
68
)
69
69
70
70
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
+ ):
72
74
"""
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.
74
78
"""
75
79
76
80
### Create Snapshot ###
77
81
vm = microvm_factory .build (guest_kernel_linux_5_10 , rootfs )
78
82
vm .memory_monitor = None
79
83
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
+ )
81
89
vm .add_net_iface ()
82
90
vm .start ()
83
91
84
92
check_hugetlbfs_in_use (vm .firecracker_pid , "/anon_hugepage" )
85
93
86
- snapshot = vm .snapshot_full ( )
94
+ snapshot = vm .make_snapshot ( snapshot_type )
87
95
88
96
vm .kill ()
89
97
@@ -95,46 +103,6 @@ def test_hugetlbfs_snapshot(microvm_factory, guest_kernel_linux_5_10, rootfs):
95
103
check_hugetlbfs_in_use (vm .firecracker_pid , "/anon_hugepage" )
96
104
97
105
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
-
138
106
@pytest .mark .parametrize ("huge_pages" , HugePagesConfig )
139
107
def test_ept_violation_count (
140
108
microvm_factory ,
0 commit comments