libvirt/qemu VM 在特定主机之间迁移时冻结

libvirt/qemu VM 在特定主机之间迁移时冻结

我有几台服务器(不同年代)在 Ubuntu 22.04 上运行,带有 QEMU 和 libvirt。
在其中一些服务器之间迁移虚拟机时,虚拟机会立即在目标系统上冻结。
测试的客户机是运行当前 Ubuntu 或 CentOS/Rocky Linux 的 HVM 机器。

之前服务器运行的是 Ubuntu 18.04,最近重新安装。18.04 上实时迁移没有问题 - 直到 22.04 才开始出现问题。

硬件详情:
我有多台服务器,但我只挑选其中四台进行更好的比较:
1:AMD EPYC 7513 @ 1.50 GHz 2:Intel Xeon Silver 4114 CPU @ 2.20GHz
3:Intel Xeon CPU E5-2630 v4 @ 2.20GHz
4:Intel Xeon CPU E5-2620 v4 @ 2.10GHz

迁移在 1<->2 和 3<->4 之间有效。从 1->3 或 1->4 迁移时,迁移不起作用,但反方向迁移仍有效。

配置详情:
虚拟机配置为使用“SandyBridge”CPU 型号,就像以前使用旧版 Ubuntu 时一样。
此外,我的测试客户机没有硬盘、没有音频设备、没有网络。只有通过虚拟 IDE 控制器的 Live CD 设备。

我目前调试的内容:
这似乎是与时间或中断相关的问题。机器冻结,对键盘输入没有任何反应(通过 VNC)。
此外,目标主机上记录了以下内容:
qemu-system-x86_64: warning: TSC frequency mismatch between VM (2600083 kHz) and host (3207181 kHz), and TSC scaling unavailable
我偶然发现本报告并尝试为客户机设置固定的 TSC 频率(使用不同的值),但目前尚未成功。
我还尝试为客户机完全禁用 TSC,使其依赖于 HPET,这会使 VM 非常滞后并在控制台上发出有关卡住 IRQ 事件的警告,有时甚至会因 NMI 看门狗导致内核崩溃。此外,迁移后,VM 完全冻结。

我的发现:
如果客户机正在“运行” GRUB 引导加载程序或 Live CD 菜单(因此,它尚未启动),则 VM 可以毫无问题地迁移。将客户机引导至恢复模式仍会导致 VM 冻结。
我尝试了noapic acpi=off notsc客户机内的启动选项,但没有变化。

这可能是什么原因造成的?
目前,我大约有 50% 的把握,这可能与 QEMU 使用 TSC 有关,如果服务器之间的 TSC 时钟偏差太大,会导致系统冻结。但似乎,即使我使用内核参数启动主机,我也无法简单地禁止 QEMU 使用 TSC。notsc
当然,这可能与完全不同的事情有关。
有没有办法强制 QEMU 使用 HPET 或任何其他时钟源?或者我还可以尝试其他什么来让迁移再次正常工作?

谢谢!

答案1

将我的 KVM 主机迁移到 Ubuntu 22.04 后,我遇到了同样的问题。

解决方案

对我来说,解决方案是升级到 hwe-22.04 内核(在撰写本文时:5.19.0-32-通用)。

由于 Ubuntu Server 安装不会自动获取 hwe 内核,因此我使用以下命令手动安装它:

apt install --install-recommends linux-generic-hwe-22.04

希望这对你也有用。祝你好运!

问题描述

开始将客户机迁移到目标主机时,已在该主机上运行的客户机可能会出现系统时钟跳跃,导致客户机内核冻结。迁移的客户机通常会在迁移完成后不久出现系统时钟跳跃。

可能的原因

时钟跳跃的原因似乎是当多个客户机共享同一个 CPU 核心时导致 tsc 扩展出现副作用的回归。

此补丁修复了 tsc 行为并且包含在 Ubuntu hwe-22.04 内核中,但不包含在原始 Ubuntu 22.04 内核中。

参考

答案2

我也有完全一样的问题 !

因为我在 2204 中重新安装了主机,所以从 Intel(R) Xeon(R) Gold 5215 CPU @ 2.50GHz 实时迁移到 Intel(R) Xeon(R) CPU E5-2640 v4 @ 2.40GHz 会冻结迁移的客户机。

相反的方向也可以

这似乎是 ubuntu2204 内核的问题。如果我将服务器内核降级到 5.4.0-139-generic(来自 ubuntu2004 的最后一个内核)而不进行任何其他更改,则问题不会再发生,您可以毫无问题地双向实时迁移。

我还对 ubuntu 主线内核做了一些测试

5.15.94-051594-generic is OK
5.16.0-051600-generic has the problem, so i guess the issue appears with 5.16 kernels, and was backported by ubuntu team to the 5.15 in ubuntu2204.

希望这可以帮助

相关内容