在您的机器上设置和使用 KVM


基于内核的虚拟机 (KVM) 是一个 Linux 内核模块,允许创建由内核管理的虚拟机。 在最新的 x86 和 ARM 处理器上,KVM 支持硬件辅助虚拟化,使虚拟机能够以接近原生速度运行。 gem5 的 KVMCPU 在 gem5 中启用了此功能,但代价是架构统计信息不会被 gem5 记录。 使用 KVMCPU 时,可以通过 perf 可选地收集一些统计信息,但此选项需要 root 权限。

为了使用 gem5 的 KVMCPU 来快进您的模拟,您必须拥有兼容 KVM 的处理器并在您的机器上安装 KVM。 本页将指导您在机器上启用 KVM 并在 gem5 中使用它。

注意:以下教程假设使用 X86 Linux 主机。 本教程的各个部分可能不适用于其他架构或不同的操作系统。 目前 KVM 支持可用于 X86 和 ARM 模拟(分别使用 X86 和 ARM 主机)。

确保系统兼容性

要查看您的处理器是否支持硬件虚拟化,请运行以下命令:

grep -E -c '(vmx|svm)' /proc/cpuinfo

如果命令返回 0,您的处理器不支持硬件虚拟化。 如果命令返回 1 或更多,您的处理器确实支持硬件虚拟化

您可能仍需要确保在 BIOS 中启用了它。 执行此操作的过程因制造商和型号而异。 请查阅您的主板手册以获取更多信息。

最后,建议您在主机上使用 64 位内核。 在主机上使用 32 位内核的限制如下:

这可能会严重限制 KVM 在 gem5 模拟中的有用性。

启用 KVM

为了让 KVM 直接与 gem5 一起工作,必须安装以下依赖项:

sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils

接下来,您需要将用户添加到 kvmlibvirt 组。 运行以下两个命令:

sudo adduser `id -un` libvirt
sudo adduser `id -un` kvm

之后,您需要退出然后重新连接到您的帐户。 如果您使用 SSH,请断开所有会话并重新登录。 现在,如果您运行下面的 groups 命令,您应该看到 kvmlibvirt

验证 KVM 是否工作

“configs/example/gem5_library/x86-ubuntu-run-with-kvm.py” 文件是一个 gem5 配置,它将创建一个使用 KVM 启动 Ubuntu 24.04 镜像的模拟。 可以使用以下命令执行:

scons build/ALL/gem5.opt -j`nproc`
./build/ALL/gem5.opt configs/example/gem5_library/x86-ubuntu-run-with-kvm.py

如果您使用预构建的 gem5 二进制文件,请使用以下命令:

gem5 configs/example/gem5_library/x86-ubuntu-run-with-kvm.py

如果模拟成功运行,您已成功安装 KVM 并可以在 gem5 中使用它。

KVMCPU、快进和 perf

perf 是 Linux 中的一项功能,允许用户访问性能计数器。 默认情况下,KVMCPU 启用 perf 以收集统计信息,例如执行的指令数。 通常,perf 需要一些系统权限来设置。 否则,您会遇到相关的权限问题,例如 kernel.perf_event_paranoid 值太高。

但是,如果您想快进模拟并且不打算收集快进阶段的统计信息,您可以在使用 KVMCPU 时选择不使用 perfKVMCPU SimObject 有一个名为 usePerf 的参数,它指定 KVMCPU 是否应该使用 perf 收集统计信息。 此选项默认启用。

以下是关闭 perf 的示例, https://github.com/gem5/gem5/blob/stable/configs/example/gem5_library/x86-ubuntu-run-with-kvm-no-perf.py