From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51002) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X4maO-0005rq-Iu for qemu-devel@nongnu.org; Wed, 09 Jul 2014 03:46:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1X4maK-00038U-3V for qemu-devel@nongnu.org; Wed, 09 Jul 2014 03:46:40 -0400 Message-ID: <53BCF352.7070005@redhat.com> Date: Wed, 09 Jul 2014 09:46:26 +0200 From: Paolo Bonzini MIME-Version: 1.0 References: <1404885472-23563-1-git-send-email-aik@ozlabs.ru> In-Reply-To: <1404885472-23563-1-git-send-email-aik@ozlabs.ru> Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] spapr: Enable use of huge pages List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alexey Kardashevskiy , qemu-devel@nongnu.org Cc: Hu Tao , qemu-ppc@nongnu.org, Alexander Graf Il 09/07/2014 07:57, Alexey Kardashevskiy ha scritto: > 0b183fc87 "memory: move mem_path handling to > memory_region_allocate_system_memory" disabled -mempath use for all > machines that do not use memory_region_allocate_system_memory() to > register RAM. Since SPAPR uses memory_region_init_ram(), the huge pages > support was disabled for it. > > This replaces memory_region_init_ram()+vmstate_register_ram_global() with > memory_region_allocate_system_memory() to get huge pages back. > > Cc: Paolo Bonzini > Cc: Hu Tao > Signed-off-by: Alexey Kardashevskiy > --- > hw/ppc/spapr.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c > index a23c0f0..8fa9f7e 100644 > --- a/hw/ppc/spapr.c > +++ b/hw/ppc/spapr.c > @@ -1337,8 +1337,8 @@ static void ppc_spapr_init(MachineState *machine) > ram_addr_t nonrma_base = rma_alloc_size; > ram_addr_t nonrma_size = spapr->ram_limit - rma_alloc_size; > > - memory_region_init_ram(ram, NULL, "ppc_spapr.ram", nonrma_size); > - vmstate_register_ram_global(ram); > + memory_region_allocate_system_memory(ram, NULL, "ppc_spapr.ram", > + nonrma_size); The reason why I didn't do this in the simple way is that depending on the value of nonrma_base you may get smaller hugepages than you wanted. For example, if the hugepage size is 1G but nonrma_base is 32M, you will not be able to get a page size larger than 32M. Depending on the value of nonrma_base, it may be better to allocate the whole spapr->ram_limit to ppc_spapr.ram, and just ignore the first part of it. I see in target-ppc/kvm.c that rma_alloc_size is capped to 256M, and in practice it is 128M (arch/powerpc/kvm/book3s_hv_builtin.c. Considering that Linux overcommits so the memory isn't lost in the non-hugepage case, I think it's better to just waste the 128M of address space. Paolo > memory_region_add_subregion(sysmem, nonrma_base, ram); > } > >