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的具体信息:
CPU配置+CPU模型_第1张图片
从上面的输出可以看出,客户机系统识别到一个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的具体信息:
CPU配置+CPU模型_第2张图片
例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 

CPU配置+CPU模型_第3张图片
宿主机qemu monitor中,可以使用“info cpus”命令看到客户机中CPU状态:
CPU配置+CPU模型_第4张图片
不是每个CPU都在启动,有一些不用时会停止。

客户机中,可以使用命令“cat /proc/cpuinfo | grep 'processor' | sort | unip”查看CPU的具体信息:
CPU配置+CPU模型_第5张图片
从上面输出可以,在客户机中有8个逻辑CPU,分别是cpu0-cpu7,共有2个CPU socket,每个socket有两个核,启用了超线程,每个核有两个线程。

客户机中,使用“cat /proc/cpuinfo | more”命令查看第二个CPU数据:
CPU配置+CPU模型_第6张图片
例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

CPU配置+CPU模型_第7张图片
宿主机qemu monitor中,可以使用“info cpus”命令看到客户机中CPU状态:
在这里插入图片描述
客户机中,可以使用命令“cat /proc/cpuinfo > cpuinfo”查看CPU的具体信息:
在这里插入图片描述
(在vim中搜索,在命令行输入“/”,然后输入要搜索的内容,向下匹配按“n”,向上匹配按“N”)
CPU配置+CPU模型_第8张图片
CPU模型
每一种虚拟机监视器都定义了自己的策略,让客户机有一个默认的CPU模型。有的VMM会简单的将宿主机中的CPU类型和特性直接传递给客户机使用。在默认情况下,QEMU会为客户机提供一个名为qemu64或qemu32的基本CPU模型。虚拟机监视器的这种策略不但可以为CPU特性提供一些高级的过滤功能,还可以将物理平台根据基本CPU模型进行分组,使得客户机在同一组硬件平台上的动态迁移更加平滑和安全。

例5:通过如下命令来查看当前的QEMU支持的所有CPU模型。
CPU配置+CPU模型_第9张图片
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配置+CPU模型_第10张图片
从上面的输出可知,客户机中的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配置+CPU模型_第11张图片
从上面的输出可知,客户机中的CPU模型的名称为“Intel Core 2 Duo P9xxx (Penryn Class Core 2)”,这是“Penryn”CPU模型的名称。

你可能感兴趣的:(KVM)