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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)