With all guest physical addresses marked as dormant, the guest operating system is presented the illusion that all pages in the system are initialized and zeroed. That is, from the guest operating system's perspective, its requests to zero all of the guest physical addresses were satisfied when the hyper-kernel made all of the guest physical addresses dormant, which is an inexpensive task relative to writing zeroes to all pages of real physical memory. However, the real pages of physical memory have yet to actually be zeroed. As described herein, zeroing of the pages of real physical memory across the nodes may be performed in parallel. The zeroing may also be performed in a “l(fā)azy” or deferred manner.
At the startup of the system, there are relatively few processes that are running. Thus, guest VCPUs running on physical CPUs may be available to perform housekeeping such as zeroing the pages of real physical memory across the nodes. In some embodiments, each node is directed (by respective hyper-kernels) to zero its respective real physical memory in parallel with the other nodes.
As shown in this example, each node includes a “to be zeroed” list (1908 of node_0 and 1910 of node_1) that includes real physical addresses on the node that are to be zeroed. After a real physical address is zeroed, it is removed from the “to be zeroed list” and added to the “zeroed list” (1912 of node_0 and 1914 of node_1) (also referred to above as a “pre-zero” list), which indicates what pages of physical memory on the node have been zeroed and are free/available for use (e.g., to be mapped to a guest physical address so that its contents may be accessed).