CPU配置+CPU模型
CPU配置
在QEMU中,“-smp”参数是为了配置客户机的SMP系统。
在命令行中,关于配置SMP系统的参数如下:
-smp [cpus=]n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]主要参数说明:
- cpus用来设置客户机中使用的逻辑CPU的数量(默认值是1);
- maxcpus用来设置客户机的最大CPU的数量;最多支持255个CPU,包含启动时处于下线状态的CPU数目;
- cores用来设置在一个socket上CPU core的数量;
- threads用来设置在一个CPU core上线程的数量;
- sockets用来设置客户机中看到的总socket的数量。
下面通过几个命令行例子来演示一下如何在客户机中使用SMP技术。
例1:不加smp参数,使用其默认值1,模拟了只有一个逻辑CPU的客户机系统。
qemu-system-x86_64 ubuntu14.04.img -vnc :1 -monitor stdio

在宿主机qemu monitor中,可以使用“info cpus”命令看到客户机中CPU状态:

从上面的输出可以看出,只有一个CPU,线程的ID是86374。
在宿主机中,可以使用ps命令来查看QEMU进程和线程:
ps -efL|grep qemu
ps命令主要用于监控后台进程的工作情况:
-e参数指定选择所有进程和环境变量;
-f参数指定选择打印出完全的各列;
-L参数指定打印出线程的ID和线程的个数;ps -efL|head -1
“PID”表示进程的ID;
“PPID”表示父进程的ID;
“lwp”表示线程的ID;
“CMD”表示命令;

从上面的输出可以看出,客户机的进程ID是86371,它产生了一个线程作为客户机的vCPU运行在宿主机中,这个线程ID是86374。
在客户机中,可以使用ls命令来查看CPU情况:

从上面的输出可以看出,客户机系统识别到一个QEMU模拟的CPU(cpu0)。
在客户机中,可以使用命令“cat /proc/cpuinfo”查看CPU的具体信息:

从上面的输出可以看出,客户机系统识别到一个QEMU模拟的CPU。
例2:使用smp参数,模拟有两个逻辑CPU的客户机系统。
qemu-system-x86_64 -smp 2,maxcpus=4 ubuntu14.04.img -vnc :0 -monitor stdio
其中,“-smp 2”表示分配了2个虚拟的CPU,客户机最多可以使用4个CPU,但系统在启动时,只有两个CPU处于开启的状态。

在宿主机qemu monitor中,可以使用“info cpus”命令可以看到客户机中CPU状态:

从上面的输出可以看出,只有两个CPU,线程的ID分别是86539和86536。
在宿主机中,可以使用ps命令来查看QEMU进程和线程:

从上面的输出可以看出,客户机的进程ID是86536,结合qemu monitor的数据,可以发现它产生了两个线程作为客户机的vCPU运行在宿主机中,线程ID是86539和86536。
在客户机中,可以使用ls命令来查看CPU情况:

从上面的输出可以看出,在系统启动时,客户机系统识别到两个QEMU模拟的CPU(cpu0和cpu1)。
在客户机中,可以使用命令“cat /proc/cpuinfo”查看CPU的具体信息:

例3:使用smp参数,模拟有8个逻辑CPU的客户机系统,共有2个CPU socket,每个socket有两个核,每个核有两个线程。
qemu-system-x86_64 -smp 8,sockets=2,cores=2,threads=2 -vnc :0 -monitor stdio ubuntu14.04.img

在宿主机qemu monitor中,可以使用“info cpus”命令看到客户机中CPU状态:

不是每个CPU都在启动,有一些不用时会停止。
在客户机中,可以使用命令“cat /proc/cpuinfo | grep 'processor' | sort | unip”查看CPU的具体信息:

从上面输出可以,在客户机中有8个逻辑CPU,分别是cpu0-cpu7,共有2个CPU socket,每个socket有两个核,启用了超线程,每个核有两个线程。
在客户机中,使用“cat /proc/cpuinfo | more”命令查看第二个CPU数据:

例4:使用smp参数,模拟有4个逻辑CPU的客户机系统,共有2个CPU socket,每个socket有两个核。
qemu-system-x86_64 -smp 4,sockets=2,cores=2 -vnc :0 -monitor stdio ubuntu14.04.img

在宿主机qemu monitor中,可以使用“info cpus”命令看到客户机中CPU状态:

在客户机中,可以使用命令“cat /proc/cpuinfo > cpuinfo”查看CPU的具体信息:

(在vim中搜索,在命令行输入“/”,然后输入要搜索的内容,向下匹配按“n”,向上匹配按“N”)

CPU模型
每一种虚拟机监视器都定义了自己的策略,让客户机有一个默认的CPU模型。有的VMM会简单的将宿主机中的CPU类型和特性直接传递给客户机使用。在默认情况下,QEMU会为客户机提供一个名为qemu64或qemu32的基本CPU模型。虚拟机监视器的这种策略不但可以为CPU特性提供一些高级的过滤功能,还可以将物理平台根据基本CPU模型进行分组,使得客户机在同一组硬件平台上的动态迁移更加平滑和安全。
例5:通过如下命令来查看当前的QEMU支持的所有CPU模型。

CPU模型是在源代码qemu-kvm.git/target-i386/cpu.c中的结构体数组builtin_x86_defs[]中定义的。在x86-64平台上编译和运行的QEMU,如果不加“-cpu”参数启动,默认采用“qemu64”作为CPU模型。
例6:不加“-cpu”参数来启动客户机。
qemu-system-x86_64 ubuntu14.04.img

在客户机中,可以使用命令“cat /proc/cpuinfo”查看CPU的具体信息:

从上面的输出可知,客户机中的CPU模型的名称为“QEMU Virtual CPU version 2.0.0”,这是“qemu64”CPU模型的名称。在QEMU中,除了使用默认的CPU模型之外,还可以用“-cpu cpu_model”来指定在客户机中的CPU模型。
例7:在启动客户机时指定了CPU模型为Penryn。
qemu-system-x86_64 -vnc :0 -monitor stdio ubuntu14.04.img -cpu Penryn

在客户机中,可以使用命令“cat /proc/cpuinfo”查看CPU的具体信息:

从上面的输出可知,客户机中的CPU模型的名称为“Intel Core 2 Duo P9xxx (Penryn Class Core 2)”,这是“Penryn”CPU模型的名称。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
