From: Igor Mammedov <imammedo@redhat.com>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Yasunori Goto <y-goto@jp.fujitsu.com>,
Paolo Bonzini <pbonzini@redhat.com>,
qemu-devel@nongnu.org, Eduardo Habkost <ehabkost@redhat.com>,
Hu Tao <hutao@cn.fujitsu.com>
Subject: Re: [Qemu-devel] [PATCH v4 18/29] hostmem: add file-based HostMemoryBackend
Date: Mon, 9 Jun 2014 14:06:52 +0200 [thread overview]
Message-ID: <20140609140652.3c46d328@thinkpad> (raw)
In-Reply-To: <20140609113553.GA4320@redhat.com>
On Mon, 9 Jun 2014 14:35:53 +0300
"Michael S. Tsirkin" <mst@redhat.com> wrote:
> On Mon, Jun 09, 2014 at 01:32:46PM +0200, Igor Mammedov wrote:
> > On Mon, 9 Jun 2014 18:25:23 +0800
> > Hu Tao <hutao@cn.fujitsu.com> wrote:
> >
> > > From: Paolo Bonzini <pbonzini@redhat.com>
> > >
> > > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> > > Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
> > > ---
> > > backends/Makefile.objs | 1 +
> > > backends/hostmem-file.c | 107 ++++++++++++++++++++++++++++++++++++++++++++++++
> > > 2 files changed, 108 insertions(+)
> > > create mode 100644 backends/hostmem-file.c
> > >
> > > diff --git a/backends/Makefile.objs b/backends/Makefile.objs
> > > index 7fb7acd..506a46c 100644
> > > --- a/backends/Makefile.objs
> > > +++ b/backends/Makefile.objs
> > > @@ -8,3 +8,4 @@ baum.o-cflags := $(SDL_CFLAGS)
> > > common-obj-$(CONFIG_TPM) += tpm.o
> > >
> > > common-obj-y += hostmem.o hostmem-ram.o
> > > +common-obj-$(CONFIG_LINUX) += hostmem-file.o
> > > diff --git a/backends/hostmem-file.c b/backends/hostmem-file.c
> > > new file mode 100644
> > > index 0000000..b8df933
> > > --- /dev/null
> > > +++ b/backends/hostmem-file.c
> > > @@ -0,0 +1,107 @@
> > > +/*
> > > + * QEMU Host Memory Backend for hugetlbfs
> > > + *
> > > + * Copyright (C) 2013 Red Hat Inc
> > > + *
> > > + * Authors:
> > > + * Paolo Bonzini <pbonzini@redhat.com>
> > > + *
> > > + * This work is licensed under the terms of the GNU GPL, version 2 or later.
> > > + * See the COPYING file in the top-level directory.
> > > + */
> > > +#include "sysemu/hostmem.h"
> > > +#include "qom/object_interfaces.h"
> > > +
> > > +/* hostmem-file.c */
> > > +/**
> > > + * @TYPE_MEMORY_BACKEND_FILE:
> > > + * name of backend that uses mmap on a file descriptor
> > > + */
> > > +#define TYPE_MEMORY_BACKEND_FILE "memory-backend-file"
> > how about naming it after what it really is? "memory-backend-hugepage"
> > Later we could split it into generic superclass mmap-ed "memory-backend-file"
> > and have TPH specific code moved into this backend.
>
> What does this last sentence mean?
1. currently file_ram_alloc() uses TPH specific code, I suggest to keep name
"memory-backend-file" free for now so that in case if there would be need in
a generic file backend, we could introduce it without causing confusion
with TPH backend.
2. There is not much point to build TPH backend for every host, we can exclude
it safely from non linux builds, instead of building it and make it
failing at runtime.
>
> THP is transparent huge pages, right?
yes.
>
>
>
> > > +
> > > +#define MEMORY_BACKEND_FILE(obj) \
> > > + OBJECT_CHECK(HostMemoryBackendFile, (obj), TYPE_MEMORY_BACKEND_FILE)
> > > +
> > > +typedef struct HostMemoryBackendFile HostMemoryBackendFile;
> > > +
> > > +struct HostMemoryBackendFile {
> > > + HostMemoryBackend parent_obj;
> > > + char *mem_path;
> > > +};
> > > +
> > > +static void
> > > +file_backend_memory_alloc(HostMemoryBackend *backend, Error **errp)
> > > +{
> > > + HostMemoryBackendFile *fb = MEMORY_BACKEND_FILE(backend);
> > > +
> > > + if (!backend->size) {
> > > + error_setg(errp, "can't create backend with size 0");
> > > + return;
> > > + }
> > > + if (!fb->mem_path) {
> > > + error_setg(errp, "mem-path property not set");
> > > + return;
> > > + }
> > > +#ifndef CONFIG_LINUX
> > > + error_setg(errp, "-mem-path not supported on this host");
> > Is it possible to not compile this backend on non linux host at all, instead
> > of ifdefs.
> >
> > > +#else
> > > + if (!memory_region_size(&backend->mr)) {
> > > + memory_region_init_ram_from_file(&backend->mr, OBJECT(backend),
> > > + object_get_canonical_path(OBJECT(backend)),
> > > + backend->size,
> > > + fb->mem_path, errp);
> > > + }
> > > +#endif
> > > +}
> > > +
> > > +static void
> > > +file_backend_class_init(ObjectClass *oc, void *data)
> > > +{
> > > + HostMemoryBackendClass *bc = MEMORY_BACKEND_CLASS(oc);
> > > +
> > > + bc->alloc = file_backend_memory_alloc;
> > > +}
> > > +
> > > +static char *get_mem_path(Object *o, Error **errp)
> > > +{
> > > + HostMemoryBackendFile *fb = MEMORY_BACKEND_FILE(o);
> > > +
> > > + return g_strdup(fb->mem_path);
> > > +}
> > > +
> > > +static void set_mem_path(Object *o, const char *str, Error **errp)
> > > +{
> > > + HostMemoryBackend *backend = MEMORY_BACKEND(o);
> > > + HostMemoryBackendFile *fb = MEMORY_BACKEND_FILE(o);
> > > +
> > > + if (memory_region_size(&backend->mr)) {
> > > + error_setg(errp, "cannot change property value");
> > > + return;
> > > + }
> > > + if (fb->mem_path) {
> > > + g_free(fb->mem_path);
> > > + }
> > > + fb->mem_path = g_strdup(str);
> > > +}
> > > +
> > > +static void
> > > +file_backend_instance_init(Object *o)
> > > +{
> > > + object_property_add_str(o, "mem-path", get_mem_path,
> > > + set_mem_path, NULL);
> > s/"mem-path"/"path"/
> >
> >
> > > +}
> > > +
> > > +static const TypeInfo file_backend_info = {
> > > + .name = TYPE_MEMORY_BACKEND_FILE,
> > > + .parent = TYPE_MEMORY_BACKEND,
> > > + .class_init = file_backend_class_init,
> > > + .instance_init = file_backend_instance_init,
> > > + .instance_size = sizeof(HostMemoryBackendFile),
> > > +};
> > > +
> > > +static void register_types(void)
> > > +{
> > > + type_register_static(&file_backend_info);
> > > +}
> > > +
> > > +type_init(register_types);
> > > --
> > > 1.9.3
> > >
> >
> >
> > --
> > Regards,
> > Igor
>
--
Regards,
Igor
next prev parent reply other threads:[~2014-06-09 12:07 UTC|newest]
Thread overview: 92+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-09 10:25 [Qemu-devel] [PATCH v4 00/29] NUMA series and hostmem improvements Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 01/29] NUMA: move numa related code to new file numa.c Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 02/29] NUMA: check if the total numa memory size is equal to ram_size Hu Tao
2014-06-09 23:02 ` Eric Blake
2014-06-10 2:29 ` Hu Tao
2014-06-10 2:36 ` Eric Blake
2014-06-10 2:52 ` Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 03/29] NUMA: Add numa_info structure to contain numa nodes info Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 04/29] NUMA: convert -numa option to use OptsVisitor Hu Tao
2014-06-16 14:08 ` Eduardo Habkost
2014-06-16 14:16 ` Paolo Bonzini
2014-06-16 14:23 ` [Qemu-devel] [libvirt] " Eric Blake
2014-06-16 14:32 ` Paolo Bonzini
2014-06-16 15:39 ` Eduardo Habkost
2014-06-16 15:46 ` Paolo Bonzini
2014-06-16 16:05 ` Eric Blake
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 05/29] NUMA: expand MAX_NODES from 64 to 128 Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 06/29] man: improve -numa doc Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 07/29] vl: redo -object parsing Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 08/29] qmp: improve error reporting for -object and object-add Hu Tao
2014-06-09 15:57 ` Igor Mammedov
2014-06-10 2:07 ` Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 09/29] pc: pass MachineState to pc_memory_init Hu Tao
2014-06-09 13:14 ` Igor Mammedov
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 10/29] numa: introduce memory_region_allocate_system_memory Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 11/29] hostmem: separate allocation from UserCreatable complete method Hu Tao
2014-06-09 10:47 ` Igor Mammedov
2014-06-10 1:55 ` Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 12/29] numa: add -numa node,memdev= option Hu Tao
2014-06-09 17:22 ` [Qemu-devel] [PATCH v4 12/29] numa: add -numa node, memdev= option Eric Blake
2014-06-10 2:23 ` Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 13/29] memory: reorganize file-based allocation Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 14/29] memory: move mem_path handling to memory_region_allocate_system_memory Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 15/29] memory: add error propagation to file-based RAM allocation Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 16/29] memory: move preallocation code out of exec.c Hu Tao
2014-06-18 19:14 ` Michael S. Tsirkin
2014-06-19 0:43 ` Hu Tao
2014-06-20 3:26 ` Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 17/29] memory: move RAM_PREALLOC_MASK to exec.c, rename Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 18/29] hostmem: add file-based HostMemoryBackend Hu Tao
2014-06-09 11:32 ` Igor Mammedov
2014-06-09 11:35 ` Michael S. Tsirkin
2014-06-09 12:06 ` Igor Mammedov [this message]
2014-06-10 2:00 ` Hu Tao
2014-06-10 5:09 ` Paolo Bonzini
2014-06-10 8:30 ` Hu Tao
2014-06-10 8:56 ` Paolo Bonzini
2014-06-10 9:21 ` Hu Tao
2014-06-10 9:59 ` Michael S. Tsirkin
2014-06-10 11:12 ` Paolo Bonzini
2014-06-10 11:23 ` Michael S. Tsirkin
2014-06-10 11:29 ` Paolo Bonzini
2014-06-10 11:35 ` Michael S. Tsirkin
2014-06-10 11:43 ` Paolo Bonzini
2014-06-10 11:48 ` Michael S. Tsirkin
2014-06-10 11:51 ` Paolo Bonzini
2014-06-10 9:07 ` Igor Mammedov
2014-06-10 9:54 ` Michael S. Tsirkin
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 19/29] hostmem: add merge and dump properties Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 20/29] hostmem: allow preallocation of any memory region Hu Tao
2014-06-09 12:28 ` Igor Mammedov
2014-06-09 12:32 ` Paolo Bonzini
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 21/29] hostmem: add property to map memory with MAP_SHARED Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 22/29] configure: add Linux libnuma detection Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 23/29] hostmem: add properties for NUMA memory policy Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 24/29] Introduce signed range Hu Tao
2014-06-09 10:42 ` Peter Maydell
2014-06-09 10:59 ` Michael S. Tsirkin
2014-06-10 6:51 ` Hu Tao
2014-06-10 9:50 ` Michael S. Tsirkin
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 25/29] qapi: make string input visitor parse int list Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 26/29] qapi: make string output " Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 27/29] qom: introduce object_property_get_enum and object_property_get_uint16List Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 28/29] qmp: add query-memdev Hu Tao
2014-06-09 12:36 ` Igor Mammedov
2014-06-09 12:58 ` Paolo Bonzini
2014-06-09 13:32 ` Igor Mammedov
2014-06-09 13:40 ` Paolo Bonzini
2014-06-09 14:08 ` Igor Mammedov
2014-06-09 17:15 ` Eric Blake
2014-06-09 17:24 ` Eric Blake
2014-06-10 2:25 ` Hu Tao
2014-06-09 10:25 ` [Qemu-devel] [PATCH v4 29/29] hmp: add info memdev Hu Tao
2014-06-09 10:30 ` [Qemu-devel] [PATCH v4 00/29] NUMA series and hostmem improvements Michael S. Tsirkin
2014-06-09 11:40 ` Michael S. Tsirkin
2014-06-10 1:55 ` Hu Tao
2014-06-10 9:51 ` Hu Tao
2014-06-10 9:56 ` Michael S. Tsirkin
2014-06-10 9:57 ` Hu Tao
2014-06-10 10:19 ` Hu Tao
2014-06-10 10:27 ` Michael S. Tsirkin
2014-06-10 11:09 ` Hu Tao
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=20140609140652.3c46d328@thinkpad \
--to=imammedo@redhat.com \
--cc=ehabkost@redhat.com \
--cc=hutao@cn.fujitsu.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=y-goto@jp.fujitsu.com \
/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).