大家好,我的物理降温的方法 婴儿机cpu为4路10核,内存512GB;能分配出多少台2Vcpu 32GB内存的虚拟机呢?VMware平台来的

openstack中虚拟机CPU与内存布局设计(二) - libvirt-numa-thp - ITkeyowrd
openstack中虚拟机CPU与内存布局设计(二)
最近在整理Openstack的一些设计,发现网上找到的一些资料都比较零碎,而官方的设计文档非常详细,但都是英文读起来略吃力,干脆花点功夫做点翻译好了。
领取地址:
接上篇。。。
----------------------------------分割线----------------------------------------------
专用资源绑定
计算节点可以配置CPU与内存的超配比例,例如,16个物理CPU可以执行256个虚拟CPU,16GB内存可以允许使用24GB虚拟机内存。 超配的概念可以扩展到基本的NUMA布局,但是一旦提到大页内存,内存便不能再进行超配。当使用大页内存时,虚拟机内存页必须与主机内存页一一映射,并且主机操作系统能通过交换分区分配大页内存,这也排除了内存超配的可能。
一般情况下,尽管vCPU允许超配,但是大页内存的使用,意味着需要支持内存作为专用资源的虚拟机类型。
尽管设置专用资源时,不会超配内存与CPU,但是CPU与内存的资源仍然需要主机操作系统提前预留。如果使用大页内存。必须在主机操作系统中明确预留。对于CPU则有一些灵活性。因为尽管使用专用资源绑定CPU,主机操作系统依然会使用这些CPU的一些时间。也许不管怎么样,需要预留一定的物理CPU专门为主机操作系统服务,以避免操作系统过多占用虚拟机CPU,而造成对虚拟机性能的影响。Nova可以保留一部分CPU专门为操作系统服务,这部分功能将会在后续的设计中加强。
允许内存超配时,超出主机内存的部分将会使用到swap。Swap将会影响主机整体I/O性能,所以尽量不要把需要专用内存的虚拟机机与允许内存超配的虚拟机放在同一台物理主机上。
如果专用CPU的虚拟机与允许超配的虚拟机竞争CPU,由于cache的影响,将会严重影响专用CPU的虚拟机的性能,特别在同一个NUMA单元上时。因此,最好将使用专用CPU的虚拟机与允许超配的虚拟机放在不同的主机上,其次是不同的NUMA单元上。
Linux内核有一项特性,叫做内核共享存储(KSM),该特性可以使得不同的处理器共享相同内容的内存页。内核会主动扫描内存,合并内容相同的内存页。如果有处理器改变这个共享的内存页时,会采用写时复制的方式写入新的内存页。当一台主机上的多台虚拟机使用相同操作系统或者虚拟机使用很多相同内容内存页时,KSM可以显著提高内存的利用率。因为内存扫描的消耗,使用KSM的代价是增加了CPU的负载,并且如果虚拟机突然做写操作时,会引发大量共享的页面,此时会存在潜在的内存压力峰值。虚拟化管理层必须因此积极地监控内存压力情况并做好现有虚拟机迁移到其他主机的准备,如果内存压力超过一定的水平限制,将会引发大量不可预知的swap操作,甚至引发OOM。
zswap特性允许压缩内存页被写入swap设备,这样可以大量减少swap设备的I/O执行,减少了交换主机内存页面中固有的性能下降。
Related resources (PCI)
关于虚拟机在主机上的CPU与内存的布局决策,也会影响其他的主机资源分配。例如,PCI设备与NUMA单元关系密切,PCI设备的DMA操作使用的内存最好在本地NUMA单元上。因此,在哪个NUMA单元上分配虚拟机,将会影响到PCI设备的分配。
技术可行性
本节讨论支持上述特性的各种虚拟化技术的可行性。
Libvirt / KVM
从2014年4月份起,libvirt开始支持以下特性:
o 虚拟CPU与物理CPU映射
o 主机NUMA内存布局与策略(例如,虚拟机从哪个单元上申请内存,以及是否为强制策略或者优选策略)
o 支持虚拟机大页内存
o 虚拟机NUMA拓扑
o 虚拟机虚拟CPU拓扑
o 为虚拟机分配资源组(使用cgroups),允许对整个组设置统一的NUMA或者调度策略
Libvirt不支持以下特性:
o 不能指定NUMA单元与主机NUMA单元映射
o 不能控制有关NUMA单元的大页内存 (该功能需要基于虚拟机NUMA单元与主机NUMA单元映射)
o 不能检测剩余可用大页内存以及大页内存大小
o 不能控制分配的大页内存大小
o 不提供创建、定义与控制虚拟机资源组的API(必须由操作系统管理员提前定义)
o 不能检测PCI设备映射到的NUMA单元
为实现为特定虚拟机分配专有资源,有一些约束条件需要注意:
o 专有物理CPU。正如讨论中提到的,如果为虚拟机设置物理CPU亲和性,其他虚拟机要避免使用该虚拟机的专有物理CPU。以下几个方法可以实现这点:
o 在主机配置时,为所有虚拟机创建两个资源组,为两个组分配不同的物理CPU。使用专有资源的虚拟机与共享资源的虚拟机分别使用两个不同的资源组。
o 准备一些不超配的主机只用于专用资源
o 当出现一个需要专有资源的虚拟机时,动态更新所有现有虚拟机的物理CPU亲和性
o 为所有的虚拟机预先设置物理CPU亲和性,以预留一部分物理CPU为后面的专有资源虚拟机使用
o 为虚拟机设置固定的调度时间片,允许他们在物理CPU之间自由调度
o 专有内存。以下两种方法实现这一点:
o 为专有资源虚拟机使用大页内存。这需要主机拥有足够的可用大页内存,并且虚拟机内存大小是大页内存大小的倍数。
o 在主机配置时,为所有虚拟机创建两个资源组,为两个组分配不同的物理内存区域。使用专有资源的虚拟机与共享资源的虚拟机分别使用两个不同的资源组。
专用内存的分配的复杂性还在于,主要虚拟机之外,KVM还有许多不同的内存分配的需求,有些虚拟机处理视频内容,会在KVM过程处理I / O请求时,分配任意大小的内存。有些情况下,这也会影响虚拟CPU的使用,因为KVM模拟程序线程代表的就是虚拟机行为。更进一步讲,主机操作系统也需要内存与CPU资源。
o 通过设置cores-per-socket值,可以限制虚拟CPU拓扑,不支持超线程。详细参见: http://support.citrix.com/article/CTX126524
接上篇。。。 ----------------------------------分割线---------------------------------------------- 专用资源绑定 计算节点可以配置CPU与内存的超配比例,例如,16个物理CPU可以执行256个
相关阅读排行
相关内容推荐
请激活账号
为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。
您的注册邮箱:
如果您没有收到激活邮件,请注意检查垃圾箱。VMware vSphere 5.5 的最高配置_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&10W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
VMware vSphere 5.5 的最高配置
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩6页未读,
定制HR最喜欢的简历
你可能喜欢VMware vCenter 资源池
资源池是灵活管理资源的逻辑抽象。资源池可以分组为层次结构,用于对可用的 CPU 和内存资源按层次结构进行分区。
每台独立主机和每个DRS 群集都具有一个(不可见的)根资源池,此资源池对该主机或群集的资源进行分组。根资源池之所以不显示,是因为主机(或群集)与根资源池的资源总是相同的。
用户可以创建根资源池的子资源池,也可以创建用户创建的任何子资源池的子资源池。每个子资源池都拥有部分父级资源,然而子资源池也可以具有各自的子资源池层次结构,每个层次结构代表更小部分的计算容量。
一个资源池可包含多个子资源池和/或虚拟机。您可以创建共享资源的层次结构。处于较高级别的资源池称为父资源池。处于同一级别的资源池和虚拟机称为同级。群集本身表示根资源池。如果不创建子资源池,则只存在根资源池。
资源池(Resource Pool, RP)有2种,CPU资源池和Memory资源池。其概念还是很容易理解的。
下图截取自官方的《vSphere Resource Management Guide》第36页
图1:资源池
其中1台主机有6GHz CPU资源和3GB可用内存资源。并且创建了2个资源池,RP-QA获得2/3的资源,也就是4GHz CPU资源和2GB内存资源。RP-Marketing获得剩下的1/3的资源。
一个集群(Cluster)的资源池包含集群中所有主机(Host)的资源总和。比如一个2主机的集群,每个主机都有16GHz CPU和16GB内存,那么这个集群的资源总和就是32GHz的CPU和32GB的内存。在这个集群中创建的资源池就从这个总的可用资源中分配。
集群的可用资源总是小于集群的总资源,这是因为每台主机都会占用一部分CPU和内存资源,保留给自己的Hypervisor和COS用(如果是ESX的话)。
虽然集群资源池是所有主机资源的总和,但是并不意味着某一VM可以使用超过某一主机的资源。比如,2台16GB内存的主机组成集群,集群中创建了一个30GB内存的资源池,但是任何单台VM都不能使用超过16GB pRAM的,因为VM不能跨主机使用资源,VM可用到的资源还受到单台主机物理资源上限的影响。
同VM一样,资源池也有Shares, Reservation和Limit这3个配置项。(见下图)
图2:编辑资源池属性
RP的Limit和VM的Limit类似,不同的就是这个limit是RP中所有VM可用物理资源的上限值。
虽然Limit不会限制VM的创建,但是它限定了可用物理资源,影响了RP中运行中VM的性能。
【Shares】
资源池的资源通常通过份额来分配。有3种预设的份额分配方式,High,Normal和Low,比重分别为4:2:1。反映在Shares数字上则如下表
份额(Shares)类型
如果各一个RP的%
比如说一个集群有5个资源池,1个High,2个Normal,2个Low,那么High的RP可以获得4/(4+2*2+1*2)=40%的资源,Normal的RP各可以获得20%,Low的RP各可以获得10%资源。
资源池下可以建子资源池。资源按份额的比例分配。
看图很容易理解。
图3:资源池与子资源池
下面通过几个例子来说明问题。
例子中有2个RP,一个叫IT-RP,另一个叫QA-RP。有3台VM,其中Test01分配了2个vCPU和2GB内存;虚机thick-dp和thin-dp都只有1个vCPU和1GB内存。
(1) CPU资源的份额(shares)和vCPU个数有关,Normal类型下,每个vCPU 1000份额。
例如:同一个RP下的VM,都设了normal,1个vCPU的thick-dp和thin-dp都只占share 1000,2个vCPU的Test01占share 2000
图4:例子1-CPU
Worst case allocation是最坏情况下该VM会占用的资源数量,这个最坏情况是指VM,而不是RP,换一句话说就是VM在运行一个耗CPU的程序,已经达到了100% CPU占有率。这个值是根据当前资源状况动态计算出来的。我的例子中因为没有争用,所以耗CPU的VM可以跑满2个vCPU,我的host用的是XEON E5405,是四核且每核2GHz,因此2个vCPU可以用足4000MHz,2个vCPU的thick-dp可以用足2000MHz。thin-dp这台VM因为设置了CPU Limt为1000MHz,因此它的Worst Case Allocation是1000MHz。
内存资源的份额和VM的配置内存大小(configured memory size)有关。Normal类型下,每1MB的内存占10份额。也就是说每1GB(1024MB)就是10240份额。
例如:同一个RP下的VM,都设了normal,1GB内存的VM的份额是10240,2GB内存的Test01虚机就有20480份额。
图5:例子1-Memory
内存的Worst Case Allocation和CPU的类似,是指运行一个耗内存的程序时VM最多能占用的pRAM的数量。大家会发现这个最坏情况占用比配置内存/内存上限还要大一点,多的那部分就是用于memory overhead的。memeory overhead的大小和VM被配置了多少个vCPU和多少vRAM有关。
(2) 在cluster根一级的VM和其下的第一层Resource Pool共同分享所有资源。
Normal RP默认份额是4000,单vCPU的VM的Normal份额是1000,2个vCPU的是2000
图6:例子2
所以,如果某服务器特别重要,需要特别多的份额,那就直接放在cluster底下,可以不用放进任何RP
Normal类型的资源池,其内存份额是163840,CPU份额是4000,相当于一台配置了4vCPU和16GB内存的VM。(为便于记忆这么类比)
(3) 将VM从某一个RP移走,份额总数会减少,意味着每一单位份额的资源增加了;VM移入某个RP,总份额会增加,意味着每一单位份额的资源减少了。
图7:例子3-移除VM对资源分配的影响
这个例子中,总份额数从8000下降到了6000,原先有16GHz CPU资源,每一份是2MHz,现在增加到了2.67MHz。因此每个RP的总资源也增加了。
VM移动到另一个RP的时候,其Limit和Reservation值保留。其份额如果是以Normal, High, Low表示的话,将在目的RP中占有相应的比例。并且影响到目的RP的总份额数。下图例子中,Test01的加入导致该RP中总份额由2000增加到了4000,因此单位份额的CPU资源下降了一半,原先每台VM的可用资源比例也从50%下降到了25%.
图8:例子3-加入VM对资源分配的影响
重要!强调一点,份额(Shares)必须是在有资源争用(Contention)的情况下才起作用。
千万不要被图1所迷惑了,错以为6GHz的CPU就应该按照Normal比Low的2:1的比例分配给2个RP,其中1个4GHz,另外一个2GHz。错! 大错特错!真实的情况是,在没有发生争用的时候,不管其中哪1台VM(例如VM-Marketing1)都可以用5GHz甚至更多的CPU资源。
【Reservation】
RP的reservation不是决定其中的VM能用多少CPU/内存资源,而是用来分配给VM的Reservation用的。如果RP的可用保留(Available Reservation)不够VM Reservation需要的量,VM将不能被启动,或者正在运行中的VM不能被移动到该RP中。这种检查叫做准入控制(Admission Control)。
比如资源池中可用内存保留是1500MB。位于该RP中的VM1和VM2的内存保留都是1024MB,当我们启动 VM1的时候,可以正常启动。但是再启动VM时,剩下的可用内存保留只有476MB,不够1024MB,于是VM2无法启动,用户将收到 Insufficient Memory Resource的报错。
资源池有2种类型,Fixed和Expandable。在上面的截图中可以看见,CPU和Memory资源都可以勾选Expandable Reservation,默认是勾选的。如果手工去掉这个勾,就可以更改为Fixed。
Fixed类型就是其中的VM的Reservation只能使用自己的Reservation,而Expandable的RP Reservation就是不仅可以使用自己的Reservation,而且当RP中的可用保留(Available Reservation)不够VM用的时候,可以使用父RP中的可用保留。
下图就是将Memory Reservation类型从Fixed改成Expandable后,Available Reservation的变化。
图9:资源保留的类型Fixed和Expandable
VM开机才会有Reservation,关机的时候就把这部分Reservation还回资源池了。
RP Reservation中的内存/CPU资源并非被这个RP独占,而其他RP无法使用。如果某一个RP Reservation中的内存没有被用掉,而其他RP的VM还是可以使用这部分内存的。
举例,Host有3GB内存,完全竞争下RP1获得1GB,RP2获得2GB。RP1设了1GB的Reservation,但是其中没 有VM。RP2中有且仅有一台VM配置了2.5GB内存,运行一个耗内存的程序,那么这个VM可以获得2.5GB的pRAM,其中0.5GB来自RP1, 而无视其Reservation。
但是,增加某个RP的Reservation就减少了其他RP可以获得的Reservation。
还是上例中,Host有3GB内存,RP1 Normal,reservation 1GB,RP2 Low,reservation 0.5GB。那么Host还剩下1.5GB的 Available Reservation。如果RP1和RP2都是expandable的,那么RP1的Available Reservation有2.5GB,RP2的Available Reservation会显示有2GB。此时,增加RP1的Reservation到2GB,你会发现RP1的Available Reservation还是2.5GB,但是RP1的却只有1GB了。
开启一台VM所需要的物理内存,不仅和Memory Reservation有关,也和Memory Overhead有关。当Available Reservation小于开启一台VM所需的需求(等于Memory Reservation和Overhead的和)时,VM就无法启动。
举例,如上图9中,Fixed的时候,可用保留只剩下132MB了,此时启动1台2vCPU,2GB内存,0内存保留的VM,是否能启动呢?答案是不能,因为虽然此VM内存保留设为了0,但是Memory Overhead还需要198MB可用内存保留。因此无法启动。
现在揭晓思考题1的答案:不对。这台VM可以被创建,也可以被运行。虽然这台VM不能跨主机使用资源,也就是它最多可以用到16GB的pRAM,但是别忘记它还有swap,因此,20GB的swap保证了Guest OS的运行。
CPU资源池创建示例
2.1 无资源池
假定有一台 ESX/ESXi 主机,提供 6 GHz 的 CPU 和 3 GB 的内存,这些 CPU 和内存必须在Finance部门和 Test 部门间进行共享。这里假定两个部门优先级相同,则无需创建资源池,所有虚拟机共同分享所有CPU资源/内存。假定Finance和Test部门各自只有一 台虚拟机,虚拟机运行不停做正弦运算的脚本CPUBUSY.VBS,则可以通过脚步输出来测试CPU性能:
CPUBUSY.VBS代码如下:
Dim before
goal = 2181818
Do While True
before = Timer
For i = 0 to goal
x = 0.000001
y = sin(x)
y = y + 0.00001
y = y + 0.01
WScript.Echo "I did three million sines in " & Int(Timer - before + 0.5)
& " seconds!"
从下面的输出可以看出来,两台虚拟机获得的CPU资源基本相同:
让两台虚拟机利用率都是100%是很有必要的,否则ESX/ESXi CPU喂不饱,就不会发生资源竞争,接下来的测试就得不出有效输出。
2.2 给虚拟机指定运行CPU
右键两台虚拟机,编辑属性,然后选择资源:
2.3 创建资源池
在&创建资源池&对话框中,键入 Finance 部门的资源池的名称(例如 Fin_Prod)。
将 Fin_Prod的 CPU 份额指定为高。将Finance 部门虚拟机(或多个虚拟机)拖至资源池Fin_Prod。
创建第二个资源池 Test_Prod。将 CPU 份额指定为低。将Test部门虚拟机(或多个虚拟机)拖至资源池Test_Prod。
单击确定退出。
为了更好的达到测试结果,在每个虚拟机上运行3次脚本,左边为Finance 部门虚拟机,右边为Test部门虚拟机。可以很明显的看出Finance 部门虚拟机脚本运行时间仅为Test部门虚拟机的四分之一。这是因为CPU 份额指定为高时份额数目为8000,低则只有2000。
将 Fin_Prod的 CPU 份额指定为低,Test_Prod指定为高,则脚本运行时间马上发生了变化,可以说是180&的转变:
在性能界面上更能清晰的看出来两个虚拟机的CPU资源发生的变化:
CPU获得资源基本相同-&Finance部门虚拟机运行快-&Test部门虚拟机运行快
阅读(...) 评论()Openstack中的虚拟机的cpu绑定 - 推酷
Openstack中的虚拟机的cpu绑定
# vim /etc/nova/nova.conf
vcpu_pin_set = 4-12,^8,15
重启nova服务,所有实例只能跑在CPUs 4,5,6,7,9,10,11,12,15上。
设置cpu绑定策略
flavor extra specs:
hw:cpu_policy=shared|dedicated
hw:cpu_threads_policy=avoid|separate|isolate|prefer
属性配置说明参见:
也就是说这个所谓的绑定,并不是让用户显式的将一个vcpu绑定到某一物理cpu上,openstack不会暴露给用户物理cpu的layout信息;它的使用只是由用户指定绑定选项dedicated,并制定绑定策略,由nova来通过一系列调度具体选择绑定某个vcpu到某一pcpu上。使用方法一般是建两个host-aggregate,一个叫cpu_pinning,一个叫normal,两个aggregate加入不同物理机,有绑定需求的虚机使用cpu_pinning这个aggregate中的物理机建虚机。不会将有绑定需求和没有绑定需求的cpu放在同一个物理机上
也可以通过修改虚拟机XML配置文件制定vcpu绑定到某一个具体的pcpu
手动修改cpu绑定
修改虚拟机XML配置文件:
&vcpu placement='static' cpuset='0'&1&/vcpu&
&topology sockets='1' cores='1' threads='1'/&
# virsh vcpupin instance-
VCPU: CPU Affinity
----------------------------------
# virsh vcpuinfo instance-
CPU Affinity:
y---------------
&vcpu placement='static' cpuset='0,2,4,10,12'&5&/vcpu&
&vcpupin vcpu='0' cpuset='0'/&
&vcpupin vcpu='1' cpuset='2'/&
&vcpupin vcpu='2' cpuset='12'/&
&vcpupin vcpu='3' cpuset='10'/&
&vcpupin vcpu='4' cpuset='4'/&
&/cputune&
&topology sockets='1' cores='5' threads='1'/&
# virsh vcpupin instance-
VCPU: CPU Affinity
----------------------------------
# virsh vcpuinfo instance-
CPU Affinity:
y---------------
CPU Affinity:
--y-------------
CPU Affinity:
------------y---
CPU Affinity:
----------y-----
CPU Affinity:
----y-----------
自动修改cpu绑定
# 通过修改虚拟机xml配置文件,制定vcpu和pcpu的绑定关系
ssh_client = SSHClient(ip, user, password)
cputune_subxml = &&
cpuset = []
for cpu_pin in cpu_pin_info:
cpu_pin_xml = (&&vcpupin vcpu='%s' cpuset='%s'/&&
% (cpu_pin[0], cpu_pin[1]))
cputune_subxml += cpu_pin_xml
cpuset.append(str(cpu_pin[1]))
sed_command = (&s|&vcpu placement=.*$|&
&&vcpu placement='static' cpuset='%s'&%s&/vcpu&|g;&
&s|&topology sockets=.*$|&
&&topology sockets='1' cores='%s' threads='1'/&|g;&
% (&,&.join(cpuset), len(cpu_pin_info),
len(cpu_pin_info)))
if cputune_subxml:
sed_command += (&/&cputune&/,/&\\/cputune&/d;&)
sed_command += (&/&vcpu placement/a\\&cputune&%s&\\/cputune&&
% cputune_subxml)
command = (&EDITOR=\&sed -i \\\&%s\\\&\& virsh edit %s&
% (sed_command, instance_name))
LOG.debug(&Set cpu pinnig. command=%s& % command)
ssh_client.exec_command(command)
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致Windows Server 2012 Hyper-V:像物理机一样使用虚拟机_图文_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&10W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Windows Server 2012 Hyper-V:像物理机一样使用虚拟机
&&Windows Server 2012 Hyper-V:像物理机一样使用虚拟机
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩25页未读,
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 孩子39度高烧物理降温 的文章

 

随机推荐