Skip to the content.

Virtio Balloon Debug

非常好,那么如何可以自动的利用这个东西呢?

static bool get_free_page_hints(VirtIOBalloon *dev)
{
    /* 等待 VM 恢复运行 */
    while (dev->block_iothread) {
        qemu_cond_wait(&dev->free_page_cond, &dev->free_page_lock);
    }

iothread 中的调用路线为:

这也是一个异步的事件了: virtio_balloon_free_page_hint_notify : 这就是 callback

iothread 是一定必须使用的吗?

看上去的确是如此的? 是必须要 balloon 的才可以的

        s->free_page_bh = aio_bh_new_guarded(iothread_get_aio_context(s->iothread),
                                             virtio_ballloon_get_free_page_hints, s,
                                             &dev->mem_reentrancy_guard);

第三个问题,如果过程中,balloon 发生了变化,如何办?

还需要梳理一下在热迁移中的位置才可以: migration_bitmap_sync_precopy

是划分为多个阶段的啊

那些 thread 可能会使用 bitmap_mutex 这个东西?

通知 guest 发送,需要等 guest 返回吗?

还是没懂,为什么需要在 sync 的时候不可以

理解一下这个东西

因为 memory_region_clear_dirty_bitmap() 清掉的是“当前已经记录的 dirty 状态”,不是永久禁止跟踪。 如果 guest 之后又写这个页,dirty logging 会重新把它记脏,下一轮 migration_bitmap_sync() 还能重新发现它。 所以 free-page hint 本质上是在说:

“截至现在,这页可视为 free,不值得迁移;如果以后又被用到,再重新记脏、再迁移。”

告诉你可以跳过,但是 clear_bmap 没有消失的。

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。