>> Issue 2: When called via the shrinker, (but also to fix Issue 1), it could be that >> we do have VIRTIO_BALLOON_F_MUST_TELL_HOST. > > I don't think it is an issue here. > MUST_TELL_HOST is for the ballooning pages, where pages are offered to host to _USE_. > For free page hint, as the name already suggests, it's just a _HINT_ , so in whatever use case, > the host should not take the page to use. So the guest doesn't need to tell host and wait.Yes, I agree with you. Yet, I am thinking about one (unlikely?impossible?) scenario. Can you refresh my brain why that cannot happen (IOW, why we don't have to wait for the host to process the request)? 1. Guest allocates a page and sends it to the host. 2. Shrinker gets active and releases that page again. 3. Some user in the guest allocates and modifies that page. After that, it is done using that page for the next hour. 4. The host processes the request and clears the bit in the dirty bitmap. 5. The guest is being migrated by the host. The modified page is not being migrated. -- Thanks, David / dhildenb
On Wednesday, February 5, 2020 4:19 PM, David Hildenbrand wrote:> Yes, I agree with you. Yet, I am thinking about one > (unlikely?impossible?) scenario. Can you refresh my brain why that cannot > happen (IOW, why we don't have to wait for the host to process the > request)? > > 1. Guest allocates a page and sends it to the host. > 2. Shrinker gets active and releases that page again. > 3. Some user in the guest allocates and modifies that page. After that, it is > done using that page for the next hour. > 4. The host processes the request and clears the bit in the dirty bitmap. > 5. The guest is being migrated by the host. The modified page is not being > migrated.Whenever the guest modifies a page during migration, it will be captured by the dirty logging and the hypervisor will send the dirtied the page in the following round. Just more thoughts to clarify the difference. I think it's all about the page ownership. For VIRTIO_BALLOON_F_FREE_PAGE_HINT, the guest always owns the page, so host should not use or unmap the page. For VIRTIO_BALLOON_F_REPORTING or the legacy balloon inflation, guest intends to transfer the ownership of the underlying physical page to the host, that's why host and guest needs a sync about - if the "ownership" transfer completes or not. Best, Wei
On 05.02.20 09:54, Wang, Wei W wrote:> On Wednesday, February 5, 2020 4:19 PM, David Hildenbrand wrote: >> Yes, I agree with you. Yet, I am thinking about one >> (unlikely?impossible?) scenario. Can you refresh my brain why that cannot >> happen (IOW, why we don't have to wait for the host to process the >> request)? >> >> 1. Guest allocates a page and sends it to the host. >> 2. Shrinker gets active and releases that page again. >> 3. Some user in the guest allocates and modifies that page. After that, it is >> done using that page for the next hour. >> 4. The host processes the request and clears the bit in the dirty bitmap. >> 5. The guest is being migrated by the host. The modified page is not being >> migrated. > > Whenever the guest modifies a page during migration, it will be captured by the > dirty logging and the hypervisor will send the dirtied the page in the following round.Please explain why the steps I outlined don't apply esp. in the last round. Your general statement does not explain why this race can't happen. -- Thanks, David / dhildenb