  Memory disaggregation addresses memory imbalance in a cluster by decoupling
CPU and memory allocations of applications while also increasing the effective
memory capacity for (memory-intensive) applications beyond the local memory
limit imposed by traditional fixed-capacity servers. As the network speeds in
the tightly-knit environments like modern datacenters inch closer to the DRAM
speeds, there has been a recent proliferation of work in this space ranging
from software solutions that pool memory of traditional servers for the shared
use of the cluster to systems targeting the memory disaggregation in the
hardware. In this report, we look at some of these recent memory disaggregation
systems and study the important factors that guide their design, such as the
interface through which the memory is exposed to the application, their runtime
design and relevant optimizations to retain the near-native application
performance, various approaches they employ in managing cluster memory to
maximize utilization, etc. and we analyze the associated trade-offs. We
conclude with a discussion on some open questions and potential future
directions that can render disaggregation more amenable for adoption.
