Skip to content
A proof of concept implementation of IP connected memory (ipmem) for virtual machines.
C Shell Makefile
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
doc
src
test
LICENSE
README.md

README.md

ipmem

Overview


Do you want a virtual machine with huge (and growing) memory? ipmem may be able to help.


ipmem allows a VM to expand its memory capacity by hot-plugging other remote servers' memory. Under the hood, ipmem is a kernel module manageing a page cache for a configured address space, and the pages in the cache are periodically swapped out to a remote server. ipmem also works together with Linux QEMU/KVM to capture the page fault event from VM, so that when VM needs its page, ipmem can load it back. (Ideally, the VM and the remote server are connected by a high-speed network for better performance.)

ipmem is similar to page swap. There are two major differences. First, from VM's point of view, ipmem is a "physical" DRAM DIMM plugged into the system, but swap space are not. Second, instead of swapping a page to a hard drive or SSD, ipmem swaps it to a remote server's memory. In some cases, network is faster than local disk storage. For example, a 100Gbps network (which is becoming more and more common in data centers and network backbones) can transfer a 4K-byte page under 1us (in theory at least), while doing same thing with SSD takes about 150us (based on some simple calculation from the Latency Numbers Every Programmer Should Know shown below).

Send 1K bytes over 1 Gbps network       10,000   ns       10 us
-> Send 4K bytes over 100 Gbps network     400   ns      0.4 us
Read 4K randomly from SSD*             150,000   ns      150 us          ~1GB/sec SSD

Demo

The video shows a proof-of-concept implementation of ipmem.

ipmem demo video

You can’t perform that action at this time.