In one embodiment, a secondary copy that is dormant is converted into a secondary copy that has zeroes in it. This allows a word in it to be accessed at hardware speed, without taking a stall. For example, suppose that a file is made up of 20 pages, and one of the pages in the middle of the file happens to be full of zeroes. Suppose also that there is code being executed that reads through the file and adds up all the bytes of the file, where the code does not know which pages are zeroes and which are not (although, in some embodiments, the hyper-kernel may be configured to do so). A number of threads may execute this code at the same time. The zeroed pages may be replicated so that they may be read at hardware speed. In one example implementation, once a page has been materialized (e.g., a dormant page is converted so that it maps to a real page of physical memory), even if the page is full of zeroes, it may be replicated. Thus, in situations where a page of zeroes is to be read, the page of zeroes may be replicated so that a stall does not occur, and it is not required that a page of zeroes be obtained and mapped on-demand to a dormant GPA.
Dormant pages and their uses in improving the resource efficiency of a computing architecture have been described, from the initial condition, to consumption of memory as it is consumed by the guest (conversion of dormant pages), to re-dormanting of pages.
Using the techniques described herein, the cost of zeroing pages, and the cost of moving zeroed pages, are shifted to physical processor time that would be unused by the guest OS or application. This dramatically speeds up many performance-limiting behaviors of the guest operating system and applications. In particular, booting up.