This is the deivce part implementation to add a new feature, VIRTIO_BALLOON_F_FREE_PAGE_HINT to the virtio-balloon device. The device receives the guest free page hints from the driver and clears the corresponding bits in the dirty bitmap, so that those free pages are not transferred by the migration thread to the destination.
Please see the driver patch link for test results: https://lkml.org/lkml/2018/2/4/60 ChangeLog: v1->v2: 1) virtio-balloon - use subsections to save free_page_report_cmd_id; - poll the free page vq after sending a cmd id to the driver; - change the free page vq size to VIRTQUEUE_MAX_SIZE; - virtio_balloon_poll_free_page_hints: handle the corner case that the free page block reported from the driver may cross the RAMBlock boundary. 2) migration/ram.c - use balloon_free_page_poll to start the optimization Wei Wang (3): virtio-balloon: VIRTIO_BALLOON_F_FREE_PAGE_HINT migration: use the free page reporting feature from balloon virtio-balloon: add a timer to limit the free page report waiting time balloon.c | 39 ++-- hw/virtio/virtio-balloon.c | 227 ++++++++++++++++++++++-- hw/virtio/virtio-pci.c | 3 + include/hw/virtio/virtio-balloon.h | 15 +- include/migration/misc.h | 3 + include/standard-headers/linux/virtio_balloon.h | 7 + include/sysemu/balloon.h | 12 +- migration/ram.c | 34 +++- 8 files changed, 307 insertions(+), 33 deletions(-) -- 1.8.3.1