Patent Publication Number: US-8972669-B2

Title: Page buffering in a virtualized, memory sharing configuration

Description:
RELATED APPLICATIONS 
     This application claims the priority benefit of U.S. application Ser. No. 12/827,818 filed Jun. 30, 2010. 
    
    
     BACKGROUND 
     Embodiments of the inventive subject matter generally relate to the field of memory, and, more particularly, to page buffering in a memory sharing configuration. 
     Virtualization technology allows for sharing of memory across multiple partitions or virtual machines. System memory is generally considered one of the most critical performance resources for a computer. In a memory management scheme that includes paging of data out from and into memory from a nonvolatile storage medium (e.g., a hard disk drive), system performance can be affected relative to the amount of paging that is required. 
     SUMMARY 
     Embodiments include an apparatus that includes an apparatus that comprises a processor. The apparatus also includes a volatile memory that is configured to be accessible in an active memory sharing configuration. The apparatus includes a machine-readable encoded with instructions executable by the processor. The instructions including first virtual machine instructions configured to access the volatile memory with a first virtual machine. The instructions including second virtual machine instructions configured to access the volatile memory with a second virtual machine. The instructions including virtual machine monitor instructions configured to page data out from a shared memory to a reserved memory section in the volatile memory responsive to the first virtual machine or the second virtual machine paging the data out from the shared memory or paging the data in to the shared memory. The shared memory is shared across the first virtual machine and the second virtual machine. The volatile memory includes the shared memory. 
     Embodiments include a method that includes booting up a computer device, wherein the booting up includes executing a virtual input/output (I/O) server having a reserved memory section in a volatile memory of the computer device. After booting up the computer device, a virtual machine monitor performs operations. The operations include receiving a first request to store a first data in the volatile memory from a first virtual machine. The operations include storing the first data in a shared memory section of the volatile memory, in response to the first request. The operations also include receiving a second request to store a second data in the volatile memory from a second virtual machine. The operations include, responsive to determining that a size of the second data is greater than a size of available memory space in the shared memory section in the volatile memory, paging out the first data stored in the shared memory section in the volatile memory to the reserved memory section in the volatile memory. Also in response to determining that a size of the second data is greater than a size of available memory space in the shared memory section in the volatile memory, the operations include storing the second data in the shared memory section in the volatile memory. 
     Embodiments include a computer program product for memory sharing. The computer program product includes a computer readable storage medium having computer readable program code embodied therewith. The computer readable program code configured to receive a first request to store a first data in the volatile memory by a first virtual machine. The computer readable program code configured to store the first data in a shared memory section of the volatile memory, in response to the first request. The computer readable program code also configured to receive a second request to store a second data in the volatile memory by a second virtual machine. The computer readable program code configured to perform the following operations, in response to a determination that a size of the second data is greater than a size of available storage in the shared memory section in the volatile memory. The following operations include page out of the first data stored in the shared memory section in the volatile memory to a reserved memory section in the volatile memory, wherein the reserved memory section is assigned to only be accessible by a module configured to control access to physical resources of a computer on which the computer program product is configured to execute. The following operations include storage of the second data in the shared memory section in the volatile memory. 
     Embodiments include a computer program product for memory sharing. The computer program product includes a computer readable storage medium having computer readable program code embodied therewith. The computer readable program code configured to boot up a computer device, wherein the boot up includes execution of a virtual input/output (I/O) server having a reserved memory section in a volatile memory of the computer device. The computer readable program code configured to perform the following operations after boot operations of the computer device have completed. The operations including receiving a first request to store a first data in the volatile memory by a first virtual machine. The operations including storing the first data in a shared memory section of the volatile memory, in response to the first request. The operations including receiving a second request to store a second data in the volatile memory by a second virtual machine. The operations including performing the following operations, in response to a determination that a size of the second data is greater than a size of available storage in the shared memory section in the volatile memory. The following operations including paging out the first data stored in the shared memory section in the volatile memory to the reserved memory section in the volatile memory. The following operations also including storing the second data in the shared memory section in the volatile memory. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       The present embodiments may be better understood, and numerous objects, features, and advantages made apparent to those skilled in the art by referencing the accompanying drawings. 
         FIG. 1  is a block diagram illustrating a computer device with an active memory sharing configuration, according to some example embodiments. 
         FIG. 2  is conceptual diagram of a first stage of paging in an active memory sharing configuration having a virtual input/output (I/O) server, according to some example embodiments. 
         FIG. 3  is conceptual diagram of a second stage of paging in an active memory sharing configuration having a virtual input/output (I/O) server, according to some example embodiments. 
         FIG. 4  is conceptual diagram of a third stage of paging in an active memory sharing configuration having a virtual input/output (I/O) server, according to some example embodiments. 
         FIG. 5  is conceptual diagram of a fourth stage of paging in an active memory sharing configuration having a virtual input/output (I/O) server, according to some example embodiments. 
         FIG. 6  is a flowchart of operations for paging from a shared memory into a reserved memory for a virtual I/O server, according to some example embodiments. 
         FIG. 7  is a flowchart of operations for paging from a reserved memory for a virtual I/O server to a nonvolatile machine-readable medium, according to some example embodiments. 
     
    
    
     DESCRIPTION OF EMBODIMENT(S) 
     The description that follows includes exemplary systems, methods, techniques, instruction sequences, and computer program products that embody techniques of the present inventive subject matter. However, it is understood that the described embodiments may be practiced without these specific details. In other instances, well-known instruction instances, protocols, structures, and techniques have not been shown in detail in order not to obfuscate the description. 
     Some example embodiments include virtualized environments that allow for sharing of memory across multiple virtual machines on one or more computer devices (e.g., servers). Some example embodiments include a virtual input output server (“VIOS” or “virtual I/O server”). A VIOS is an executing instance of instructions that facilitates sharing of physical resources between logical partitions (LPAR). An LPAR is generally a subset of a computer&#39;s hardware resources, where the subset is virtualized and an LPAR can operate as a separate computing device. In effect, a physical machine can be partitioned into multiple LPARs, each housing a separate operating system. A VIOS can operate as a partitioned hardware adapter and can service end devices or logical devices such as an Internet small computer system interface (iSCSI) adapter, compatible disks, Fibre-Channel disks, Ethernet drives, compact disks (CD), digital video disks (DVD), and optical drives or devices. A VIOS, therefore, can allow for sharing of physical resources of the device(s) among multiple virtual machines. For instance, a computer device can execute multiple operating system images at a same time while the operating systems are isolated from each other across multiple virtual machines. The multiple virtual machines can share a pool of volatile memory (e.g., Random Access Memory) that is managed across the multiple virtual machines. Management of the shared pool of volatile memory includes paging data in and out of the shared volatile memory. Some example embodiments use a buffered file system within a virtual I/O server to serve as the paging device for the shared volatile memory. A section of the volatile memory can be reserved (“reserved memory section”) for use by the virtual I/O server during the boot up of the computer device. Accordingly, this reserved memory section for the virtual I/O server is reclaimed and applied towards improving the paging performance of an active memory sharing configuration. 
     This is in contrast to previous systems where a physical hard drive or a logical volume in such a hard drive is used as the paging device. Such systems are slower in comparison to some example embodiments because such systems have to access a disk drive to perform the paging activity. A virtual I/O server can have a file within a file system serve as a virtual drive. However, previous active memory sharing configurations do not allow for file-backed devices to serve as paging devices. Also, in previous systems, the virtual I/O server does not provide for buffering of file-backed devices. Accordingly, some example embodiments include support for file-backed devices in an active memory sharing configuration and support for buffering in a virtual I/O server. 
     Some example embodiments are configurable regarding which of the virtual machines can use, as the paging device, the reserved memory section for the virtual I/O server instead of a hard disk drive. The buffering by the virtual I/O server can be applied and removed to a file-backed paging device by mounting the file system with a proper release-behind mount options. Also, the amount of memory of the reserved memory section that can be used for paging is configurable. Accordingly, some example embodiments can now incorporate memory that is unused after boot up operations into paging operations, thereby increasing the performance of such systems. 
     While described such that the shared memory and the reserved memory are part of a same volatile memory, in some other example embodiments, the shared memory and the reserved memory are part of different memories in a same or different machine. Also, while described such that the reserved memory is reserved for access by the virtual I/O server, in some other embodiments, the reserved memory used for paging can be any other memory that is not accessible for sharing by multiple virtual machines in a virtualized, memory sharing configuration. For example, other modules or applications can have memory that is reserved for their use that can be used at least some of the time during paging operations. 
       FIG. 1  is a block diagram illustrating a computer device with an active memory sharing configuration, according to some example embodiments. A computer device  100  includes a processor  102  (possibly including multiple processors, multiple cores, multiple nodes, and/or implementing multi-threading, etc.). The computer device  100  includes a nonvolatile machine-readable medium  118 , a nonvolatile machine-readable medium  120  and a nonvolatile machine-readable medium  122  that are communicatively coupled to the bus  101  through an adapter  124 . The nonvolatile machine-readable media  118 - 122  can be various types of hard disk drives (e.g., optical storage, magnetic storage, etc.). The computer device  100  also includes a bus  101  (e.g., PCI, ISA, PCI-Express, HyperTransport®, InfiniBand®, NuBus, etc.) and a network interface  103  (e.g., an ATM interface, an Ethernet interface, a Frame Relay interface, SONET interface, wireless interface, etc.). 
     The computer device  100  includes a virtual machine monitor  104 , a virtual I/O server  106  and a number of virtual machines (a virtual machine  110 , a virtual machine  111  and a virtual machine  112 ). In some example embodiments, each of the virtual machines  110 - 112  serves as a software implementation of a machine. Each of the virtual machines  110 - 112  can provide a system platform that enables execution of an operating system. As further described below, the virtual machines  110 - 112  share physical resources of the computer device  100 . 
     The virtual machine monitor  104  (also called a hypervisor) manages the interaction between each virtual machine and the underlying resources provided by the hardware platform (e.g., the volatile memory, the nonvolatile machine-readable media, network interfaces, etc.). The operations of the virtual machine monitor  104 , the virtual I/O server  106  and the virtual machines  110 - 112  are described in more detail below. Any one of these operations can be partially (or entirely) implemented in hardware and/or on the processor  102 . For example, the operations can be implemented with an application specific integrated circuit, in logic implemented in the processor  102 , in a co-processor on a peripheral device or card, etc. 
     The computer device  100  includes a volatile memory  108 . The volatile memory  108  can be system memory (e.g., one or more of cache, SRAM, DRAM, zero capacitor RAM, Twin Transistor RAM, eDRAM, EDO RAM, DDR RAM, EEPROM, NRAM, RRAM, SONOS, PRAM, etc.) or any one or more of the below described possible realizations of machine-readable media. The volatile memory  108  includes at least the following sections: a reserved memory section  114  and a shared memory  116 . 
     As further described below, the reserved memory section  114  is a section that is reserved for the virtual I/O server  106 . The virtual I/O server  106  uses the reserved memory section  114  during the boot up operations of the computer device  100 . Even after the boot up operations, the reserved memory section  114  is not released for generally memory use and remains reserved for the virtual I/O server  106 . In some example embodiments, the virtual I/O server  106  allows the reserved memory section  114  to be used as a paging device for paging data from the shared memory  116 . 
     The virtual machine monitor  104  controls access (e.g., read or write) to the shared memory  116  by the virtual machines  110 - 112 . Also, the virtual machine monitor  104  pages out data from the shared memory  116  when space is need therein. For example, assume that the virtual machine  110  had filled the shared memory  116 . Subsequently, assume that the virtual machine  111  needs to stored data in the shared memory  116 . The virtual machine monitor  104  pages out at least some of the data (e.g., data stored by the virtual machine  110 ). In some example embodiments, instead of paging out the data to one of the nonvolatile machine-readable media  118 - 122 , the virtual machine monitor  104  pages the data to the reserved memory section  114 . Also, the virtual I/O server  106  can page out data from the reserved memory section  114  to one of the nonvolatile machine-readable media  118 - 122 . Accordingly, the paging device for the shared memory is in the reserved memory section  114 , thereby increasing performance of the computer device  100  when paging operations occur. 
     Further, realizations may include fewer or additional components not illustrated in  FIG. 1  (e.g., video cards, audio cards, additional network interfaces, peripheral devices, etc.). The processor  102 , the volatile memory  108 , the nonvolatile machine-readable media  118 - 122 , the virtual machine monitor  104 , the virtual I/O server  106 , the virtual machines  110 - 112 , and the network interface  103  are coupled to the bus  101 . Although illustrated as being coupled to a bus  101 , the volatile memory  108  can be coupled to the processor  102 . 
       FIGS. 2-5  are a series of conceptual diagrams illustrating different stages of paging in an active memory configuration having a virtual I/O server, according to some example embodiments. In particular,  FIGS. 2-5  illustrate a page out operation from a shared memory to a reserved memory of a volatile memory of a computer device and a page out operation from the reserved memory to a nonvolatile machine-readable medium. For elements that are the same across  FIGS. 2-5 , a same numbering is used. 
       FIG. 2  is conceptual diagram of a first stage of paging in an active memory sharing configuration having a virtual input/output (I/O) server, according to some example embodiments.  FIG. 2  includes a shared memory  206  and a reserved memory  208  that are parts of a volatile memory of a computer device (as described above).  FIG. 2  also includes a nonvolatile machine-readable medium  210 , a virtual machine  204 , a virtual machine monitor  202  and a virtual I/O server  212 . The virtual machine monitor  202  is communicatively coupled to the shared memory  206 . The virtual I/O server is communicatively coupled to the reserved memory  208  and the nonvolatile machine-readable medium  210 . Although not shown, the virtual machine  204  is communicatively coupled to the shared memory  206 . 
     For this example, prior to the operations illustrated in the first stage in  FIG. 2 , the shared memory  206  and the reserved memory  208  already have data stored therein. In particular, for the shared memory  206 , the data is stored in a page A  222  and a page B  224 . For the reserved memory  208 , the data is stored in a page X  240  and a page Y  242 . For example, this data can be stored therein because of previous data storage operations performed by other virtual machines. Also, assume that because of the storage of the pages X-Y  240 - 242 , reserved memory  208  is filled to capacity that will initiate a page out operation to the nonvolatile machine-readable medium  210  if additional data is stored in the reserved memory  208  (as further described below). 
     In the first stage shown in  FIG. 2 , the virtual machine monitor  202  has granted to the virtual machine  204  access to the shared memory  206  (a shared resource). During execution, the virtual machine  204  stores data  220  into the shared memory  206 . For example, an application (e.g., a word processing application) executing on the virtual machine  204  can cause storage of data (e.g., some or all of the contents of a document being processed by the application) into the shared memory  206 . This data storage is shown as the storage of data into page N  226  within the shared memory  206 . Also, for this example, assume that the storage of data into page N  226  causes the shared memory  206  to be filled to a capacity to require a page out operation if any additional data is stored in the shared memory  206 . 
       FIG. 3  is conceptual diagram of a second stage of paging in an active memory sharing configuration having a virtual input/output (I/O) server, according to some example embodiments.  FIG. 3  includes some of the same elements with the same numbering as  FIG. 2 . In this second stage, a virtual machine  314  is included. Although not shown, the virtual machine  314  is communicatively coupled to the shared memory  206 . 
     In the second stage shown in  FIG. 3 , the virtual machine monitor  202  has granted to the virtual machine  314  access to the shared memory  206  (a shared resource). During execution, the virtual machine  314  stores data  330  into the shared memory  206 . For example, an application (e.g., a power point application) executing on the virtual machine  314  can cause storage of data (e.g., some or all of the contents of a power point being processed by the application) into the shared memory  206 . As described above, the shared memory  206  is filled to capacity after the first stage. Accordingly, in response to this data write operation to the shared memory  206 , the virtual machine monitor  202  pages out the page A  222 . In some example embodiments, the virtual machine monitor  202  pages out the “oldest” page in the shared memory  206 . In particular, the virtual machine monitor  202  pages out the page having data that has been stored in the shared memory  206  for the longest time period. In some other example embodiments, the virtual machine monitor  202  can page out data based on other criteria. For example, the virtual machine monitor  202  can page out data relative to the virtual machine that has stored the data. For example, the virtual machine monitor  202  can first page out pages that have been stored by a virtual machine that currently does not have access to the shared memory  206  prior to paging out data stored by a virtual machine that currently does have access. The virtual machine monitor  202  pages out page A  222  to the reserved memory  208  (which is further described below in the subsequent stages). 
       FIG. 4  is conceptual diagram of a third stage of paging in an active memory sharing configuration having a virtual input/output (I/O) server, according to some example embodiments.  FIG. 4  includes some of the same elements with the same numbering as  FIGS. 2-3 . In this third stage, because the reserved memory  208  is at capacity (as described above), the virtual I/O server (controlling the reserved memory  208 ) first pages out data from the reserved memory  208  to the nonvolatile machine-readable medium  210 . In particular, the virtual I/O server  212  pages out page X  240  to the nonvolatile machine-readable medium  210 . In some example embodiments, the virtual I/O server  212  pages out the “oldest” page in the reserved memory  208 . In particular, the virtual I/O server  212  pages out the page having data that has been stored in the reserved memory  208  for the longest time period. In some other example embodiments, the virtual I/O server  212  can page out data based on other criteria (similar to those criteria for paging for shared memory  206 ). 
       FIG. 5  is conceptual diagram of a fourth stage of paging in an active memory sharing configuration having a virtual input/output (I/O) server, according to some example embodiments.  FIG. 5  includes some of the same elements with the same numbering as  FIGS. 2-4 . In this fourth stage, the new page  450  is created in the shared memory  206 . The virtual machine  314  has created the new page  450  as a result of attempting to store the data  330  into the shared memory  330  (see  FIGS. 3-4 ). In other words, the new page  450  includes the data  330 . Also, the virtual I/O server  212  has stored the page A  222  that was a result of the page out operation from the shared memory  206 . 
       FIGS. 2-5  illustrate a page out operation. Similar operations in reverse order can be performed for a page in operation for moving the data back into the shared memory  206 . For example, the data can be transferred from the nonvolatile machine-readable medium to the reserved memory and back into the shared memory, using one or more page in operations. 
     Operations for page buffering in a virtualized, memory sharing configuration are now described. In certain embodiments, the operations can be performed by executing instructions residing on machine-readable media (e.g., software), while in other embodiments, the operations can be performed by hardware and/or other logic (e.g., firmware). In some embodiments, the operations can be performed in series, while in other embodiments, one or more of the operations can be performed in parallel. Moreover, some embodiments can perform less than all the operations shown in any flow diagram. Two different flowcharts are now described.  FIG. 6  is a flowchart for operations for a page out operation from a shared memory to a reserved memory of a volatile memory.  FIG. 7  is a flowchart for operations for a page out operation from the reserved memory of the volatile memory to a nonvolatile machine-readable medium. 
     In particular,  FIG. 6  is a flowchart of operations for paging from a shared memory into a reserved memory for a virtual I/O server, according to some example embodiments. A flow diagram  600  includes operations that, in some example embodiments, are performed by the different modules described in reference to  FIGS. 1-5 . Therefore,  FIG. 6  is described with reference to  FIGS. 1-5 . The operations of the flow diagram  600  begin at block  602 . 
     At block  602 , a computer device is booted up. The boot up operations include the initiation of a virtual I/O server to allow for sharing of physical resources by multiple virtual machines. The virtual I/O server  106  can serve as an intermediary between the virtual machines and the operating system executing on the computer device. In the virtualized configuration of the computer device, the virtual machines can share volatile memories, nonvolatile machine-readable media, network interfaces, etc. In some example embodiments, the virtual I/O server  106  is assigned a section of the volatile memory  108  (i.e., the reserved memory section  114 ). The virtual I/O server  106  accesses the reserved memory section  114  during the boot up operations of the computer device. Also, the reserved memory section  114  remains dedicated for use by the virtual I/O server  106  after the boot operations are complete. Operations continue at block  604 . 
     At block  604 , the virtual I/O server  106  determines whether the boot operations are complete. If not complete, the virtual I/O server  106  continues making this determination at block  604 . In particular, the reserved memory section  114  is not accessible as a paging device for the pages from the shared memory  116  until the virtual I/O server  106  is completed its use of the reserved memory section  114  for boot operations. Otherwise, operations continue at block  606 . 
     At block  606 , the virtual machine monitor  104  receives a request to store a first data in a volatile memory  108  of the computer device by a first virtual machine  110 . For example, an application or program (e.g., a word processing application) can be executing in the first virtual machine  110  such that data is to be stored in memory. Accordingly, the first virtual machine  110  requests storage of data into the shared memory  116 . As described above, the virtual machine monitor  104  controls access to the shared memory  116  by the different virtual machines executing in the computer device  100 . With reference to the example shown in  FIGS. 2-5 , this request operation is shown by the virtual machine  204  transmitting the data  220  to the shared memory  206  in  FIG. 2 . Operations continue at block  608 . 
     At block  608 , the virtual machine monitor  104  stores the first data in a shared memory  116  of the volatile memory  108 . Prior to storage in the shared memory  116 , the virtual machine monitor  104  determines whether there is available space in the shared memory  116 . In this example, the virtual machine monitor  104  has determined that there is available space in the shared memory  116  for storage of the first data. With reference to the example shown in  FIGS. 2-5 , this storage operation is shown by the storage of data in the page N  226  in  FIGS. 2-3 . Operations continue at block  610 . 
     At block  610 , the virtual machine monitor  104  receives a request to store a second data in the volatile memory  108  of the computer device by a second virtual machine  111 . Accordingly, a different virtual machine is now attempting to access the shared memory  116 . The virtual machine monitor  104  authorizes accesses to the shared memory  116  by any of the virtual machines. With reference to the example shown in  FIGS. 2-5 , this request operation is shown by the virtual machine  314  transmitting the data  330  to the shared memory  206 . Operations continue at block  612 . 
     At block  612 , the virtual machine monitor  104  determines whether a size of the second data is greater than a size of available space for storage in the shared memory  116  of the volatile memory  108 . If the size of the second data is not greater than the size of available space for storage in the shared memory  116 , operations continue at block  616  (further described below). Otherwise, operations continue at block  614 . 
     At block  614 , the virtual machine monitor  104  pages out data in the shared memory to a reserved memory section of the volatile memory. In this example, the virtual machine monitor  104  selects the first data as the data to be paged out of the shared memory. As described above, the virtual machine monitor  104  can use any of a number of different criteria (e.g., “oldest”) for selection of the data to be paged out. Also, in some example embodiments, the virtual I/O server  106  controls access to the reserved memory section  114 . Accordingly, the virtual I/O server  106  can receive and store the data being paged out into the reserved memory section  114 . The operations of the virtual I/O server  106  are described in more detail below in the description of  FIG. 7 . With reference to the example shown in  FIGS. 2-5 , this page out operation is shown by the moving of the page A  222  from the shared memory  206  to the reserved memory  208  in  FIGS. 3-4 . Accordingly, instead of a nonvolatile machine-readable medium, a different section of memory is used as a page buffer or page device for the shared memory. Such a configuration increases the performance of paging because a write-to-disk operation is not required for the page out data. Operations continue at block  616 . 
     At block  616 , the virtual machine monitor  104  stores the second data in the shared memory. With reference to the example shown in  FIGS. 2-5 , this storage operation is shown by the storage of data in the new page  450  in  FIG. 5 . Operations of the flow diagram  600  are complete. 
       FIG. 7  is a flowchart of operations for paging from a reserved memory for a virtual I/O server to a nonvolatile machine-readable medium, according to some example embodiments. A flow diagram  700  includes operations that, in some example embodiments, are performed by the different modules described in reference to  FIGS. 1-5 . Therefore,  FIG. 7  is described with reference to  FIGS. 1-5 . The operations of the flow diagram  700  begin at block  702 . 
     At block  702 , the virtual I/O server  106  receives a first page request to first data in the reserved memory section in the volatile memory. As described above, the page request is received from the virtual machine monitor  104  that is paging out data from the shared memory to allow for storage of new data therein. For example, a new virtual machine can be executing that requires storage of data in the shared memory. With reference to the example shown in  FIGS. 2-5 , this page request is shown by transmitting the page A  222  from the shared memory  206  to the reserved memory  208  in  FIGS. 3-4 . Operations continue at block  704 . 
     At block  704 , the virtual I/O server  106  stores the first data in a reserved memory section in the volatile memory. Prior to storage in the reserved memory  114 , the virtual I/O server  106  determines whether there is available space in the reserved memory  114 . In this example, the virtual I/O server  106  has determined that there is available space in the reserved memory  114  for storage of the first data. Operations continue at block  706 . 
     At block  706 , the virtual I/O server  106  receives a second page request to store second data in the reserved memory section in the volatile memory. With reference to the example shown in  FIGS. 2-5 , this receiving of a second page request is shown by receiving the page A  222  into the reserved memory  208  from the shared memory  206 . Operations continue at block  708 . 
     At block  708 , the virtual I/O server  106  determines whether the size of the second data is greater than the size available for storage in the reserved memory section in the volatile memory. If the size of the second data is not greater than the size of available space for storage in the reserved memory  114 , operations continue at block  714  (further described below). Otherwise, operations continue at block  712 . 
     At block  710 , the virtual I/O server  106  pages out the first data in the reserved memory section in the volatile memory to a paging device in a nonvolatile machine-readable medium. In this example, the virtual I/O server  106  selects the first data as the data to be paged out of the reserved memory. The virtual I/O server  106  can use any of a number of different criteria (e.g., “oldest”) for selection of the data to be paged out. With reference to the example shown in  FIGS. 2-5 , this page out operation is shown by the moving of the page X  240  from the reserved memory  208  to the nonvolatile machine-readable medium  210  in  FIGS. 4-5 . Operations continue at block  712 . 
     At block  712 , the virtual I/O server  106  stores the second data in the reserved memory section from the shared memory. With reference to the example shown in  FIGS. 2-5 , this storage operation is shown by the storage of the page A  222  into the reserved memory  208  in  FIGS. 4-5 . Operations of the flow diagram  700  are complete. 
     Embodiments are not limited to the example flowcharts depicted in the above figures. Embodiments can perform additional operations, fewer operations, operations in parallel, etc. For instance, referring to  FIG. 6 , operations for paging out data from the shared memory and storing different data in the shared memory can be executed at least partially in parallel. 
     As will be appreciated by one skilled in the art, aspects of the present inventive subject matter may be embodied as a system, method or computer program product. Accordingly, aspects of the present inventive subject matter may take the form of an entirely hardware embodiment, an entirely software embodiment (including firmware, resident software, micro-code, etc.) or an embodiment combining software and hardware aspects that may all generally be referred to herein as a “circuit,” “module” or “system.” Furthermore, aspects of the present inventive subject matter may take the form of a computer program product embodied in one or more computer readable medium(s) having computer readable program code embodied thereon. 
     Any combination of one or more computer readable medium(s) may be utilized. The computer readable medium may be a computer readable signal medium or a computer readable storage medium. A computer readable storage medium may be, for example, but not limited to, an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system, apparatus, or device, or any suitable combination of the foregoing. More specific examples (a non-exhaustive list) of the computer readable storage medium would include the following: an electrical connection having one or more wires, a portable computer diskette, a hard disk, a random access memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or Flash memory), an optical fiber, a portable compact disc read-only memory (CD-ROM), an optical storage device, a magnetic storage device, or any suitable combination of the foregoing. In the context of this document, a computer readable storage medium may be any tangible medium that can contain, or store a program for use by or in connection with an instruction execution system, apparatus, or device. 
     A computer readable signal medium may include a propagated data signal with computer readable program code embodied therein, for example, in baseband or as part of a carrier wave. Such a propagated signal may take any of a variety of forms, including, but not limited to, electro-magnetic, optical, or any suitable combination thereof. A computer readable signal medium may be any computer readable medium that is not a computer readable storage medium and that can communicate, propagate, or transport a program for use by or in connection with an instruction execution system, apparatus, or device. 
     Program code embodied on a computer readable medium may be transmitted using any appropriate medium, including but not limited to wireless, wireline, optical fiber cable, RF, etc., or any suitable combination of the foregoing. 
     Computer program code for carrying out operations for aspects of the present inventive subject matter may be written in any combination of one or more programming languages, including an object oriented programming language such as Java, Smalltalk, C++ or the like and conventional procedural programming languages, such as the “C” programming language or similar programming languages. The program code may execute entirely on the user&#39;s computer, partly on the user&#39;s computer, as a stand-alone software package, partly on the user&#39;s computer and partly on a remote computer or entirely on the remote computer or server. In the latter scenario, the remote computer may be connected to the user&#39;s computer through any type of network, including a local area network (LAN) or a wide area network (WAN), or the connection may be made to an external computer (for example, through the Internet using an Internet Service Provider). 
     Aspects of the present inventive subject matter are described with reference to flowchart illustrations and/or block diagrams of methods, apparatus (systems) and computer program products according to embodiments of the inventive subject matter. It will be understood that each block of the flowchart illustrations and/or block diagrams, and combinations of blocks in the flowchart illustrations and/or block diagrams, can be implemented by computer program instructions. These computer program instructions may be provided to a processor of a general purpose computer, special purpose computer, or other programmable data processing apparatus to produce a machine, such that the instructions, which execute via the processor of the computer or other programmable data processing apparatus, create means for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks. 
     These computer program instructions may also be stored in a computer readable medium that can direct a computer, other programmable data processing apparatus, or other devices to function in a particular manner, such that the instructions stored in the computer readable medium produce an article of manufacture including instructions which implement the function/act specified in the flowchart and/or block diagram block or blocks. 
     The computer program instructions may also be loaded onto a computer, other programmable data processing apparatus, or other devices to cause a series of operational steps to be performed on the computer, other programmable apparatus or other devices to produce a computer implemented process such that the instructions which execute on the computer or other programmable apparatus provide processes for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks. 
     While the embodiments are described with reference to various implementations and exploitations, it will be understood that these embodiments are illustrative and that the scope of the inventive subject matter is not limited to them. In general, techniques for optimizing design space efficiency as described herein may be implemented with facilities consistent with any hardware system or hardware systems. Many variations, modifications, additions, and improvements are possible. 
     Plural instances may be provided for components, operations, or structures described herein as a single instance. Finally, boundaries between various components, operations, and data stores are somewhat arbitrary, and particular operations are illustrated in the context of specific illustrative configurations. Other allocations of functionality are envisioned and may fall within the scope of the inventive subject matter. In general, structures and functionality presented as separate components in the exemplary configurations may be implemented as a combined structure or component. Similarly, structures and functionality presented as a single component may be implemented as separate components. These and other variations, modifications, additions, and improvements may fall within the scope of the inventive subject matter.