The zeroing of pages of physical memory may be done in parallel, thereby increasing the speed at which memory initialization may be performed. Since a zeroed page is separated from the address of the zeroed page, there is no need to predict which nodes these zeroed pages will reside. That is, there is no need to define, at boot time, where these zeroed pages are. At boot time, all the physical memory on all the nodes may be zeroed, without considering where they might be mapped in the future.
This is in contrast to existing systems, where, for example, the code to perform the zeroing may be single threaded code (such as the test and initialization code described above with respect to memory tests), which would require pages to be brought one at a time to the processor running the thread to be written into with zeroes. This contributes to the slow bootup times of existing large memory systems. In contrast, using the techniques described herein, all pages may be zeroed on all nodes in parallel, without being restricted or limited by the location(s) at which the guest operating system calls the zeroing code.
Further, as described above, real pages of physical memory are zeroed in the background, and may be zeroed in a deferred manner—that is, not necessarily when/synchronously with the operating system booting up. For example, pages may be zeroed on an ongoing basis, as the need arises. This is in contrast to how existing operating systems are written, which typically do not defer the performing of the zeroing work.
Thus, through the separation provided by the use of dormancy, and the virtualization techniques described herein, the initialization of pages may be deferred, or time-shifted, as well as performed in parallel, which allows for fast system boot up.