[RFC] Memory Tiering

From: Dave Hansen
Date: Wed Oct 16 2019 - 16:05:48 EST


The memory hierarchy is getting more complicated and the kernel is
playing an increasing role in managing the different tiers. A few
different groups of folks described "migration" optimizations they were
doing in this area at LSF/MM earlier this year. One of the questions
folks asked was why autonuma wasn't being used.

At Intel, the primary new tier that we're looking at is persistent
memory (PMEM). We'd like to be able to use "persistent memory"
*without* using its persistence properties, treating it as slightly
slower DRAM. Keith Busch has some patches to use NUMA migration to
automatically migrate DRAM->PMEM instead of discarding it near the end
of the reclaim process. Huang Ying has some patches which use a
modified autonuma to migrate frequently-used data *back* from PMEM->DRAM.

We've tried to do this all generically so that it is not tied to
persistent memory and can be applied to any memory types in lots of
topologies.

We've been running this code in various forms for the past few months,
comparing it to pure DRAM and hardware-based caching. The initial
results are encouraging and we thought others might want to take a look
at the code or run their own experiments. We're expecting to post the
individual patches soon. But, until then, the code is available here:

https://git.kernel.org/pub/scm/linux/kernel/git/vishal/tiering.git

and is tagged with "tiering-0.2", aka. d8e31e81b1dca9.

Note that internally folks have been calling this "hmem" which is
terribly easy to confuse with the existing hmm. There are still some
"hmem"'s in the tree, but I don't expect them to live much longer.