I was investigating if there are any mechanisms that allow manually pinning of guest RAM to specific host NUMA nodes, in the case of multi-node KVM guests, and noticed that -mem-path could be used for that, except that it currently removes any files it creates (using mkstemp()) immediately, not allowing numactl to be used on the backing files, as a result. This patches add a -keep-mem-path-files option to make QEMU create the files inside -mem-path with more predictable names, and not remove them after creation.
Some previous discussions about the subject, for reference: - Message-ID: <1281534738-8310-1-git-send-email-andre.przyw...@amd.com> http://article.gmane.org/gmane.comp.emulators.kvm.devel/57684 - Message-ID: <4c7d7c2a.7000...@codemonkey.ws> http://article.gmane.org/gmane.comp.emulators.kvm.devel/58835 A more recent thread can be found at: - Message-ID: <20111029184502.gh11...@in.ibm.com> http://article.gmane.org/gmane.comp.emulators.qemu/123001 Note that this is just a mechanism to facilitate manual static binding using numactl on hugetlbfs later, for optimization. This may be especially useful for single large multi-node guests use-cases (and, of course, has to be used with care). I don't know if it is a good idea to use the memory range names as a publicly- visible interface. Another option may be to use a single file instead, and mmap different regions inside the same file for each memory region. I an open to comments and suggestions. Example (untested) usage to bind manually each half of the RAM of a guest to a different NUMA node: $ qemu-system-x86_64 [...] -m 2048 -smp 4 \ -numa node,cpus=0-1,mem=1024 -numa node,cpus=2-3,mem=1024 \ -mem-prealloc -keep-mem-path-files -mem-path /mnt/hugetlbfs/FOO $ numactl --offset=1G --length=1G --membind=1 --file /mnt/hugetlbfs/FOO/pc.ram $ numactl --offset=0 --length=1G --membind=2 --file /mnt/hugetlbfs/FOO/pc.ram Eduardo Habkost (4): vl.c: change mem_prealloc to bool file_ram_alloc: change length argument to size_t file_ram_alloc(): extract temporary-file creation code to separate function add -keep-mem-path-files option cpu-all.h | 3 ++- exec.c | 72 ++++++++++++++++++++++++++++++++++++++++++------------- qemu-options.hx | 12 ++++++++++ vl.c | 9 +++++-- 4 files changed, 77 insertions(+), 19 deletions(-) -- 1.7.10.4