qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH RFC 4/4] add -keep-mem-path-files option


From: Blue Swirl
Subject: Re: [Qemu-devel] [PATCH RFC 4/4] add -keep-mem-path-files option
Date: Wed, 27 Jun 2012 17:26:22 +0000

On Tue, Jun 26, 2012 at 8:51 PM, Eduardo Habkost <address@hidden> wrote:
> 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.
>
> Signed-off-by: Eduardo Habkost <address@hidden>
> ---
>  cpu-all.h       |    1 +
>  exec.c          |   27 ++++++++++++++++++++++++++-
>  qemu-options.hx |   12 ++++++++++++
>  vl.c            |    5 +++++
>  4 files changed, 44 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 dcbe4e1..504e19f 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -2377,6 +2377,28 @@ 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;
> +    char *filename;
> +
> +    if (asprintf(&filename, "%s/%s", path, block->mr->name) == -1) {

asprintf() uses plain malloc() which is not tracked by our tracing
system. Please use g_malloc() and snprintf() or maybe
g_string_printf().

> +        return -1;
> +    }
> +
> +    fd = open(filename, O_RDWR|O_CREAT);
> +    if (fd < 0) {
> +        perror("unable to open backing store for hugepages");
> +        free(filename);

This needs to be converted to g_free() then.

> +        return -1;
> +    }
> +    free(filename);

Ditto.

> +
> +    return fd;
> +}
> +
>  static void *file_ram_alloc(RAMBlock *block,
>                             size_t length,
>                             const char *path)
> @@ -2402,7 +2424,10 @@ static void *file_ram_alloc(RAMBlock *block,
>         return NULL;
>     }
>
> -    fd = get_temp_fd(path);
> +    if (keep_mem_path_files)

Missing braces needed by our CODING_STYLE.

> +        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
> address@hidden -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 4e3403c..1dc595f 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 = false; /* Keep files created at mem_path.
> +                                   * use memory region names as filename */
>  #ifdef MAP_POPULATE
>  bool mem_prealloc = false; /* 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
>
>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]