virsh迁移后100%CPU利用率并挂起

案件

我一直在尝试ZFS + DRBD +实时迁移(我想充分理解它,以便在ganeti再次开始使用openstack之前编写自己的自动化脚本cinder)。我的ZFS + DRBD(在双主模式下)可以很好地用于共享存储。

但是,实时迁移仅部分起作用。

我有两台主机,具有相同的libvirt和drbd配置,甚至具有相同的VM ZVOL专用“卷”池(两个2x1TB镜像池-重新使用旧备份池中的一些旧磁盘),以及VM的相同配置(命名为“ dtest”)

  • “ indra”是在华硕Sabertooth 990FX m / b上具有16GB RAM的AMD FX-8150

    • cpu标志: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc extd_apicid aperfmperf eagerfpu pni pclmulqdq monitor ssse3 cx16 sse4_1 sse4_2 popcnt aes xsave avx lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs xop skinit wdt lwp fma4 nodeid_msr topoext perfctr_core perfctr_nb cpb hw_pstate vmmcall arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold
  • “ surya”是AMD Phenom II X4 940,在ASUS M3A79-T DELUXE m / b上具有8GB RAM

    • cpu标志 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nopl nonstop_tsc extd_apicid eagerfpu pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt hw_pstate vmmcall npt lbrv svm_lock nrip_save

两者都运行debian sid,具有完全相同版本的软件包(包括libvirt* 2.0.0-1:amd64qemu-system-x86 1:2.6+dfsg-3),并且具有相同的liquorix内核:

Linux indra 4.6-2.dmz.2-liquorix-amd64 #1 ZEN SMP PREEMPT Debian 4.6-3 (2016-06-19) x86_64 GNU/Linux
Linux surya 4.6-2.dmz.2-liquorix-amd64 #1 ZEN SMP PREEMPT Debian 4.6-3 (2016-06-19) x86_64 GNU/Linux

VM本身正在运行debian sid,并带有一个普通的debian 4.6.0-1内核:

Linux dtest 4.6.0-1-amd64 #1 SMP Debian 4.6.3-1 (2016-07-04) x86_64 GNU/Linux

我可以在任一主机上启动VM,并且运行良好。

我可以毫无问题地将虚拟机从surya迁移到indra。当我尝试将虚拟机从indra迁移到surya时,迁移似乎成功完成,但是虚拟机挂起,CPU使用率达到100%(对于分配给它的单个核心)。

VM是在indra上启动然后迁移到surya(挂起的位置)还是在surya上启动,再迁移到indra(到目前为止还可以)然后再迁移回surya(挂起),这没有什么区别。

当VM挂起时,我唯一可以做的就是virsh destroy(强制关机)或virsh reset(强制重启)。

我尝试用以下方式禁用kvm_steal_time:

 <qemu:commandline>
   <qemu:arg value='-cpu'/>
   <qemu:arg value='qemu64,-kvm_steal_time'/>
 </qemu:commandline>

但这不能解决问题。

没有任何登录或从虚拟机本身登录。我得到的任何问题的唯一迹象是/var/log/libvirt/qemu/dtest.logsurya上的以下消息

2016-07-18T12:56:55.766929Z qemu-system-x86_64: warning: TSC frequency mismatch between VM and host, and TSC scaling unavailable

这可能是由于tsc_scalecpu功能-8150 CPU(indra)上的功能,而x4 940(surya)上缺少此功能。

有人知道是什么问题吗?或如何解决?或调试建议?

它甚至可以修复,还是在几代历史的Phenom II x4 940中出现CPU错误?

案件

我找到了解决方案。

正如我所怀疑的那样,问题的原因tsc_scale是surya的CPU的功能标记不足

事实证明,你可以从一个主机迁移虚拟机,而不tsc_scale与它一台主机,但虚拟机与主机上运行tsc_scale可以迁移与另一台主机。

是时候提交错误报告了。

我创建了另一个基于ZFS ZVOL的DRBD,这次是在surya和网络上的另一台机器(我的主服务器)之间ganesh

  • ganesh是AMD Phenom II 1090T,在ASUS Sabertooth 990FX m / b上具有32GB RAM
    • CPU标志: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nopl nonstop_tsc extd_apicid aperfmperf eagerfpu pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt nodeid_msr cpb hw_pstate vmmcall npt lbrv svm_lock nrip_save pausefilter

我可以在surya和ganesh之间来回迁移VM,没有问题,也可以将虚拟机从surya或ganesh迁移到indra。但是我无法将虚拟机从indra迁移到surya或ganesh

我现在可以忍受这个。ganesh将在新AMD Zen处理器发布时进行升级,而surya将获得ganesh当前的主板和RAM。我将同时购买新的FX-6300或FX-8320,因此所有机器都将有tsc_scale

我在网络上有一台带有FX-8320 CPU(也具有该tsc_scale功能)的计算机(kali )。我已经计划在ganesh上将主zpool升级(从4x1TB RAIDZ升级到镜像的2x4TB)并释放更多的旧磁盘后,立即将其添加到ZVOL + DRBD +实时迁移实验中。在indra和kali之间,或在surya和ganesh之间来回迁移VM。


我的VM实验计划的下一个阶段是编写脚本,以完全自动化设置VM以便在ZVOL上使用DBRD并在主机之间迁移VM的过程。

当我运行良好时,我将废弃它并开始使用ganeti,它已经完成了我计划编写的工作(但更加完整和更好)。

最后,当我厌倦了这一点时,我将切换到openstack并使用cinder进行卷管理。我很想跳过ganeti并直接进入openstack,但是ganeti是一种很酷的技术,我想使用它一段时间。...我已经好几年没有使用它了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章