From: Eduardo Habkost <ehabkost@redhat.com>
To: qemu-devel@nongnu.org
Cc: Bill Gray <bgray@redhat.com>,
Andrea Arcangeli <aarcange@redhat.com>,
Andre Przywara <andre.przywara@amd.com>,
kvm@vger.kernel.org, Bharata B Rao <bharata@linux.vnet.ibm.com>
Subject: [Qemu-devel] [RFC PATCH 6/6] add -keep-mem-path-files option (v2)
Date: Mon, 2 Jul 2012 15:06:38 -0300 [thread overview]
Message-ID: <1341252398-12268-7-git-send-email-ehabkost@redhat.com> (raw)
In-Reply-To: <1341252398-12268-1-git-send-email-ehabkost@redhat.com>
This make QEMU create files inside the -mem-path directory using
more predictable names, and not remove them afterwards.
This allow (for example) users or management layers to use numactl
later, to set NUMA policy for the guest RAM.
Changes v1 -> v2:
- Fix trailing space issue
- Coding style changes
- Do not initialize static variable to false
- Use g_strdup_printf() instead of asprintf()
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
cpu-all.h | 1 +
exec.c | 26 +++++++++++++++++++++++++-
qemu-options.hx | 12 ++++++++++++
vl.c | 5 +++++
4 files changed, 43 insertions(+), 1 deletion(-)
diff --git a/cpu-all.h b/cpu-all.h
index 2beed5a..acd59ff 100644
--- a/cpu-all.h
+++ b/cpu-all.h
@@ -490,6 +490,7 @@ typedef struct RAMList {
extern RAMList ram_list;
extern const char *mem_path;
+extern bool keep_mem_path_files;
extern bool mem_prealloc;
/* Flags stored in the low bits of the TLB virtual address. These are
diff --git a/exec.c b/exec.c
index 456ac73..2525a65 100644
--- a/exec.c
+++ b/exec.c
@@ -2377,6 +2377,25 @@ static int get_temp_fd(const char *path)
return fd;
}
+/* Return FD to RAM block file, using the memory region name as filename
+ */
+static int open_ramblock_file(RAMBlock *block, const char *path)
+{
+ int fd;
+ gchar *filename;
+
+ filename = g_strdup_printf("%s/%s", path, block->mr->name);
+ fd = open(filename, O_RDWR|O_CREAT);
+ if (fd < 0) {
+ perror("unable to open backing store for hugepages");
+ g_free(filename);
+ return -1;
+ }
+ g_free(filename);
+
+ return fd;
+}
+
static void *file_ram_alloc(RAMBlock *block,
size_t length,
const char *path)
@@ -2402,7 +2421,12 @@ static void *file_ram_alloc(RAMBlock *block,
return NULL;
}
- fd = get_temp_fd(path);
+ if (keep_mem_path_files) {
+ fd = open_ramblock_file(block, path);
+ } else {
+ fd = get_temp_fd(path);
+ }
+
if (fd < 0) {
return NULL;
}
diff --git a/qemu-options.hx b/qemu-options.hx
index 8b66264..f2eb237 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -399,6 +399,18 @@ STEXI
Allocate guest RAM from a temporarily created file in @var{path}.
ETEXI
+DEF("keep-mem-path-files", HAS_ARG, QEMU_OPTION_keep_mempath_files,
+ "-keep-mem-path-files Keep files created in -mem-path\n", QEMU_ARCH_ALL)
+STEXI
+@item -keep-mem-path-files
+Create the files for -mem-path using the memory region names, and don't remove
+them afterwards.
+
+This allows further fine-tuning of NUMA policy for memory regions using
+numactl.
+ETEXI
+
+
#ifdef MAP_POPULATE
DEF("mem-prealloc", 0, QEMU_OPTION_mem_prealloc,
"-mem-prealloc preallocate guest memory (use with -mem-path)\n",
diff --git a/vl.c b/vl.c
index 5c80189..9f18d53 100644
--- a/vl.c
+++ b/vl.c
@@ -177,6 +177,8 @@ int display_remote = 0;
const char* keyboard_layout = NULL;
ram_addr_t ram_size;
const char *mem_path = NULL;
+bool keep_mem_path_files; /* Keep files created at mem_path.
+ * use memory region names as filename */
#ifdef MAP_POPULATE
bool mem_prealloc; /* force preallocation of physical target memory */
#endif
@@ -2671,6 +2673,9 @@ int main(int argc, char **argv, char **envp)
case QEMU_OPTION_mempath:
mem_path = optarg;
break;
+ case QEMU_OPTION_keep_mempath_files:
+ keep_mem_path_files = true;
+ break;
#ifdef MAP_POPULATE
case QEMU_OPTION_mem_prealloc:
mem_prealloc = true;
--
1.7.10.4
next prev parent reply other threads:[~2012-07-02 18:06 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-02 18:06 [Qemu-devel] [RFC PATCH 0/6] option to not remove files inside -mem-path dir (v2) Eduardo Habkost
2012-07-02 18:06 ` [Qemu-devel] [PATCH 1/6] file_ram_alloc(): coding style fixes Eduardo Habkost
2012-07-03 19:16 ` Blue Swirl
2012-07-02 18:06 ` [Qemu-devel] [PATCH 2/6] file_ram_alloc(): use g_strdup_printf() instead of asprintf() Eduardo Habkost
2012-07-03 19:16 ` Blue Swirl
2012-07-02 18:06 ` [Qemu-devel] [PATCH 3/6] vl.c: change mem_prealloc to bool (v2) Eduardo Habkost
2012-07-02 18:06 ` [Qemu-devel] [PATCH 4/6] file_ram_alloc: change length argument to size_t (v2) Eduardo Habkost
2012-07-02 18:06 ` [Qemu-devel] [PATCH 5/6] file_ram_alloc(): extract temporary-file creation code to separate function (v2) Eduardo Habkost
2012-07-02 18:06 ` Eduardo Habkost [this message]
2012-07-02 18:56 ` [Qemu-devel] [RFC PATCH 0/6] option to not remove files inside -mem-path dir (v2) Daniel P. Berrange
2012-07-02 19:54 ` Eduardo Habkost
2012-07-03 9:03 ` Daniel P. Berrange
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1341252398-12268-7-git-send-email-ehabkost@redhat.com \
--to=ehabkost@redhat.com \
--cc=aarcange@redhat.com \
--cc=andre.przywara@amd.com \
--cc=bgray@redhat.com \
--cc=bharata@linux.vnet.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).