1. Consider, for example, a software defined server with 5 TB of main memory, and consider a flash memory array of 10 TB. In one example embodiment, the server is configured to have 10 TB of main memory, and to the 5 TB of main memory as a new cache of the 10 TB of flash memory. The use of such a cache accelerates the system.
2. In an alternative embodiment, the flash memory array may be used as if it were additional main memory for a total of 15 TB of main memory.
3. In another example embodiment, the flash memory can be used to implement a persistent reference memory. For example, if a system detects an impending failure, the contents of the flash memory may be updated with the most recent pages of main memory that it does not already have. In this way, when the system restarts, the persistent memory can be used to help restore the system to the previously saved state (e.g., analogous to what is done when a laptop suspends/resumes). Thus, the main memory can be backed up to persistent storage so that the system can be restarted easily in the event of a crash, error, or other failure.
For example, typically, in the event of a failure (e.g., detection of a power failure or system crash), a snapshot of dynamic memory such as DRAM (dynamic random access memory), which is volatile (e.g., the contents of the volatile memory are lost when power is removed), is taken and is written to disk. This can be avoided using the techniques described herein, as a reference copy can be stored or flushed to a network attached memory that includes persistent (e.g., static, non-volatile) memory such as flash memory. Details regarding a network-attached memory will be described in further detail below.