KVM Virtio-balloon:如何在设备端激活免费页面报告功能?

KVM Virtio-balloon: how to activate free page reporting feature on the device side?

提问人:wxz 提问时间:10/6/2023 最后编辑:wxz 更新时间:10/19/2023 访问量:82

问:

我正在尝试在我的 KVM 客户机(带有上游 Linux 6.5 自定义内核的 Ubuntu 22.04 服务器)上运行免费页面报告。我的主机是 Ubuntu 20.04 和 6.5 Linux。免费页面报告被列为我的气球驱动程序的一项功能:

static unsigned int features[] = {
     VIRTIO_BALLOON_F_MUST_TELL_HOST,
     VIRTIO_BALLOON_F_STATS_VQ,
     VIRTIO_BALLOON_F_DEFLATE_ON_OOM,
     VIRTIO_BALLOON_F_FREE_PAGE_HINT,
     VIRTIO_BALLOON_F_PAGE_POISON,
     VIRTIO_BALLOON_F_REPORTING,
}

static struct virtio_driver virtio_balloon_driver = {
    .feature_table = features,
    ...
}

但是,当我启动我的访客时,尽管正常的气球充气/放气操作正常工作,但免费页面报告不起作用。似乎底层气球“设备”没有基于此条件返回 false 的功能:

if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_REPORTING))

我在主机和客户机内核配置中都设置了。CONFIG_PAGE_REPORTINGCONFIG_VIRTIO_BALLOONy

我的客户机 KVM 配置文件显示此(自动生成的)设备:

<memballoon model="virtio">
  <address type="pci" domain="0x0000" bus="0x00" slot="0x07" function="0x0"/>
</memballoon>

如何为 virtio-balloon 设备打开此功能以匹配驱动程序功能?这是否需要在主机中配置,无论是通过修改我的主机内核还是更改我的客户机 KVM 配置文件?或者这是我需要在我的客户机内核中修改才能开始工作的东西吗?

linux-kernel 操作系统 kvm 气球 virtio

评论


答:

0赞 wxz 10/19/2023 #1

这是否需要在主机中配置,无论是通过修改我的主机内核还是更改我的客户机 KVM 配置文件?或者这是我需要在我的客户机内核中修改才能开始工作的东西吗?

答案是以上都不是。在 KVM 中,仿真器负责创建 virtio 设备。通常,这是 Qemu 的工作。您可以通过在 KVM 客户机配置文件中查找行来验证您正在使用的模拟器(在我的情况下是这样做):emulatorvirsh edit <guestname>

<emulator>/usr/bin/qemu-system-x86_64</emulator>

如果你查看 Qemu github 存储库(从版本 8.1.2 开始),你会发现哪个包含你要找的代码hw/virtio/virtio-balloon.c

static Property virtio_balloon_properties[] = {
    ...
    DEFINE_PROP_BIT("free-page-reporting", VirtIOBalloon, host_features,
                    VIRTIO_BALLOON_F_REPORTING, false),
    ...
    DEFINE_PROP_END_OF_LIST(),
};

默认情况下,免费页面报告处于关闭状态,因此您需要通过更改为 来打开此功能,为您的计算机编译 Qemu,然后使用此 qemu 二进制文件来运行您的 KVM 客户机。falsetrue