From patchwork Fri Oct 12 03:24:27 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Gibson X-Patchwork-Id: 982831 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.b="mKtSZrf5"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 42WYBT5xZ2z9s4s for ; Fri, 12 Oct 2018 14:25:37 +1100 (AEDT) Received: from localhost ([::1]:38054 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gAo51-0003Kq-A4 for incoming@patchwork.ozlabs.org; Thu, 11 Oct 2018 23:25:35 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60995) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gAo4D-0003GK-34 for qemu-devel@nongnu.org; Thu, 11 Oct 2018 23:24:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gAo49-0007Wu-47 for qemu-devel@nongnu.org; Thu, 11 Oct 2018 23:24:44 -0400 Received: from ozlabs.org ([203.11.71.1]:52531) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gAo48-0007V5-EG; Thu, 11 Oct 2018 23:24:41 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 42WY9J4fJCz9s7W; Fri, 12 Oct 2018 14:24:36 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1539314676; bh=Rl/GCAOtqg603Q2s17UmJ5bGOB7Q7KTjBl1Y1q0dkjs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mKtSZrf5XSUVQls+GEm9//lwfLCEAtbvFQQOZ5RM2As5+80Ci2gccNG5bxUQcHTfU TmXO8fvXLW/+zgpBK8/G50wedS//ROGN6soQ44WVOV44skHgCWtP4js5VcH5I50Oqy mLfgWfY8SLXrEjWv8nE76WG6TgQOxAwULNrqgpvc= From: David Gibson To: dhildenb@redhat.com, imammedo@redhat.com, ehabkost@redhat.com Date: Fri, 12 Oct 2018 14:24:27 +1100 Message-Id: <20181012032431.32693-2-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181012032431.32693-1-david@gibson.dropbear.id.au> References: <20181012032431.32693-1-david@gibson.dropbear.id.au> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 203.11.71.1 Subject: [Qemu-devel] [RFC 1/5] virtio-balloon: Remove unnecessary MADV_WILLNEED on deflate 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: pbonzini@redhat.com, David Gibson , qemu-ppc@nongnu.org, qemu-devel@nongnu.org, mst@redhat.com Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" When the balloon is inflated, we discard memory place in it using madvise() with MADV_DONTNEED. And when we deflate it we use MADV_WILLNEED, which sounds like it makes sense but is actually unnecessary. The misleadingly named MADV_DONTNEED just discards the memory in question, it doesn't set any persistent state on it in-kernel; all that's necessary to bring the memory back is to touch it. MADV_WILLNEED in contrast specifically says that the memory will be used soon and faults it in. Memory that's being given back to the guest by deflating the balloon *might* be used soon, but it equally could just sit around in the guest's pools until it actually needs it. And, over the general timescale that memory ballooning operates, it seems unlikely that one extra fault for the guest will be a vast performance issue. So, simplify the balloon's operation by dropping the madvise() on deflate. Signed-off-by: David Gibson Reviewed-by: David Hildenbrand --- hw/virtio/virtio-balloon.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c index 1728e4f83a..6ec4bcf4e1 100644 --- a/hw/virtio/virtio-balloon.c +++ b/hw/virtio/virtio-balloon.c @@ -35,9 +35,8 @@ static void balloon_page(void *addr, int deflate) { - if (!qemu_balloon_is_inhibited()) { - qemu_madvise(addr, BALLOON_PAGE_SIZE, - deflate ? QEMU_MADV_WILLNEED : QEMU_MADV_DONTNEED); + if (!qemu_balloon_is_inhibited() && !deflate) { + qemu_madvise(addr, BALLOON_PAGE_SIZE, QEMU_MADV_DONTNEED); } }