Described herein are techniques for extending aggregation of resources by a hyper-kernel to include memory technologies such as flash memory, PCM (phase change memory), 3D-XPoint, hard disk drives, etc. While example embodiments involving flash memory are described below, the techniques described herein can variously be adapted to accommodate any type of memory technology, as applicable.
In one example embodiment, flash memory is organized as a physical array of bytes. Each byte of this array corresponds to a physical memory address in the virtual machine created by the set of hyper-kernels running on each server (also referred to herein as “nodes”) of the cluster.
Typically, flash memory is used in two main ways: as solid-state disks (SSD) or as persistent memory in portable electronic devices such as mobile phones and tablets. One example primary usage for flash in servers is to simulate disks. Described herein are techniques that provide additional ways of using flash, for example, as a persistent backup memory to (a) make large memories available for use by applications and databases by extending the size of the memory as perceived by a guest operating system beyond that of the sum of the available dynamic memory of the cluster and (b) as a way to make systems more resilient in the presence of errors.
Unfortunately, most system software for servers typically have no mechanism to effectively deal with flash as a first class element of a memory hierarchy, and as a result, this software resorts to using it in a way that it understands well, namely disk storage.
Example Use Cases
The following are several example use cases supported by the techniques described herein: