Inspect pages created after a vm_object is marked as copy-on-write

Mark Johnston markj at
Sat Jun 30 22:00:03 UTC 2018

On Sat, Jun 30, 2018 at 10:38:21AM +0300, Mihai Carabas wrote:
> On Sat, Jun 30, 2018 at 1:52 AM, Mark Johnston <markj at> wrote:
> > On Fri, Jun 29, 2018 at 11:58:31AM +0300, Elena Mihailescu wrote:
> >> Is there anything I am doing wrong? Maybe I misunderstood something about
> >> the way the virtual memory works in FreeBSD.
> >
> > I'll note that inspecting and manipulating vm_map_entry and vm_object
> > structures in the bhyve code constitutes something of an abstraction
> > violation, though it's reasonable to proceed this way while working on a
> > prototype of the feature.  That is, I think you should keep trying your
> > current approach, but just be aware that you are using the copy-on-write
> > mechanism in a way that the VM system isn't really expecting.
> >
> Can you point out the right approach in our case?

I am merely suggesting that once the required VM interactions are fully
understood, the mechanism implemented for bhyve should be generalized
and lifted into the VM code.  It's hard to say what the "right" approach
is, since I don't fully understand the proposed algorithm.  It sounds
like you might be attempting something like:

1. mark the mappings of to-be-migrated objects as NEEDS_COW, so that a
   subsequent write fault triggers creation of a shadow object
2. invalidate all physical mappings of pages in the object to be copied,
   so that subsequent writes trigger a fault
3. copy pages from the backing object to the destination
4. copy any pages from the shadow object to the desination
5. collapse the backing object into the shadow
6. if the shadow object exists and was non-empty before the collapse,
   goto 1

Is that at all accurate?  I'm not familiar with the mechanisms used to
implement live migration in other hypervisors.

More information about the freebsd-amd64 mailing list