From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anthony Liguori Subject: Re: [Qemu-devel] [5874] Add virtio-balloon support Date: Thu, 04 Dec 2008 16:34:42 -0600 Message-ID: <49385B02.9010206@codemonkey.ws> References: <1228426490.19459.44.camel@localhost.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: qemu-devel@nongnu.org, Rusty Russell , kvm-devel To: Hollis Blanchard Return-path: Received: from mail-qy0-f11.google.com ([209.85.221.11]:54002 "EHLO mail-qy0-f11.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754596AbYLDWes (ORCPT ); Thu, 4 Dec 2008 17:34:48 -0500 Received: by qyk4 with SMTP id 4so5441485qyk.13 for ; Thu, 04 Dec 2008 14:34:47 -0800 (PST) In-Reply-To: <1228426490.19459.44.camel@localhost.localdomain> Sender: kvm-owner@vger.kernel.org List-ID: Hollis Blanchard wrote: > On Thu, 2008-12-04 at 20:33 +0000, Anthony Liguori wrote: > >> +static void balloon_page(void *addr, int deflate) >> +{ >> +#if defined(__linux__) >> + if (!kvm_enabled() || kvm_has_sync_mmu()) >> + madvise(addr, TARGET_PAGE_SIZE, >> + deflate ? MADV_WILLNEED : MADV_DONTNEED); >> +#endif >> +} >> > > Hmm, I just noticed this... we need to use VIRTIO_BALLOON_PFN_SHIFT like > Rusty did on the kernel side. > > However, in general I'm not sure how this is supposed to work. Isn't it > true that madvise() is a no-op if 0 < length < getpagesize()? If so, how > should the guest know the chunk size needed on the host? > We need to pass multiple of TARGET_PAGE_SIZE to madvise() but we can certainly adjust that depending on VIRTIO_BALLOON_PFN_SHIFT. But basically, if the two aren't equal, we shouldn't even try madvise(). > What happens when a guest tries to balloon 4K pages when it's backed on > the host by hugetlbfs? We can't even use getpagesize() there. > Nothing. For ballooning to work in this circumstance, the guest would have to balloon 2MB pages which isn't something that's reasonable for it to do. > Maybe the virtio balloon interface needs to advertise a unit size from > the host, and use that size instead of alloc_page() in the guest? > That's a possibility. May make sense to give it the ability to balloon memory up to unit size because I don't think it'll be able to meet the reservation for large pages only. Regards, Anthony Liguori