FIG. 17 is a flow diagram illustrating an embodiment of a process for maintaining cache coherency in the presence of a network attached memory. In some embodiments, process 1700 is executed by a network attached memory such as network attached memory appliance 1306. In some embodiments, process 1700 is performed according to a cache coherency protocol such as that described above. The process begins at 1702, when a message is received at a network attached memory. The message is received based on an operation to be performed with respect to a page on a node (e.g., a TidalPod). In some embodiments, the node is included in a plurality of nodes with which the network attached memory communicates. In some embodiments, a virtual machine is created by a set of hyper-kernels running on each node in the TidalPod. An operating system may then be collectively run on the plurality of physical nodes. In some embodiments, the (guest) operating system is transparently run. For example, as described above, by using hyper-kernels, the operating system is given the impression that it is running on a bare metal piece of hardware (while being collectively run on a plurality of physical nodes as in a TidalPod), where modifications to the operating system need not be made.
As described above, in some embodiments, the network attached memory is organized as a physical array of bytes. In some embodiments, each byte of the array corresponds to a physical memory address in the virtual machine.
In some embodiments, the network attached memory is a centralized appliance. In other embodiments, the network attached memory is distributed across the nodes in the TidalPod. At 1704, an action is performed by the network attached memory based on the received message.