可以以及如何在 linux 中为 openstack 实时迁移实例更新 cpu 功能标志

Posted

技术标签:

【中文标题】可以以及如何在 linux 中为 openstack 实时迁移实例更新 cpu 功能标志【英文标题】:could and how update cpu features flags in linux for openstack live migrate instance 【发布时间】:2022-01-09 00:44:39 【问题描述】:

我有三个具有两种 CPU 进程的管理程序:

# hypervisor node-3:
cpu family  : 6
model       : 85
model name  : Intel(R) Xeon(R) Gold 6248R CPU @ 3.00GHz
stepping    : 7
microcode   : 0x5003003
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cdp_l3 invpcid_single intel_ppin ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm mpx rdt_a avx512f avx512dq rdseed adx smap clflushopt clwb intel_pt avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts pku ospke avx512_vnni md_clear flush_l1d arch_capabilities
bugs        : spectre_v1 spectre_v2 spec_store_bypass swapgs taa itlb_multihit

# hypervisor node-4:
cpu family  : 6
model       : 85
model name  : Intel(R) Xeon(R) Gold 6240 CPU @ 2.60GHz
stepping    : 7
microcode   : 0x5003102
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cdp_l3 invpcid_single intel_ppin ssbd mba ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm mpx rdt_a avx512f avx512dq rdseed adx smap clflushopt clwb intel_pt avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts pku ospke avx512_vnni md_clear flush_l1d arch_capabilities
bugs        : spectre_v1 spectre_v2 spec_store_bypass swapgs taa itlb_multihit

# hypervisor node-5:
cpu family  : 6
model       : 85
model name  : Intel(R) Xeon(R) Gold 6240 CPU @ 2.60GHz
stepping    : 7
microcode   : 0x5003003
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cdp_l3 invpcid_single intel_ppin mba tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm mpx rdt_a avx512f avx512dq rdseed adx smap clflushopt clwb intel_pt avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local ibpb ibrs stibp dtherm ida arat pln pts pku ospke avx512_vnni arch_capabilities
bugs        : spectre_v1 spectre_v2

我可以在node-3node-4 之间实时迁移实例,但node-5 不能与所有其他管理程序一起实时迁移。

我知道因为flags不一致,请从Host model (default for KVM & QEMU)查看。

问题:

1,我可以更新CPU的flags吗?怎么做? 2,为什么node-3 有不同的cpu model 可以有相同的flagsnode-4node-4node-5 具有相同的 cpu model 但具有不同的 flags ? 3,microcode 函数是什么?为什么只有node-4和别人不一样?

根本原因是没有更新内核版本。

解决方法:

apt-get install -y intel-microcode linux-image-generic

reboot 管理程序。

【问题讨论】:

【参考方案1】:

CPU 型号和标志是来宾可见 ABI 的一部分。因此,它们只能在冷启动时设置。 IOW 要更改它们,您需要关闭来宾电源,根据需要更新<cpu> 配置,然后再次启动来宾。当然,如果您不得不冷启动,那么实时迁移就没有什么意义了 - 只需在所需的主机上启动即可。

微码是在主机启动时加载到 CPU 中的东西,本质上是作为为物理 CPU 提供错误修复的一种方式。通常,更新的微码要么在您更新 Bios/固件时安装,要么在操作系统供应商发送更新的微码包时安装。微码可以添加和删除 CPU 功能,具体取决于它试图修复的内容。删除功能是实时迁移的一个问题,因为它可以防止从没有微码更新的主机实时迁移到有微码更新的主机。

很明显,您的一些节点已收到更新的微码,但其他节点没有。

【讨论】:

谢谢 DanielB,我已经更新 node-5 微码并重新启动它,但为什么 flags 没有更新到与具有相同微码的 node-3 相同? node-4 具有不同的微码,但可以使用 node-3 进行实时迁移实例,它们也具有相同的 flags。看不懂,能解决我的问题吗?提前谢谢。 BIOS/固件设置也可能影响可见的标志。此外,主机内核版本有时会阻止功能。

以上是关于可以以及如何在 linux 中为 openstack 实时迁移实例更新 cpu 功能标志的主要内容,如果未能解决你的问题,请参考以下文章

即使没有真实用户,如何在我的 Linux 服务中为 Asterisk 设置环境变量?

如何在 Linux 中为 Rider 设置 Docker

如何在 linux 中为 chrome 打包一个 NPAPI 插件?

如何在 Visual Studio 2017 中为 Linux 应用启用多线程

如何在 Linux 或 Windows 中为 OS X 编译?

如何在 Python 中为 ** data.set_index ** 添加图例?