Michael S. Tsirkin
2017-Jul-28 23:08 UTC
[PATCH v12 5/8] virtio-balloon: VIRTIO_BALLOON_F_SG
On Thu, Jul 27, 2017 at 10:50:11AM +0800, Wei Wang wrote:> > > > OK I thought this over. While we might need these new APIs in > > > > the future, I think that at the moment, there's a way to implement > > > > this feature that is significantly simpler. Just add each s/g > > > > as a separate input buffer. > > > > > > Should it be an output buffer? > > Hypervisor overwrites these pages with zeroes. Therefore it is > > writeable by device: DMA_FROM_DEVICE. > > Why would the hypervisor need to zero the buffer?The page is supplied to hypervisor and can lose the value that is there. That is the definition of writeable by device.> I think it may only > need to read out the info(base,size).And then do what?> I think it should be like this: > the cmd hdr buffer: input, because the hypervisor would write it to > send a cmd to the guest > the payload buffer: output, for the hypervisor to read the infoThese should be split. We have: 1. request that hypervisor sends to guest, includes ID: input 2. synchronisation header with ID sent by guest: output 3. list of pages: input 2 and 3 must be on the same VQ. 1 can come on any VQ - reusing stats VQ might make sense.> > > I think output means from the > > > driver to device (i.e. DMA_TO_DEVICE). > > This part is correct I believe. > > > > > > This needs zero new APIs. > > > > > > > > I know that follow-up patches need to add a header in front > > > > so you might be thinking: how am I going to add this > > > > header? The answer is quite simple - add it as a separate > > > > out header. > > > > > > > > Host will be able to distinguish between header and pages > > > > by looking at the direction, and - should we want to add > > > > IN data to header - additionally size (<4K => header). > > > > > > I think this works fine when the cmdq is only used for > > > reporting the unused pages. > > > It would be an issue > > > if there are other usages (e.g. report memory statistics) > > > interleaving. I think one solution would be to lock the cmdq until > > > a cmd usage is done ((e.g. all the unused pages are reported) ) - > > > in this case, the periodically updated guest memory statistics > > > may be delayed for a while occasionally when live migration starts. > > > Would this be acceptable? If not, probably we can have the cmdq > > > for one usage only. > > > > > > > > > Best, > > > Wei > > OK I see, I think the issue is that reporting free pages > > was structured like stats. Let's split it - > > send pages on e.g. free_vq, get commands on vq shared with > > stats. > > > > Would it be better to have the "report free page" command to be sent > through the free_vq? In this case,we will have > stats_vq: for the stats usage, which is already there > free_vq: for reporting free pages. > > Best, > WeiSee above. I would get requests on stats vq but report free pages separately on free vq.> > > >
On 07/29/2017 07:08 AM, Michael S. Tsirkin wrote:> On Thu, Jul 27, 2017 at 10:50:11AM +0800, Wei Wang wrote: >>>>> OK I thought this over. While we might need these new APIs in >>>>> the future, I think that at the moment, there's a way to implement >>>>> this feature that is significantly simpler. Just add each s/g >>>>> as a separate input buffer. >>>> Should it be an output buffer? >>> Hypervisor overwrites these pages with zeroes. Therefore it is >>> writeable by device: DMA_FROM_DEVICE. >> Why would the hypervisor need to zero the buffer? > The page is supplied to hypervisor and can lose the value that > is there. That is the definition of writeable by device.I think for the free pages, it should be clear that they will be added as output buffer to the device, because (as we discussed) they are just hints, and some of them may be used by the guest after the report_ API is invoked. The device/hypervisor should not use or discard them. For the balloon pages, I kind of agree with the existing implementation (e.g. inside tell_host()), which uses virtqueue_add_outbuf (instead of _add_inbuf()). I think inbuf should be a buffer which will be written by the device and read by the driver. The cmd buffer put on the vq for the device to send commands can be an inbuf, I think.> >> I think it may only >> need to read out the info(base,size). > And then do what?For the free pages, the info will be used to clear the corresponding "1" in the dirty bitmap. For balloon pages, they will be made DONTNEED and given to other host processes to use (the device won't write them, so no need to set "write" when virtqueue_map_desc() in the device).> >> I think it should be like this: >> the cmd hdr buffer: input, because the hypervisor would write it to >> send a cmd to the guest >> the payload buffer: output, for the hypervisor to read the info > These should be split. > > We have: > > 1. request that hypervisor sends to guest, includes ID: input > 2. synchronisation header with ID sent by guest: output > 3. list of pages: input > > 2 and 3 must be on the same VQ. 1 can come on any VQ - reusing stats VQ > might make sense.I would prefer to make the above item 1 come on the the free page vq, because the existing stat_vq doesn't support the cmd hdr. Now, I think it is also not necessary to move the existing stat_vq implementation to a new implementation under the cmd hdr, because that new support doesn't make a difference for stats, it will still use its stat_vq (the free page vq will be used for reporting free pages only) What do you think? Best, Wei
Michael S. Tsirkin
2017-Jul-30 04:22 UTC
[PATCH v12 5/8] virtio-balloon: VIRTIO_BALLOON_F_SG
On Sat, Jul 29, 2017 at 08:47:08PM +0800, Wei Wang wrote:> On 07/29/2017 07:08 AM, Michael S. Tsirkin wrote: > > On Thu, Jul 27, 2017 at 10:50:11AM +0800, Wei Wang wrote: > > > > > > OK I thought this over. While we might need these new APIs in > > > > > > the future, I think that at the moment, there's a way to implement > > > > > > this feature that is significantly simpler. Just add each s/g > > > > > > as a separate input buffer. > > > > > Should it be an output buffer? > > > > Hypervisor overwrites these pages with zeroes. Therefore it is > > > > writeable by device: DMA_FROM_DEVICE. > > > Why would the hypervisor need to zero the buffer? > > The page is supplied to hypervisor and can lose the value that > > is there. That is the definition of writeable by device. > > I think for the free pages, it should be clear that they will be added as > output buffer to the device, because (as we discussed) they are just hints, > and some of them may be used by the guest after the report_ API is invoked. > The device/hypervisor should not use or discard them.Discarding contents is exactly what you propose doing if migration is going on, isn't it?> For the balloon pages, I kind of agree with the existing implementation > (e.g. inside tell_host()), which uses virtqueue_add_outbuf (instead of > _add_inbuf()).This is because it does not pass SGs, it passes weirdly formatted PA within the buffer.> I think inbuf should be a buffer which will be written by the device and > read by the > driver.If hypervisor can change it, it's an inbuf. Should not matter whether driver reads it.> The cmd buffer put on the vq for the device to send commands can be > an > inbuf, I think. > > > > > > > I think it may only > > > need to read out the info(base,size). > > And then do what? > > > For the free pages, the info will be used to clear the corresponding "1" in > the dirty bitmap. > For balloon pages, they will be made DONTNEED and given to other host > processes to > use (the device won't write them, so no need to set "write" when > virtqueue_map_desc() in > the device). > > > > > > > I think it should be like this: > > > the cmd hdr buffer: input, because the hypervisor would write it to > > > send a cmd to the guest > > > the payload buffer: output, for the hypervisor to read the info > > These should be split. > > > > We have: > > > > 1. request that hypervisor sends to guest, includes ID: input > > 2. synchronisation header with ID sent by guest: output > > 3. list of pages: input > > > > 2 and 3 must be on the same VQ. 1 can come on any VQ - reusing stats VQ > > might make sense. > > I would prefer to make the above item 1 come on the the free page vq, > because the existing stat_vq doesn't support the cmd hdr. > Now, I think it is also not necessary to move the existing stat_vq > implementation to > a new implementation under the cmd hdr, because > that new support doesn't make a difference for stats, it will still use its > stat_vq (the free > page vq will be used for reporting free pages only) > > What do you think? > > > Best, > Wei
Reasonably Related Threads
- [PATCH v12 5/8] virtio-balloon: VIRTIO_BALLOON_F_SG
- [PATCH v12 5/8] virtio-balloon: VIRTIO_BALLOON_F_SG
- [PATCH v12 5/8] virtio-balloon: VIRTIO_BALLOON_F_SG
- [PATCH v12 5/8] virtio-balloon: VIRTIO_BALLOON_F_SG
- [PATCH v12 5/8] virtio-balloon: VIRTIO_BALLOON_F_SG