From: "Dr. David Alan Gilbert" <dgilb...@redhat.com> Hi, The existing postcopy code, and the userfault kernel code that supports it, only works for normal anonymous memory. Kernel support for userfault on hugetlbfs is working it's way upstream; it's in the linux-mm tree, You can get a version at: git://git.kernel.org/pub/scm/linux/kernel/git/andrea/aa.git on the origin/userfault branch.
Note that while this code supports arbitrary sized hugepages, it doesn't make sense with pages above the few-MB region, so while 2MB is fine, 1GB is probably a bad idea; this code waits for and transmits whole huge pages, and a 1GB page would take about 1 second to transfer over a 10Gbps link - which is way too long to pause the destination for. Dave Dr. David Alan Gilbert (16): postcopy: Transmit ram size summary word postcopy: Transmit and compare individual page sizes postcopy: Chunk discards for hugepages exec: ram_block_discard_range postcopy: enhance ram_block_discard_range for hugepages Fold postcopy_ram_discard_range into ram_discard_range postcopy: Record largest page size postcopy: Plumb pagesize down into place helpers postcopy: Use temporary for placing zero huge pages postcopy: Load huge pages in one go postcopy: Mask fault addresses to huge page boundary postcopy: Send whole huge pages postcopy: Allow hugepages postcopy: Update userfaultfd.h header postcopy: Check for userfault+hugepage feature postcopy: Add doc about hugepages and postcopy docs/migration.txt | 13 ++++ exec.c | 83 +++++++++++++++++++++++ include/exec/cpu-common.h | 2 + include/exec/memory.h | 1 - include/migration/migration.h | 3 + include/migration/postcopy-ram.h | 13 ++-- linux-headers/linux/userfaultfd.h | 81 +++++++++++++++++++--- migration/migration.c | 1 + migration/postcopy-ram.c | 138 +++++++++++++++++--------------------- migration/ram.c | 109 ++++++++++++++++++------------ migration/savevm.c | 32 ++++++--- migration/trace-events | 2 +- 12 files changed, 328 insertions(+), 150 deletions(-) -- 2.9.3