+ need to be migrated to the point of implementation. Help
+ with the latter
+ would be appreciated.</p>
+
+ </body>
+
+ </project>
+
+ <project cat='proj'>
+ <title>Save/Restore/Migration support in bhyve</title>
+
+ <contact>
+ <person>
+ <name>Elena Mihailescu</name>
+ <email>elenamihailescu22@gmail.com</email>
+ </person>
+ <person>
+ <name>Darius Mihai</name>
+ <email>dariusmihaim@gmail.com</email>
+ </person>
+ <person>
+ <name>Sergiu Weisz</name>
+ <email>sergiu121@gmail.com</email>
+ </person>
+ <person>
+ <name>Mihai Carabas</name>
+ <email>mihai@FreeBSD.org</email>
+ </person>
+ </contact>
+
+ <links>
+ <url href="https://github.com/FreeBSD-UPB/freebsd/tree/projects/bhyve_migration">Github repository for the save/restore and migration features</url>
+ <url href="https://github.com/FreeBSD-UPB/freebsd/wiki/Save-and-Restore-a-virtual-machine-using-bhyve">Github wiki - How to Save and Restore a bhyve guest</url>
+ <url href="https://github.com/FreeBSD-UPB/freebsd/wiki/Virtual-Machine-Migration-using-bhyve">Github wiki - How to Migrate a bhyve guest</url>
+ <url href="https://github.com/FreeBSD-UPB/freebsd/wiki/Suspend-Resume-test-matrix">Github wiki - Suspend/resume test matrix</url>
+ </links>
+
+ <body>
+ <p>The Save/Restore feature is a facility to suspend and
+ resume guest
+ virtual images that has been added to the FreeBSD/amd64's
+ hypervisor,
+ bhyve. The bhyvectl tool is used to save the guest virtual
+ machine
+ into three files:</p>
+
+ <ul>
+ <li>a file for the guest memory</li>
+
+ <li>a file for state of each device / CPU state</li>
+
+ <li>a file that has metadata that is used in the restore
+ process</li>
+ </ul>
+
+ <p>
+ To suspend a bhyve guest, the bhyvectl tool must be run
+ with the <tt>--suspend
+ <state_file_name></tt>
+ option followed by the guest name.</p>
+
+ <p>To restore a bhyve guest from a checkpoint, one simply has
+ to add the <tt>-r</tt> option
+ followed by the main state file (the same file that was
+ given to the <tt>--suspend</tt>
+ option for bhyvectl) when starting the VM.</p>
+
+ <p>The Migration feature uses the Save/Restore implementation
+ to migrate a bhyve guest
+ from one FreeBSD host to another FreeBSD host. To migrate
+ a bhyve guest,
+ one needs to start an empty guest on the destination host
+ from a shared guest
+ image using the bhyve tool with the <tt>-R</tt> option
+ followed by the source host
+ IP and the port to listen to migration request. On the
+ source host, the
+ migration is started by executing the bhyvectl command
+ with the <tt>--migrate</tt>
+ option, followed by the destination host IP and the port
+ to send to the messages.</p>
+
+ <p>New features added:</p>
+
+ <ul>
+ <li>Create the socket connection between source and
+ destination hosts</li>
+
+ <li>Migrate the guest state via sockets</li>
+
+ <li>Separate the suspend/resume/migration code from the
+ bhyverun.c and bhyvectl.c and added two new files
+ for them: migration.c and migration.h</li>
+
+ <li>Added save/restore state for xhci</li>
+
+ <li>Added save/restore state for fbuf</li>
+
+ <li>Fix vhpet restore state issues (timers related)</li>
+
+ <li>Add partially support for suspending and resuming a Linux
+ guest</li>
+ </ul>
+
+ <p></p>
+
+ <p>Future tasks:</p>
+
+ <ul>
+ <li>Check if live migration can be implemented using the
+ FreeBSD's Copy-on-Write mechanism</li>
+
+ <li>Add live migration support by using EPT (Intel)</li>
+
+ <li>Add live migration support by using NPT (AMD)</li>
+
+ <li>Add suspend/resume support for nvme</li>
+
+ <li>Add suspend/resume support for virtio-console</li>
+
+ <li>Add suspend/resume support for virtio-scsi</li>
+
+ <li>Fix restore timers issues</li>
+
+ <li>Fix suspending bhyve - threads issues</li>
+
+ <li>Fix suspending bhyve - mutexes issues</li>
+
+ <li>Add suspend/resume support for Windows guests</li>
+ </ul>
+
+ <p></p>
+
+ </body>
+
+ <sponsor>
+ Matthew Grooms
+ </sponsor>
+
+ <sponsor>
+ iXsystems
+ </sponsor>
+
+ </project>
+
+ <project cat='proj'>
+ <title>Building FreeBSD on non-FreeBSD hosts</title>