[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: Re: [virtio] New virtio balloon...
On Fri, Jan 31, 2014 at 04:01:39PM +1030, Rusty Russell wrote: > "Michael S. Tsirkin" <mst@redhat.com> writes: > > Also copy virtio-dev since this in clearly implementation ... > > > > On Thu, Jan 30, 2014 at 07:34:30PM +1030, Rusty Russell wrote: > >> Hi, > >> > >> I tried to write a new balloon driver; it's completely untested > >> (as I need to write the device). The protocol is basically two vqs, one > >> for the guest to send commands, one for the host to send commands. > >> > >> Some interesting things come out: > >> 1) We do need to explicitly tell the host where the page is we want. > >> This is required for compaction, for example. > >> > >> 2) We need to be able to exceed the balloon target, especially for page > >> migration. Thus there's no mechanism for the device to refuse to > >> give us the pages. > >> > >> 3) The device can offer multiple page sizes, but the driver can only > >> accept one. I'm not sure if this is useful, as guests are either > >> huge page backed or not, and returning sub-pages isn't useful. > >> > >> Linux demo code follows. > >> > >> Cheers, > >> Rusty. > > > > More comments: > > - for projects like auto-ballooning that Luiz works on, > > it's not nice that to swap page 1 for page 2 > > you have to inflate then deflate > > besides overhead this confuses the host: > > imagine you tell QEMU to increase target, > > meanwhile guest inflates temporarily, > > QEMU thinks okay done, now you suddenly deflate. > > I originally allowed the host to deny the deflate, which was why I > reversed it. Then I realized that was a bad idea. I can switch it back. I think explicit swap that you suggested sounds better to me. > > - what's the status of page returned from balloon? > > is it zeroed or can it have old data in there? > > I think in practice Linux will sometimes map in a zero page, > > so guest can save cycles and avoid zeroing it out. > > I think we should tell this to guest when returning > > pages. > > QEMU may not know, since the kernel may not tell it. Depends on what QEMU does. I think kernel always gives us zero pages when we allocate memory, they must be initialized otherwise it's an information leak. > We should assume > nothing, and let the guest zero if it needs to. Seems like a premuture > optimization. Possibly. > > - I am guessing EXTRA_MEM is for uses like the ones proposed by > > Frank Swiderski from google that inflate/deflate balloon > > whenever guest wants (look for "Add a page cache-backed balloon > > device driver"). > > > > this is useful but - we need to distinguish pages > > like this from regular inflate. > > it's not just counter and host needs a way to know > > that it's target is reached > > The driver needs to explicitly ask for pages in that region. OK so we'll have an extra flag for that? > > - do we even want to allow guest not telling host when it wants > > to reuse the page? > > if yes, I think this should be per-page somehow: when balloon > > is inflated guest should tell host whether it > > expects to use this page. > > I decided against it. Making that optional got us into a mess, so now > it's compulsory. That also fits better with the idea of a negative > balloon. > > > So I think we should accomodate these uses, and so we want the following flags: > > > > - WEAK_TARGET (that's the EXTRA_MEM but I think done in a better way) > > flag that specifies pages do not count against target, > > can be taken out of balloon. > > EXTRA_MEM suggests there's an upper limit on balloon size > > but IMHO that's just extra work for host: host does not care > > I think, give it as much as you want. > > set by guest, used by host > > I think that Daniel really does want more memory than the guest starts > with. And I think he still wants to use the balloon to control it. > Daniel? > > > - TELL_HOST flag that specifies guest will tell host before using pages > > (that's VIRTIO_BALLOON_F_MUST_TELL_HOST > > at the moment, listed here for completeness) > > set by guest, used by host > > Dislike. > > > - ZEROED > > flag that specifies that page returned to guest > > is zeroed > > set by host, used by guest > > I think that's silly. Under Linux the guest doesn't need to know it's > zeroed or not, it just frees the page. Yes but it's possible that linux will try to zero page right after free. It won't be too hard to set a flag that it's zeroed when we free it. > > Each of the flags can be just a feature flag, and then > > if we wants a mix of them host can create multiple > > balloon devices with differnet flags, and guest looks for best > > balloon for its purposes. > > > > Alternatively flags can be set and reported per page. > > > > > > A couple of other suggestions: > > > > - how to accomodate memory pressure in guest? > > Let's add a field telling host how hard do we > > want our memory back > > That's very hard to define across guests. Should we be using stats for > that instead? In fact, should we allow gratuitous stats sending, > instead of a simple NEED_MEM flag? > > > - assume you want to over-commit host and start > > inflating balloon. > > If low on memory it might be better for guest to > > wait a bit before inflating. > > Also, if host asks for a lot of memory a ton of > > allocations will slow guest significantly. > > But for guest to do the right thing we need host to tell guest what > > are its memory and time contraints. > > Let's add a field telling guest how hard do we > > want it to give us memory (e.g. time limit) > > We can't have intelligence at both ends, I think. We've chosen a > host-led model, so we should stick to that I'm saying let's control speed of allocations from host, that's still host-led? > unless someone has an > implementation which proves its worth doing otherwise. > > Cheers, > Rusty.
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]