From patchwork Tue Jun 28 09:01:37 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Lieven X-Patchwork-Id: 9202319 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 45CC560757 for ; Tue, 28 Jun 2016 09:07:15 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 34625285FF for ; Tue, 28 Jun 2016 09:07:15 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 28DD028601; Tue, 28 Jun 2016 09:07:15 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id D172D285FF for ; Tue, 28 Jun 2016 09:07:14 +0000 (UTC) Received: from localhost ([::1]:35189 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bHozB-0004gP-Tq for patchwork-qemu-devel@patchwork.kernel.org; Tue, 28 Jun 2016 05:07:13 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34731) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bHouG-0006lN-Mn for qemu-devel@nongnu.org; Tue, 28 Jun 2016 05:02:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bHou9-0003Lw-Te for qemu-devel@nongnu.org; Tue, 28 Jun 2016 05:02:08 -0400 Received: from mx-v6.kamp.de ([2a02:248:0:51::16]:50862 helo=mx01.kamp.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bHou9-0003Lk-KV for qemu-devel@nongnu.org; Tue, 28 Jun 2016 05:02:01 -0400 Received: (qmail 26627 invoked by uid 89); 28 Jun 2016 09:02:00 -0000 Received: from [195.62.97.28] by client-16-kamp (envelope-from , uid 89) with qmail-scanner-2010/03/19-MF (clamdscan: 0.99.2/21804. hbedv: 8.3.40.44/7.12.99.34. avast: 1.2.2/16062800. spamassassin: 3.4.1. Clear:RC:1(195.62.97.28):. Processed in 0.392785 secs); 28 Jun 2016 09:02:00 -0000 Received: from smtp.kamp.de (HELO submission.kamp.de) ([195.62.97.28]) by mx01.kamp.de with ESMTPS (DHE-RSA-AES256-GCM-SHA384 encrypted); 28 Jun 2016 09:01:57 -0000 X-GL_Whitelist: yes Received: (qmail 29678 invoked from network); 28 Jun 2016 09:01:47 -0000 Received: from lieven-pc.kamp-intra.net (HELO lieven-pc) (relay@kamp.de@::ffff:172.21.12.60) by submission.kamp.de with ESMTPS (DHE-RSA-AES256-GCM-SHA384 encrypted) ESMTPA; 28 Jun 2016 09:01:47 -0000 Received: by lieven-pc (Postfix, from userid 1000) id 62CAD2084D; Tue, 28 Jun 2016 11:01:46 +0200 (CEST) From: Peter Lieven To: qemu-devel@nongnu.org Date: Tue, 28 Jun 2016 11:01:37 +0200 Message-Id: <1467104499-27517-14-git-send-email-pl@kamp.de> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1467104499-27517-1-git-send-email-pl@kamp.de> References: <1467104499-27517-1-git-send-email-pl@kamp.de> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2a02:248:0:51::16 Subject: [Qemu-devel] [PATCH 13/15] exec: use mmap for PhysPageMap->nodes X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, peter.maydell@linaro.org, mst@redhat.com, Peter Lieven , dgilbert@redhat.com, mreitz@redhat.com, kraxel@redhat.com, pbonzini@redhat.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP this was causing serious framentation in conjunction with the subpages since RCU was introduced. The node space was allocated at approx 32kB then reallocted to approx 75kB and this a few hundred times at startup. And thanks to RCU the freeing was delayed. Signed-off-by: Peter Lieven --- exec.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/exec.c b/exec.c index 1b7be2a..b4bcf47 100644 --- a/exec.c +++ b/exec.c @@ -189,9 +189,11 @@ struct CPUAddressSpace { static void phys_map_node_reserve(PhysPageMap *map, unsigned nodes) { if (map->nodes_nb + nodes > map->nodes_nb_alloc) { + size_t old_size = map->nodes_nb_alloc * sizeof(Node); map->nodes_nb_alloc = MAX(map->nodes_nb_alloc * 2, 16); map->nodes_nb_alloc = MAX(map->nodes_nb_alloc, map->nodes_nb + nodes); - map->nodes = g_renew(Node, map->nodes, map->nodes_nb_alloc); + map->nodes = qemu_anon_ram_remap(map->nodes, old_size, + sizeof(Node) * map->nodes_nb_alloc); } } @@ -1162,7 +1164,7 @@ static void phys_sections_free(PhysPageMap *map) phys_section_destroy(section->mr); } g_free(map->sections); - g_free(map->nodes); + qemu_anon_ram_munmap(map->nodes, map->nodes_nb_alloc * sizeof(Node)); } static void register_subpage(AddressSpaceDispatch *d, MemoryRegionSection *section)