From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:35858) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TDg1k-0007HH-6E for qemu-devel@nongnu.org; Mon, 17 Sep 2012 14:26:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TDg1i-000409-St for qemu-devel@nongnu.org; Mon, 17 Sep 2012 14:26:36 -0400 Received: from e39.co.us.ibm.com ([32.97.110.160]:60135) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TDg1i-0003zr-Lz for qemu-devel@nongnu.org; Mon, 17 Sep 2012 14:26:34 -0400 Received: from /spool/local by e39.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 17 Sep 2012 12:26:33 -0600 Received: from d03relay03.boulder.ibm.com (d03relay03.boulder.ibm.com [9.17.195.228]) by d03dlp02.boulder.ibm.com (Postfix) with ESMTP id 981CE3E4003C for ; Mon, 17 Sep 2012 12:26:29 -0600 (MDT) Received: from d03av01.boulder.ibm.com (d03av01.boulder.ibm.com [9.17.195.167]) by d03relay03.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q8HIPfEv172278 for ; Mon, 17 Sep 2012 12:26:05 -0600 Received: from d03av01.boulder.ibm.com (loopback [127.0.0.1]) by d03av01.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q8HIPdIJ010108 for ; Mon, 17 Sep 2012 12:25:40 -0600 From: Anthony Liguori In-Reply-To: <20120905165016.127d3c86@doriath.home> References: <20120905165016.127d3c86@doriath.home> Date: Mon, 17 Sep 2012 13:25:36 -0500 Message-ID: <87obl44icf.fsf@codemonkey.ws> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Subject: Re: [Qemu-devel] [PATCH v5] add -machine mem-merge=on|off option List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Luiz Capitulino Cc: qemu-devel Luiz Capitulino writes: > It allows to disable memory merge support (KSM on Linux), which is > enabled by default otherwise. > > Signed-off-by: Luiz Capitulino Applied. Thanks. Regards, Anthony Liguori > --- > > v5 > > - rebase on top of current master > > exec.c | 19 ++++++++++++++++--- > qemu-config.c | 4 ++++ > qemu-options.hx | 7 ++++++- > 3 files changed, 26 insertions(+), 4 deletions(-) > > diff --git a/exec.c b/exec.c > index 5834766..c0fbd5b 100644 > --- a/exec.c > +++ b/exec.c > @@ -2525,6 +2525,19 @@ void qemu_ram_set_idstr(ram_addr_t addr, const char *name, DeviceState *dev) > } > } > > +static int memory_try_enable_merging(void *addr, size_t len) > +{ > + QemuOpts *opts; > + > + opts = qemu_opts_find(qemu_find_opts("machine"), 0); > + if (opts && !qemu_opt_get_bool(opts, "mem-merge", true)) { > + /* disabled by the user */ > + return 0; > + } > + > + return qemu_madvise(addr, len, QEMU_MADV_MERGEABLE); > +} > + > ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host, > MemoryRegion *mr) > { > @@ -2544,7 +2557,7 @@ ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host, > new_block->host = file_ram_alloc(new_block, size, mem_path); > if (!new_block->host) { > new_block->host = qemu_vmalloc(size); > - qemu_madvise(new_block->host, size, QEMU_MADV_MERGEABLE); > + memory_try_enable_merging(new_block->host, size); > } > #else > fprintf(stderr, "-mem-path option unsupported\n"); > @@ -2559,7 +2572,7 @@ ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void *host, > } else { > new_block->host = qemu_vmalloc(size); > } > - qemu_madvise(new_block->host, size, QEMU_MADV_MERGEABLE); > + memory_try_enable_merging(new_block->host, size); > } > } > new_block->length = size; > @@ -2689,7 +2702,7 @@ void qemu_ram_remap(ram_addr_t addr, ram_addr_t length) > length, addr); > exit(1); > } > - qemu_madvise(vaddr, length, QEMU_MADV_MERGEABLE); > + memory_try_enable_merging(vaddr, length); > qemu_ram_setup_dump(vaddr, length); > } > return; > diff --git a/qemu-config.c b/qemu-config.c > index c05ffbc..75763d3 100644 > --- a/qemu-config.c > +++ b/qemu-config.c > @@ -612,6 +612,10 @@ static QemuOptsList qemu_machine_opts = { > .name = "dump-guest-core", > .type = QEMU_OPT_BOOL, > .help = "Include guest memory in a core dump", > + }, { > + .name = "mem-merge", > + .type = QEMU_OPT_BOOL, > + .help = "enable/disable memory merge support", > }, > { /* End of list */ } > }, > diff --git a/qemu-options.hx b/qemu-options.hx > index 3c411c4..90328d0 100644 > --- a/qemu-options.hx > +++ b/qemu-options.hx > @@ -38,7 +38,8 @@ DEF("machine", HAS_ARG, QEMU_OPTION_machine, \ > " supported accelerators are kvm, xen, tcg (default: tcg)\n" > " kernel_irqchip=on|off controls accelerated irqchip support\n" > " kvm_shadow_mem=size of KVM shadow MMU\n" > - " dump-guest-core=on|off include guest memory in a core dump (default=on)\n", > + " dump-guest-core=on|off include guest memory in a core dump (default=on)\n" > + " mem-merge=on|off controls memory merge support (default: on)\n", > QEMU_ARCH_ALL) > STEXI > @item -machine [type=]@var{name}[,prop=@var{value}[,...]] > @@ -57,6 +58,10 @@ Enables in-kernel irqchip support for the chosen accelerator when available. > Defines the size of the KVM shadow MMU. > @item dump-guest-core=on|off > Include guest memory in a core dump. The default is on. > +@item mem-merge=on|off > +Enables or disables memory merge support. This feature, when supported by > +the host, de-duplicates identical memory pages among VMs instances > +(enabled by default). > @end table > ETEXI > > -- > 1.7.11.2.249.g31c7954.dirty