FIG. 18 is a flow diagram illustrating an embodiment of a process for zeroing pages. In various embodiments, process 1800 is performed by a node and/or a network attached memory included in a TidalPod. The process begins at 1802 when an indication to allocate a dormant page is received. In some embodiments, a dormant page is a page of memory that has not yet been zeroed. In various embodiments, the page of memory includes a page in DRAM (e.g., on a node in a TidalPod), a page in a flash memory (e.g., non-volatile memory in a network attached memory), or any other appropriate page of memory. At 1804, the dormant page is allocated. At 1806, the allocated dormant page is then zeroed. In some embodiments, the zeroing of the dormant page is performed in parallel with the allocation of the dormant page. An entry may then be placed in a second level page table, where the page becomes valid and non-dormant. As described above, by using dormant pages (where pages can be tagged as dormant) performing zeroing after (or at the time of/in parallel with) allocation increases the boot up speed of a system, as the zeroing is not done at startup, but in a “l(fā)azy” fashion at the time that the page is used.
Described above are techniques for attaching a network-attached memory (e.g., flash appliance) to a tightly coupled cluster of nodes in which the total memory of the cluster represents the memory of a virtual machine supporting strong memory coherency. In some embodiments, as described above, the network-attached memory within the cluster is the reference memory of the virtual machine.
Fast Boot
Further details regarding parallel zeroing (e.g., boot time initialization) and dormant pages are described below.