如何设置虚拟机CPU核数

如何设置虚拟机CPU核数,第1张

1、虚拟机在关闭的情况下,点击编辑虚拟机设置

2、cpu核数就是在第二个选项,选中

3、然后在右边的第一项就是处理器数量,第二项是每个处理器的内核数量。根据自己的需求设置就好。

4、设置完成后点击确定,保存就可以了。

有。
根据百度资料显示,ecs实例类型有高性能计算,规格为高性能计算型HC2,8核16GB。
一台云服务ECS实例就等同于一台虚拟机,包括vCPU,内存, *** 作系统,网络,磁盘等最基础的计算机组件,就是一台完整的能用的电脑。

CPU是计算机的心脏,包括运算部件和控制部件,是完成各种运算和控制的核心,也是决定计算机性能的最重要的部件。主要的参数是工作的主频和一次传送或处理的数据的位数。
CPU是英语“Central Processing Unit/中央处理器”的缩写,CPU一般由逻辑运算单元、控制单元和存储单元组成。在逻辑运算和控制单元中包括一些寄存器,这些寄存器用于CPU在处理数据过程中数据的暂时保存,
其实我们在买CPU时,并不需要知道它的构造,只要知道它的性能就可以了。
CPU主要的性能指标有:
主频即CPU的时钟频率(CPU Clock Speed)。这是我们最关心的,我们所说的233、300等就是指它,一般说来,主频越高,CPU的速度就越快,整机的就越高。
时钟频率即CPU的外部时钟频率,由电脑主板提供,以前一般是66MHz,也有主板支持75各83MHz,目前Intel公司最新的芯片组BX以使用100MHz的时钟频率。另外VIA公司的MVP3、MVP4等一些非Intel的芯片组也开始支持100MHz的外频。精英公司的BX主板甚至可以支持133MHz的外频,这对于超频者来是首选的。
内部缓存(L1 Cache):封闭在CPU芯片内部的高速缓存,用于暂时存储CPU运算时的部分指令和数据,存取速度与CPU主频一致,L1缓存的容量单位一般为KB。L1缓存越大,CPU工作时与存取速度较慢的L2缓存和内存间交换数据的次数越少,相对电脑的运算速度可以提高。
外部缓存(L2 Cache):CPU外部的高速缓存,Pentium
Pro处理器的L2和CPU运行在相同频率下的,但成本昂贵,所以Pentium II运行在相当于CPU频率一半下的,容量为512K。为降低成本Inter公司生产了一种不带L2的CPU命为赛扬,性能也不错,是超频的理想。
MMX技术是“多媒体扩展指令集”的缩写。MMX是Intel公司在1996年为增强Pentium CPU在音像、图形和通信应用方面而采取的新技术。为CPU增加57条MMX指令,除了指令集中增加MMX指令外,还将CPU芯片内的L1缓存由原来的16KB增加到32KB(16K指命+16K数据),因此MMX CPU比普通CPU在运行含有MMX指令的程序时,处理多媒体的能力上提高了60%左右。目前CPU基本都具备MMX技术,除P55C和Pentium ⅡCPU还有K6、K6 3D、MII等。
制造工艺:现在CPU的制造工艺是035微米,最新的PII可以达到028微米,在将来的CPU制造工艺可以达到018微米。

处理器的核心数,一般指的就是物理核心数,也称之为内核,双核就是包括2个独立的CPU核心单元组,而十六核就是包括十六个独立的CPU核心单元组。
核心单元组是处理各种数据的中心计算单元,多核心的处理器能够有效地进行CPU的多任务功能,或者说减少CPU的占用率。
一般一个核心对应了一个线程,而intel开发出了超线程技术,1个核心能够做到2个线程计算,而16个核心则能够做到32个线程。
超线程技术的好处就是无需增加物理核心就可以明显的进步CPU多线程功能,毕竟增加物理核心是需要占据非常大的核心面积,成本也随之增加。而线程数是一种逻辑的概念,说白了就是虚拟出的CPU核心数,现在无论是intel还是AMD都具备超线程技术。
举个例子,CPU可以想象成是一个银行,CPU核心就相当于柜员,而线程数就相当于开通了几个窗口,柜员和窗口越多,那么同时办理的业务就越多,速度也就越快。
通常情况下,一个柜员对应的是一个窗口,通过超线程技术相当于一个柜员管理着两个窗口,使用左右手同时办理两个窗口的业务,大大提高了核心的使用效率,增加了办理业务的速度。

CPU绑核策略
对Libvirt驱动而言,虚拟机的vCPU可以绑定到主机的物理CPU上(pCPU)。这些配置可以改善虚拟机实例的精确度与性能。
注意:
应该使用主机组来隔离绑核虚拟机与非绑核虚拟机,因为非绑核虚拟机不会顾及绑核虚拟机的资源需求。
$ openstack flavor set FLAVOR-NAME
--property hw:cpu_policy=CPU-POLICY
--property hw:cpu_thread_policy=CPU-THREAD-POLICY

有效的CPU-POLICY值为:

shared: (默认值) 虚拟机的vCPU允许在主机pCPU上自由浮动,尽管可能受到NUMA策略的限制。
dedicated: 虚拟机vCPU被严格绑定到一组主机pCPU上。当CPU绑定生效时,虚拟机CPU拓扑会和绑定的CPU拓扑策略一致。这意味着超分率为10。例如,如果2个vCPU的虚拟机绑定到有两个线程的物理CPU核,那么虚拟机的CPU拓扑为一个socket、一个核、两线程。

有效的CPU-THREAD-POLICY值为:

prefer: (默认值) 主机可能是也可能不是SMT(同时多线程simultaneous multithreading-based)架构,如果应用SMT架构时,优选兄弟线程。
isolate: 应用在主机可能不是SMT架构,或者必须模拟非SMT架构。当主机不是SMT架构时,每个vCPU相当于一个核。如果主机应用SMT架构,也就是说一个物理和有多个兄弟线程,每个vCPU也相当于一个物理核。其他虚拟机的vCPU不会放在同一个核上。选中的核上只有一个兄弟线程可用。
require: 主机必要使用SMT架构。每个vCPU被分配在兄弟线程上。如果主机没有SMT架构,那就不使用此主机。如果主机使用SMT架构,却没有足够空闲线程的核,那么nova调度失败。

注意:
hw:cpu_thread_policy只在hw:cpu_policy设置为dedicated时有效。
NUMA拓扑
Libvirt驱动程序可以为虚拟机vCPU定义放置的NUMA节点,或者定义虚拟机从哪个NUMA节点分配vCPU与内存。对于内存与vCPU超过计算节点NUMA容量的flavor,NUMA拓扑定义允许主机更好地利用NUMA并提高GuestOS的性能。
$ openstack flavor set FLAVOR-NAME
--property hw:numa_nodes=FLAVOR-NODES
--property hw:numa_cpusN=FLAVOR-CORES
--property hw:numa_memN=FLAVOR-MEMORY

FLAVOR-NODES: (整数) 限制虚拟机vCPU线程运行的可选NUMA节点数量。如果不指定,则vCPU线程可以运行在任意可用的NUMA节点上。
N: (整数) 应用CPU或内存配置的虚拟机NUMA节点,值的范围从0到FLAVOR-NODES - 1。比如为0,则运行在NUMA节点0;为1,则运行在NUMA节点1
FLAVOR-CORES: (英文逗号分隔的整数) 映射到虚拟机NUMA节点N上的虚拟机vCPU列表。如果不指定,vCPU在可用的NUMA节点之间平均分配。
FLAVOR-MEMORY: (整数,单位MB) 映射到虚拟机NUMA节点N上的虚拟机内存大小。如果不指定,则内存平均分配到可用NUMA节点。

例子:Flavor定义虚拟机有4个vCPU,4096MB内存,以下表示虚拟机的vCPU与内存可以分布在2个NUMA节点。虚拟机的0号与1号vCPU在NUMA 0上,2号与3号vCPU在NUMA 1上。虚拟机的2048MB内存在NUMA 0上,另外的2048MB内存分配到在NUMA 1上。
$ openstack flavor set aze-FLAVOR
--property hw:numa_nodes=2
--property hw:numa_cpus0=0,1 \
--property hw:numa_cpus1=2,3
--property hw:numa_mem0=2048
--property hw:numa_mem1=2048 \

注意:
hw:numa_cpusN与hw:numa_memN只在设置hw:numa_nodes时有效。另外,只有当实例的NUMA节点具有非对称的CPU和RAM分配(对于某些NFV工作负载很重要)时才需要。
注意:
N是虚拟机NUMA节点的索引,并不一定对应主机NUMA节点。例如,在两个NUMA节点的平台,根据hw:numa_mem0,调度会选择虚拟机NUMA节点0,但是却是在主机NUMA节点1上,反之亦然。类似的,FLAVOR-CORES也是虚拟机vCPU的编号,并不对应与主机CPU。因此,这个特性不能用来约束虚拟机所处的主机CPU与NUMA节点。
警告:
如果hw:numa_cpusN或hw:numa_memN的值比可用CPU或内存大,则会引发错误。
大页内存分配
$ openstack flavor set FLAVOR-NAME
--property hw:mem_page_size=PAGE_SIZE

有效的PAGE_SIZE值为:

small: (默认值) 使用最小的内存页面,例如x86平台的4KB。
large: 虚拟机RAM使用大页内存。例如x86平台的2MB或1G。
any: 取决于计算驱动程序。此情况下,Libvirt驱动可能会尝试寻找内存大页,但最终回落到小页。其他的驱动则可能选择可用策略。

注意:
大页内存可以分配给虚拟机内存,而不考虑Guest OS是否使用。如果Guest OS不使用大页内存,则它值会识别小页。反过来,如果Guest OS计划使用大页内存,则一定要给虚拟机分配大页内存。否则虚拟机的性能将不及预期。

背景:为什么要进程绑定到指定的CPU上?

1) 减少CPU切换开销

CPU固定绑定到主机的指定CPU上,在整个运行期间,不会发生CPU浮动, 减少CPU切换开销 ,提高虚拟机的计算性能。

2) 提供CPU cache的命中率

在多核运行的机器上,每个CPU自身会有缓存,缓存着进程使用的信息,而进程可能会被OS调度到其他CPU上,如此, CPU cache命中率 就低了,当绑定CPU后,程序就会一直在指定的cpu跑,不会由 *** 作系统调度到其他CPU上,性能有一定的提高。
taskset:设置或检索进程的CPU相关性
1) 如果没有taskset命令, 安装 包含taskset命令的util-linux工具集:yum install util-linux

2) 查看进程的CPU亲和力 ,-p选项是一个十六进制数,-cp选项是一个cpu列表,表示相应的cpu核。3的二进制形式是0011,相应的第0位和第1位都是1,表示14795进程只能运行在cpu的第0个核和第1个核。

$ taskset -p 14795
pid 14795's current affinity mask: 3

$ taskset -cp 14795

pid 14795's current affinity list: 0,1

3) 绑定CPU : taskset -cp <CPU IDs>  <Process ID>

$ taskset -cp  0  14795

pid 14795's current affinity list: 0,1

pid 14795's new affinity list: 0

OpenStack K版本引入了许多CPU高级特性功能,不仅支持自定义CPU拓扑功能,支持设置虚拟机CPU的socket、core、threads等,还支持CPU pinning功能,即CPU核绑定,甚至能够配置虚拟机独占物理CPU,虚拟机的vCPU能够固定绑定到物理宿主机的指定pCPU上,在整个运行期间,不会发生CPU浮动,减少CPU切换开销,提高虚拟机的计算性能。
$ lscpu

Architecture:          x86_64

CPU op-mode(s):        32-bit, 64-bit

Byte Order:            Little Endian

CPU(s):                40

On-line CPU(s) list:  0-39

Thread(s) per core:    2

Core(s) per socket:    10

Socket(s):            2

NUMA node(s):          2

Vendor ID:            GenuineIntel

CPU family:            6

Model:                63

Model name:            Intel(R) Xeon(R) CPU E5-2650 v3 @ 230GHz

Stepping:              2

CPU MHz:              1201480

BogoMIPS:              460387

Virtualization:        VT-x

L1d cache:            32K

L1i cache:            32K

L2 cache:              256K

L3 cache:              25600K

NUMA node0 CPU(s):    0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38

NUMA node1 CPU(s):    1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39

以上可知,该宿主机有两个CPU(socket),每个CPU 10核(core),每个核可以开启两个 超线程(thread) ,即有40个逻辑CPU。宿主机CPU包含两个NUMA node,其中node0包括0,2,4,,38,node1包括1,3,5,,39。

步骤1) 创建支持绑核的主机集合

不是所有的计算节点都支持CPU绑核特性,可以通过主机集合(host aggregate)把支持绑核CPU的主机放到一个集合中。

步骤2)  创建支持绑核的flavor

目前Nova并不支持启动时直接指定主机集合的metadata(hint只支持指定server group),需要通过flavor的扩展属性和主机集合的metadata匹配,将不匹配的主机滤掉,部署到匹配的主机上。flavor支持配置虚拟机的CPU拓扑、QoS、CPU pinning策略、NUMA拓扑以及PCI passthrough等扩展属性。

步骤3) 通过步骤2) 的Flavor创建虚拟机,创建完成到虚机所在物理机上查看虚机绑核情况:

查询方法1) virsh dumpxml 虚机id
<vcpu placement='static'>8</vcpu>
<cputune>

<vcpupin vcpu='0' cpuset='25'/>

<vcpupin vcpu='1' cpuset='5'/>

<vcpupin vcpu='2' cpuset='8'/>

<vcpupin vcpu='3' cpuset='28'/>

<vcpupin vcpu='4' cpuset='9'/>

<vcpupin vcpu='5' cpuset='29'/>

<vcpupin vcpu='6' cpuset='24'/>

<vcpupin vcpu='7' cpuset='4'/>

<emulatorpin cpuset='4-5,8-9,24-25,28-29'/>

</cputune>

查询方法2) 在虚拟机所运行的物理宿主机上执行virsh list找到相应虚机的实例id,然后virsh vcpupin 实例id可以查到该虚拟机所占用的CPU具体核数。

# virsh vcpupin vm46  绑核的虚机
VCPU: CPU Affinity

----------------------------------

  0: 25

  1: 5

  2: 8
  3: 28

  4: 9
  5: 29

  6: 24
  7: 4

# virsh vcpupin vm6 未绑核的虚机
VCPU: CPU Affinity

----------------------------------

  0: 0-39 

  1: 0-39

  2: 0-39 
  3: 0-39

  4: 0-39 
  5: 0-39

  6: 0-39 
  7: 0-39

virsh vcpupin 子命令是KVM自带的指令工具,它可以把vm实例的每个vcpu与宿主机的cpu对应绑定,这种绑定方式粒度更小。
# virsh vcpupin vm4 查看绑定情况
VCPU: CPU Affinity

----------------------------------

  0: 0-23     

  1: 0-23

#默认2个vcpu没有进行绑定,可以在0-23号cpu上切换

# virsh vcpuinfo vm4 查看CPU使用时长
VCPU:          0

CPU:            10  #运行在10号cpu上

State:          running

CPU time:      142s

CPU Affinity:  yyyyyyyyyyyyyyyyyyyyyyyy

VCPU:          1

CPU:            8      #运行在8号cpu上

State:          running

CPU time:      68s

CPU Affinity:  yyyyyyyyyyyyyyyyyyyyyyyy

# virsh vcpupin vm4 0 3 绑定虚机的第1个CPU到宿主机的第4号cpu上
# virsh vcpupin vm4 1 5 绑定虚机的第2个CPU到宿主机的第6号cpu上

# virsh vcpuinfo vm4

VCPU:          0

CPU:            3

State:          running

CPU time:      145s

CPU Affinity:  ---y--------------------

VCPU:          1

CPU:            5

State:          running

CPU time:      73s

CPU Affinity:  -----y------------------

# virsh vcpupin vm4

VCPU: CPU Affinity

----------------------------------

  0: 3

  1: 5

三种方法的相同点:都能实现绑核效果

优劣势对比:openstack支持虚机重生虚拟迁移到其他物理主机上,第1种方法在这些 *** 作后绑核还是有效的,但2和3就不会绑核的。此外,第1种方法是自动的,2和3是手动的,可以作为临时补救方法。

在虚拟机上执行高密度计算,测试的Python脚本如下:

# test_computepy

k = 0

for i in xrange(1, 100000):

    for j in xrange(1, 100000):

        k = k + i j

使用shell脚本同时跑50个进程,保证CPU满载运行:
for i in `seq 1 50`; do

    python test_computepy &

done

使用sar命令查看宿主机CPU使用情况:
sar -P ALL 1 100

结果如下:
Linux 3100-229201el7x86_64 (8409a4dcbe1d11af)    05/10/2018      _x86_64_        (40 CPU)
10:20:14 PM    CPU    %user    %nice  %system  %iowait    %steal    %idle

10:20:15 PM    all    2048      000      015      003      000    7934

10:20:15 PM      0      000      000      000      000      000    10000

10:20:15 PM      1      099      000      000      000      000    9901

10:20:15 PM      2      000      000      000      000      000    10000

10:20:15 PM      3      000      000      000      000      000    10000

10:20:15 PM      4    10000      000      000      000      000      000

10:20:15 PM      5    10000      000      000      000      000      000

10:20:15 PM      6      000      000      000      000      000    10000

10:20:15 PM      7      000      000      000      000      000    10000

10:20:15 PM      8    10000      000      000      000      000      000

10:20:15 PM      9    10000      000      000      000      000      000

10:20:15 PM      10      101      000      000      000      000    9899

10:20:15 PM      11      100      000      000      000      000    9900

10:20:15 PM      12      000      000      000      000      000    10000

10:20:15 PM      13      000      000      099      000      000    9901

10:20:15 PM      14      099      000      099      000      000    9802

10:20:15 PM      15      100      000      000      000      000    9900

10:20:15 PM      16      099      000      099      000      000    9802

10:20:15 PM      17      000      000      000      000      000    10000

10:20:15 PM      18      000      000      000      000      000    10000

10:20:15 PM      19      396      000      099      000      000    9505

10:20:15 PM      20      000      000      000      000      000    10000

10:20:15 PM      21      000      000      000      000      000    10000

10:20:15 PM      22      000      000      000      000      000    10000

10:20:15 PM      23      000      000      000      000      000    10000

10:20:15 PM      24    10000      000      000      000      000      000

10:20:15 PM      25    10000      000      000      000      000      000

10:20:15 PM      26      000      000      000      000      000    10000

10:20:15 PM      27      000      000      000      000      000    10000

10:20:15 PM      28    10000      000      000      000      000      000

10:20:15 PM      29    10000      000      000      000      000      000

10:20:15 PM      30      200      000      000      000      000    9800

10:20:15 PM      31      000      000      000      000      000    10000

10:20:15 PM      32      297      000      099      000      000    9604

10:20:15 PM      33      000      000      000      000      000    10000

10:20:15 PM      34      000      000      000      000      000    10000

10:20:15 PM      35      100      000      000      000      000    9900

10:20:15 PM      36      000      000      000      000      000    10000

10:20:15 PM      37      000      000      000      000      000    10000

10:20:15 PM      38      000      000      000      000      000    10000

10:20:15 PM      39      000      000      000      000      000    10000

从CPU使用情况看宿主机的pCPU 4-5,8-9,24-25,28-29使用率100%,并且整个过程中没有浮动,符合我们的预期结果,说明CPU核绑定成功。

esxi5x默认都是使用VM80的虚拟硬件兼容版本,这个版本中最大支持32vCPU。

如果升级虚拟硬件兼容版本到90或100,最大支持64vCPU;

如果升级虚拟硬件兼容版本到110,最大支持128vCPU。

升级虚拟硬件兼容性版本,可以使用VMware workstation或vCenter server进行 *** 作。

VM90~100

VM110


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12900614.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)

保存