On Thu, Jul 18, 2019 at 1:37 PM Michael S. Tsirkin <mst@xxxxxxxxxx> wrote: > > On Thu, Jul 18, 2019 at 01:29:14PM -0700, Alexander Duyck wrote: > > So one thing that is still an issue then is that my approach would > > only work on the first migration. The problem is the logic I have > > implemented assumes that once we have hinted on a page we don't need > > to do it again. However in order to support migration you would need > > to reset the hinting entirely and start over again after doing a > > migration. > > Well with precopy at least it's simple: just clear the > dirty bit, it won't be sent, and then on destination > you get a zero page and later COW on first write. > Right? Are you talking about adding MADV_DONTNEED functionality to FREE_PAGE_HINTS? > With precopy it is tricker as destination waits until it gets > all of memory. I think we could use some trick to > make source pretend it's a zero page, that is cheap to send. So I am confused again. What I was getting at is that if I am not mistaken block->bmap is set to all 1s for each page in ram_list_init_bitmaps(). After that the precopy starts and begins moving memory over. We need to be able to go in and hint away all the free pages from that initial bitmap. To do that we would need to have the "Hinted" flag I added in the patch set cleared for all pages, and then go through all free memory and start over in order to hint on which pages are actually free. Otherwise all we are doing is hinting on which pages have been freed since the last round of hints. Essentially this is another case where being incremental is problematic for this design. What I would need to do is reset the "Hinted" flag in all of the free pages after the migration has been completed.