On Thu, Jan 31, 2013 at 4:42 PM, Gleb Natapov <g...@redhat.com> wrote: > On Thu, Jan 31, 2013 at 04:36:25PM +0200, Avi Kivity wrote: >> On Thu, Jan 31, 2013 at 4:30 PM, Gleb Natapov <g...@redhat.com> wrote: >> >> > >> >> > Avi/Michael do you remember why mincore can't be used to check if a >> >> > guest >> >> page is unmapped? >> >> >> >> A page may be not in core, but also nonzero (for example swap). >> > Yes, mincore() should not be used as zero page check, but it can be used >> > as an indicator that page can be dealt with in dead stage of migration >> > since it is likely zero and will not take much time to send. >> >> Or it's swapped, in which case we know nothing about it. >> >> > It is > Of course, that is why I said "likely' :) > >> > possible to call madvise(MADV_WILLNEED) on them meanwhile to pre-load >> > swap without faulting on each page individually. >> >> During migration you're faulting like mad anyway. > That's guest faulting on dirty bit logging, as far as I understand Orit > says that in addition to that she sees a lot of faults generated by > migration reading unmapped guest memory. She wants to eliminate at least > those.
For that, we once talked about extending mincore() to return info whether a page is known zero (anonymous memory without a backing page, or backing page == zero page). But I doubt it's worth it, yes we're faulting a lot, but it's still a lot cheaper than actually sending a page, so we're still ahead of a non-idle guest.