From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51359) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1algtV-0000Ug-3V for qemu-devel@nongnu.org; Thu, 31 Mar 2016 14:00:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1algtR-0008RE-RJ for qemu-devel@nongnu.org; Thu, 31 Mar 2016 14:00:33 -0400 Received: from mx1.redhat.com ([209.132.183.28]:58992) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1algtR-0008Qw-Ho for qemu-devel@nongnu.org; Thu, 31 Mar 2016 14:00:29 -0400 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id BDD9671092 for ; Thu, 31 Mar 2016 18:00:28 +0000 (UTC) Date: Thu, 31 Mar 2016 19:00:24 +0100 From: "Dr. David Alan Gilbert" Message-ID: <20160331180024.GN2265@work-vm> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Subject: [Qemu-devel] Ballooning on TPS!=HPS hosts List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: lcapitulino@redhat.com, amit.shah@redhat.com Cc: lvivier@redhat.com, aarcange@redhat.com, drjones@redhat.com, qemu-devel@nongnu.org Hi, I was reading the balloon code and am confused as to how/if ballooning works on hosts where the host page size is larger than the target page size. static void balloon_page(void *addr, int deflate) { #if defined(__linux__) if (!qemu_balloon_is_inhibited() && (!kvm_enabled() || kvm_has_sync_mmu())) { qemu_madvise(addr, TARGET_PAGE_SIZE, deflate ? QEMU_MADV_WILLNEED : QEMU_MADV_DONTNEED); } #endif } The virtio-balloon code only does stuff through ballon_page, and an madvise DONTNEED should fail if you try and do it on a size smaller than the host page size. So does ballooning work on Power/ARM? Am I misunderstanding this? Of course looking at the above we won't actually generate an error since we don't check the return of qemu_madvise. We have three sizes: a) host page size b) target page size c) VIRTIO_BALLOON_PFN_SHIFT c == 12 (4k) for everyone 1) I think the virtio-balloon code needs to coallesce adjecent requests and call balloon_page on whole chunks at once passing a length. 2) why does balloon_page use TARGET_PAGE_SIZE, ignoring anything else shouldn't it be 1 << VIRTIO_BALLOON_PFN_SHIFT ? 3) I'm guessing the guest kernel doesn't know the host page size, so how can it know what size chunks of balloon to work in? Dave -- Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK