在用QEMU创建KVM guest的时候,为了指定guest cpu资源,用到了-smp, -sockets, -cores, -threads几个参数,
#/usr/bin/qemu-system-x86_64 -name pqsfc085 -enable-kvm -m 2048 -smp 2,sockets=2,cores=1,threads=1 \
-boot order=nc,once=d \
-hda /var/lib/pqsfc085.img \
-cdrom /root/RHEL6.4-20130130.0-Server-x86_64-DVD1.iso \
-net nic,model=virtio,macaddr=00:16:3e:3a:c0:99 \
-net tap,ifname=vnet12,script=no,downscript=no \
-vnc 127.0.0.1:66
对这个几个参数没有深入了解,最近结合physical server上lscpu命令的输出,对它们的关系梳理了一番
[root@pqsfc018 ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 32
On-line CPU(s) list: 0-31
Thread(s) per core: 2
Core(s) per socket: 8
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 45
Stepping: 7
CPU MHz: 1200.000
BogoMIPS: 4004.29
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 20480K
NUMA node0 CPU(s): 0-7,16-23
NUMA node1 CPU(s): 8-15,24-31
在这里,
socket就是主板上插cpu的槽的数目,也就是可以插入的物理CPU的个数。
core就是我们平时说的“核“,每个物理CPU可以双核,四核等等。
thread就是每个core的硬件线程数,即超线程
具体例子,上面这台服务器的CPU配置是2个socket,每个socket是8个core,每个core是超线程(2),这样,整台机器的对外的core就是2*8*2=32
SMP,对称多处理器(Symmetric Multi-Processors,简称SMP)
是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构。在这种技术的支持下,一个服务器系统可以同时运行多个处理器,并共享内存和其他的主机资源。像双至强,也就是我们所说的二路,这是在对称处理器系统中最常见的一种(至强MP可以支持到四路,AMD Opteron可以支持1-8路)。也有少数是16路的。但是一般来讲,SMP结构的机器可扩展性较差,很难做到100个以上多处理器,常规的一般是8个到16个,不过这对于多数的用户来说已经够用了。在高性能服务器和工作站级主板架构中最为常见,像UNIX服务器可支持最多256个CPU的系统,其实qemu从代码设计上也是最大支持256个virtual cpu。
以下是man qemu-kvm的内容
-smp n[,cores=cores][,threads=threads][,sockets=sockets]
set the number of CPUs to 'n' [default=1]
cores= number of CPU cores on one socket
threads= number of threads on one CPU core
sockets= number of discrete sockets in the system