1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > CloudStack使用KVM时设置虚拟实例的CPU型号

CloudStack使用KVM时设置虚拟实例的CPU型号

时间:2022-07-08 22:10:41

相关推荐

CloudStack使用KVM时设置虚拟实例的CPU型号

CloudStack 默认情况下 KVM实例的CPU模型可能是QEMU虚拟CPU版本x.x.x,其CPU特性暴露最少。

如果需要设置CPU。在大多数情况下,主机管理员在每个主机配置文件(/etc/CloudStack/agent/agent.properties)中指定客户CPU配置就足够了

custom: you can explicitly specify one of the supported named model in /usr/share/libvirt/cpu_map.xmlhost-model: libvirt will identify the CPU model in /usr/share/libvirt/cpu_map.xml which most closely matches the host, and then request additional CPU flags to complete the match. This should give close to maximum functionality/performance, which maintaining good reliability/compatibility if the guest is migrated to another host with slightly different host CPUs.host-passthrough: libvirt will tell KVM to passthrough the host CPU with no modifications. The difference to host-model, instead of just matching feature flags, every last detail of the host CPU is matched. This gives absolutely best performance, and can be important to some apps which check low level CPU details, but it comes at a cost with respect to migration: the guest can only be migrated to an exactly matching host CPU.

custom:可以在/usr/share/libvirt/cpu_map.xml中显式指定受支持的命名模型之一。

host-model:libvirt将识别/usr/share/libvirt/cpu_map.xml中与主机最接近的CPU模型,然后请求额外的CPU标志来完成匹配。这将提供接近最大功能/性能的功能/性能,如果将来宾迁移到具有稍微不同的主机CPU的另一个主机,则该功能/性能将保持良好的可靠性/兼容性。

host-passthrough:libvirt将告诉KVM在没有修改的情况下通过主机CPU。主机模型的不同,而不仅仅是匹配特征标志,主机CPU的每一个细节都是匹配的。这提供了绝对最好的性能,对于一些检查低级别CPU细节的应用程序来说也是很重要的,但这是以迁移为代价的:客户只能迁移到完全匹配的主机CPU上。

有时候 需求不同虚拟主机拥有不同型号的CPU,为什么会有这样的需求咱也不懂。。。这时候参考KVM和qumu的使用。最终我也没实现 如何让cloudstack管理的虚拟机如何在同一个宿主机上有不同CPU型号。。。

在 VMwareWorkstation 创建两个虚拟机 一个作为计算节点 一个作为 管理节点时。。。发现在设置custom 时。。。有些 模型不支持设置。。。

本来以为 是因为 qemu 版本问题。。。因为cloudstack4.11.0 版本安装kvm 主机建议 qemu版本 2.0 或以上,但是CentOS7 版本的附带的qemu-kvm 安装包是1.5.3 版本。。。于是源码安装了 qemu 最后 发现 只有 2.6版本。。。可以正常安装后使用,但是,依然是有些 CPU模型无法设置。。。

这里 附上 qemu的源码安装

安装依赖包

yum -y install gcc gcc-c++ automake libtool zlib-devel glib2-devel bzip2-devel libuuid-devel spice-protocol spice-server-devel usbredir-devel libaio-devel

下载压缩包。。。/

解压

tar xf qemu-XXX.tar.bz2

进入该解压后的包

cd qemu-XXX

配置安装。。可以先查看一下帮助

./configure --help ./configure --prefix=/usr/local/qemu --target-list="x86_64-softmmu x86_64-linux-user" --enable-debug

这里一定要说。target-list 表示要安装的 模拟架构 x86_64-softmmu 表示安装X86_64 位架构的模拟架构命令所需 x86_64-linux-user 安装该架构的虚拟机所需。 注,一般 我们只用安装 这两个就行了。。。因为target list 中安装的是独立的命令。并不是包含在一个指令中。

编译 这里 qemu2.1-2.5 版本 编译都会 报错。。。不知为何

make

执行安装

make install

安装路径在 配置安装时指定了 /usr/local/qemu 。可以将这里面的 /bin 目录下命令 添加到环境变量。。。

vim ~/.bashrc

将路径添加到末尾

export PATH=/usr/local/qemu/bin:$PATH

重新激活该文件

source ~/.bashrc

如此做 即使之前安装了 CentOS7自带的qemu1.5.3 版本。 相应的 qemu-img qemu-io 等命令也会执行/usr/local/qemu/bin/ 中的。。。

然后。。。为了使cloudstack使用新安装的qemu(这里说一句。cloudstack是使用qemu + kvm + libvirt 来管理KVM主机的。使用的也是这些个开源软件 但是做了一些封装和端口处理。)

执行 virsh capabilities 可以看到 一大堆内容。。。但是大多内容先忽视。。。

可以看到 一个 host 大标签 和 两个 guest 大标签。。。host大概是对计算节点主机的一个大概描述。guest表示在该计算节点上创建虚拟机的一个描述。一个是32位,一个是64位。。。 先看guest 可以看到一行。不管是64位还是32位 都有/usr/libexec/qemu-kvm大约是创建的虚拟机和 这个指令有关。。。

安装完新版 qemu 后,我们要把这个指定替换掉。。。可以先备份。然后

ln -s /usr/local/qemu/bin/qemu-system-x86_64 /usr/libexec/qemu-kvmln -s /usr/local/qemu/libexec/qemu-bridge-helper /usr/libexec/qemu-bridge-helper

然后根据该指令查询可 设置的CPU型号

/usr/libexec/qemu-kvm -cpu ?

[root@agent ~]# /usr/libexec/qemu-kvm -cpu ?x86 qemu64 QEMU Virtual CPU version 2.5+ Xx86 phenom AMD Phenom(tm) 9550 Quad-Core Processor Xx86 core2duo Intel(R) Core(TM)2 Duo CPUT7700 @ 2.40GHz Xx86 kvm64 Common KVM processor Yx86 qemu32 QEMU Virtual CPU version 2.5+ x86 kvm32 Common 32-bit KVM processor x86coreduo Genuine Intel(R) CPU T2600 @ 2.16GHz Xx86 486x86pentiumx86 pentium2x86 pentium3x86 athlon QEMU Virtual CPU version 2.5+ Xx86 n270 Intel(R) Atom(TM) CPU N270 @ 1.60GHzXx86 Conroe Intel Celeron_4x0 (Conroe/Merom Class Core 2) Yx86 Penryn Intel Core 2 Duo P9xxx (Penryn Class Core 2) Yx86Nehalem Intel Core i7 9xx (Nehalem Class Core i7) Yx86 Westmere Westmere E56xx/L56xx/X56xx (Nehalem-C)Xx86SandyBridge Intel Xeon E312xx (Sandy Bridge)x86 IvyBridge Intel Xeon E3-12xx v2 (Ivy Bridge) Xx86 Haswell-noTSX Intel Core Processor (Haswell, no TSX)x86Haswell Intel Core Processor (Haswell) x86 Broadwell-noTSX Intel Core Processor (Broadwell, no TSX) x86 Broadwell Intel Core Processor (Broadwell)x86 Opteron_G1 AMD Opteron 240 (Gen 1 Class Opteron) Yx86 Opteron_G2 AMD Opteron 22xx (Gen 2 Class Opteron)Xx86 Opteron_G3 AMD Opteron 23xx (Gen 3 Class Opteron)Xx86 Opteron_G4 AMD Opteron 62xx class CPU Xx86 Opteron_G5 AMD Opteron 63xx class CPU Xx86 host KVM processor with all supported host features (only available in KVM mode)

后面的XY是我自己加的。。。没什么意义 懒得删除了。。。看上去可以选择的CPU不少啊

设置 /etc/cloudstack/agent/agent.properties 然后发现其中几个CPU模型设置后 系统VM 还是启动失败。。。所以和qemu版本应该无关。即使1.5.3 版本 ,cloudstack也能正常运行。。。

看日志文件 看了好久 也没发现到底为什么 系统VM会启动失败。。。

ERROR 信息倒是有

com.cloud.exception.InsufficientServerCapacityException: Unable to create a deployment for VM[ConsoleProxy|v-6-VM]Scope=interface com.cloud.dc.DataCenter; id=1

什么资源 不够之类的。。。没什么用

尝试了好多次。。。发现错误信息在 info 中,不是 error

-05-06 14:11:35,518 INFO [c.c.v.VirtualMachineManagerImpl] (Work-Job-Executor-45:ctx-335ce82b job-1/job-54 ctx-2f92e5f7) (logid:56d5ba67) Unable to start VM on Host[-1-Routing] due to the CPU is incompatible with host CPU: Host CPU does not provide required features: monitor

大抵意思是 创建该CPU模型需要 HOST 就是宿主机 的CPU具有 monitor 特性。。。我TM。找了快两天原因。竟然是这个。。。查看当前host 的 CPU是不是没有 该特性

cat /proc/cpuinfo

flags 里面就是 host 的CPU的特性。。。要是觉得过多不好看 直接查询 没结果就是没有。。。

egrep "monitor" /proc/cpuinfo

果然没有,可能是因为这个HOST本身就是VMWare Worksations 创建的一个虚拟机的缘故吧。。。正常的主机应该是有的。。。。

另外 virsh capabilities host 大标签中 feature name 也是该宿主机 的CPU特性 可以看到 并没有。。。

<host><uuid>a28c4d56-acc8-5031-6d1f-1e77095a16cf</uuid><cpu><arch>x86_64</arch><model>Nehalem</model><vendor>Intel</vendor><microcode version='5'/><counter name='tsc' frequency='2793049000' scaling='no'/><topology sockets='2' cores='2' threads='1'/><feature name='vme'/><feature name='ds'/><feature name='ss'/><feature name='ht'/><feature name='vmx'/><feature name='x2apic'/><feature name='tsc-deadline'/><feature name='hypervisor'/><feature name='tsc_adjust'/><feature name='rdtscp'/><feature name='invtsc'/><pages unit='KiB' size='4'/><pages unit='KiB' size='2048'/></cpu><power_management><suspend_mem/><suspend_disk/><suspend_hybrid/></power_management><iommu support='no'/><migration_features><live/><uri_transports><uri_transport>tcp</uri_transport><uri_transport>rdma</uri_transport></uri_transports></migration_features><topology><cells num='1'><cell id='0'><memory unit='KiB'>4193716</memory><pages unit='KiB' size='4'>1048429</pages><pages unit='KiB' size='2048'>0</pages><distances><sibling id='0' value='10'/></distances><cpus num='4'><cpu id='0' socket_id='0' core_id='0' siblings='0'/><cpu id='1' socket_id='0' core_id='1' siblings='1'/><cpu id='2' socket_id='1' core_id='0' siblings='2'/><cpu id='3' socket_id='1' core_id='1' siblings='3'/></cpus></cell></cells></topology><cache><bank id='0' level='3' type='both' size='8' unit='MiB' cpus='0-1'/><bank id='1' level='3' type='both' size='8' unit='MiB' cpus='2-3'/></cache><secmodel><model>selinux</model><doi>0</doi><baselabel type='kvm'>system_u:system_r:svirt_t:s0</baselabel><baselabel type='qemu'>system_u:system_r:svirt_tcg_t:s0</baselabel></secmodel><secmodel><model>dac</model><doi>0</doi><baselabel type='kvm'>+107:+107</baselabel><baselabel type='qemu'>+107:+107</baselabel></secmodel></host>

所以 最后并未能实现 cloudstack 的一个宿主机上不同虚拟机拥有不同的CPU型号。。。只是发现qemu源码安装方式然后,发现 高版本qemu 在和cloudstack结合使用稳定性还不如 qemu1.5.3

另 源码安装的 qemu 并没有 make uninstall 命令。需要卸载可以直接删除 /usr/local/qemu 然后在 source 就是解压后的文件夹里执行 make clean 即可。。。当然

要把在 /usr/libexec/ 里qemu-kvm 备份恢复过来。。。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。