Xen 内存与CPU分配 常用命令

CPU管理

  与内存一样,你也可以管理虚拟机的CPU分配。如果虚拟机使用的是准虚拟化,CPU的分配也可以动态更改。为虚拟机分配CPU时,不一定要根据服务器中的物理CPU数目来分。如果你愿意,是可以这么做。不过,这样做是绝对优化不了性能的。如果将虚拟机与指定的物理CPU绑定,会帮助你大大地提高虚拟机性能。除此之外,还可以调整CPU的运行队列(run queue),使某台虚拟机在CPU中具有更高的优先级。

  所有可运行的虚拟CPU(VCPU)都是由物理CPU中的本地运行队列管理的。这个队列是按优先级进行排序的,队列中的每个VCPU平分CPU资源。VCPU的优先级状态有两种值:over和under。Over表示它占用的CPU资源超过了资源平分值,under表示低于这个平分值。如果VCPU的当前状态为under,调度程序下次则会优先服务该VCPU。如果调度程序发现在其CPU上没有虚拟机为under状态,则会看其它CPU中是否有VCPU状态为under,如果发现,则立即服务该VCPU。通过这种方式,所有CPU都会平均分配CPU资源。

  通过设置weight和cap参数值,管理员可以管理CPU的优先级。Weight参数用于分配CPU cycle,是一个相对值。一个weight为128的VCPU比一个weight为64的VCPU获得的CPU cycle多一倍。因此,利用这个参数可以决定哪个VCPU获得更多,哪个获得更少。第二个设置CPU的参数是cap,它设置的是domain获得的CPU cycle百分数,是一个绝对值。如果设置为100,就表示那个VCPU会100%地占用物理CPU的可用cycle。如果cap为50,则表示该VCPU占用的CPU cycle绝不会超过总量的一半。

  在如下命令示例中, id为3的虚拟机weight为128,允许使用两个物理CPU的所有CPU cycle:

  xm sched-credit -d 3 -w 128 -c 200

  对于虚拟CPU,还要做的一个重要工作就是CPU分配。默认情况下,虚拟CPU与物理CPU是没有固定联系的。要提高性能,就需要为它们建立一个这样的联系,这个工作很简单易行。为虚拟CPU和物理CPU建立“联系”的主要好处是可以防止虚拟CPU到处游荡。如果没有“联系”,调度程序会为虚拟CPU选择一个物理CPU。当某个物理CPU处于繁忙状态时,虚拟CPU就会被转移,由另一个物理CPU服务。这个工作对性能的影响是很大的。因此,将虚拟CPU与物理CPU绑定是个不错的办法。
  
  绑定虚拟CPU时,首先利用xm list命令查看当前配置。然后,在你要查看CPU详细信息的domain中使用xm vcpu-list命令,命令输出结果如下:

  lin:~ # xm vcpu-list 2


  这个命令显示,ID 2 domain当前使用了一个CPU(ID 0),该CPU当前在物理CPU 0。为了确认它的状态,可以使用如下命令:
  
  xm vcpu-pin 2 0 1

  如果你再使用xm vcpu-list命令,你会看见CPU Affinity由原来的“any cpu”变为了CPU 1。

  注意,这个设置是无法被写入的。意思是,每次重启虚拟机之后,你都必须再重新设置。

  最后,你还可以更改虚拟机分配的CPU数量。要更改此设置,既可以利用虚拟机管理器(Virtual Machine Manager)进行,也可以使用xm vcpu-set命令。例如,将domain 1分配的VCPU数改为4个,则:

  xm vcpu-set 1 4

  使用该命令时,你会发现它有时不起作用。这是因为,虚拟机的操作系统还必须支持动态更改CPU数量,不然就不能这样更改了。所以,在虚拟机的配置文件中更改其VCPU数更有效,而且不会因为重启虚拟机而失


2.1 内存管理

启动物理服务器时,所有的内存资源都会默认被分配给Domain0。然后,其它虚拟机启动时,会从Domain0获取内存资源。如果虚拟机是在完全虚拟化模式下运行,hypervisor将无法与虚拟内核对话,当前的内存分配也将无法改变。不过,如果是在准虚拟化模式(paravirtualization)下,Xen的hypervisor就可以动态更变内存分配。采用准虚拟化模式时,一定要确保Domain0至少可以分得一定的内存资源,以免它内存不足。对于Domain0的内存分配最小值,我建议设置为512MB。

要为Domain0预留内存,可以为内核添加一个启动项:dom0mem= 。例如,dom0mem=512M。打开Grub配置文件进行此设置。在Grub配置文件中,你会看到启动Xen内核的启动项。它大体如下

title XEN
root (hd0,0)
kernel /xen.gz
module /vmlinuz-2.6.16 .46-0.14-xen root=/dev/system/root vga=0x314
resume=/dev/system/swap splash=silent showopts
module /initrd-2.6.16 .46-0.14.xen

在此配置文件中的第一个“module”行后面添加dom0_mem启动项。添加之后应该是这样

title XEN
root (hd0,0)
kernel /xen.gz
module /vmlinuz-2.6.16 .46-0.14-xen root=/dev/system/root vga=0x314
resume=/dev/system/swap splash=silent showopts   dom0_mem=512M
module /initrd-2.6.16 .46-0.14.xen

设置好Domain0的内存分配后,就可以管理你的虚拟机内存分配了。启动一个虚拟机时,通常它会从Domain0获取内存资源。内存一旦分配给虚拟机,Domain0将无法再收回,即使所有虚拟机都被停止也不能收回。正是因为这个原因,所以为Domain0设置内存最小值非常重要。

要想更改虚拟机的内存分配,可以利用两个xm命令:

xm mem-set:此命令可以更改一台虚拟机的当前内存分配;
xm mem-max:此命令可以限定一台虚拟机的内存使用最大值。不过,更改最大值之后需要重启才能生效。

更改内存分配之后,一定要使用xm list命令检查设置是否生效和正确:

xmlist
2.2 CPU管理

与内存一样,你也可以管理虚拟机的CPU分配。如果虚拟机使用的是准虚拟化,CPU的分配也可以动态更改。为虚拟机分配CPU时,不一定要根据服务器中的物理CPU数目来分。如果你愿意,是可以这么做。不过,这样做是绝对优化不了性能的。如果将虚拟机与指定的物理CPU绑定,会帮助你大大地提高虚拟机性能。除此之外,还可以调整CPU的运行队列(run queue),使某台虚拟机在CPU中具有更高的优先级。

所有可运行的虚拟CPU(VCPU)都是由物理CPU中的本地运行队列管理的。这个队列是按优先级进行排序的,队列中的每个VCPU平分CPU资源。VCPU的优先级状态有两种值:over和under。Over表示它占用的CPU资源超过了资源平分值,under表示低于这个平分值。如果VCPU的当前状态为under,调度程序下次则会优先服务该VCPU。如果调度程序发现在其CPU上没有虚拟机为under状态,则会看其它CPU中是否有VCPU状态为under,如果发现,则立即服务该VCPU。通过这种方式,所有CPU都会平均分配CPU资源。

通过设置weight和cap参数值,管理员可以管理CPU的优先级。Weight参数用于分配CPU cycle,是一个相对值。一个weight为128的VCPU比一个weight为64的VCPU获得的CPU cycle多一倍。因此,利用这个参数可以决定哪个VCPU获得更多,哪个获得更少。第二个设置CPU的参数是cap,它设置的是domain获得的CPU cycle百分数,是一个绝对值。如果设置为100,就表示那个VCPU会100%地占用物理CPU的可用cycle。如果cap为50,则表示该VCPU占用的CPU cycle绝不会超过总量的一半。

在如下命令示例中, id为3的虚拟机weight为128,允许使用两个物理CPU的所有CPU cycle:

xm sched-credit -d 3 -w 128 -c 200

对于虚拟CPU,还要做的一个重要工作就是CPU分配。默认情况下,虚拟CPU与物理CPU是没有固定联系的。要提高性能,就需要为它们建立一个这样的联系,这个工作很简单易行。为虚拟CPU和物理CPU建立“联系”的主要好处是可以防止虚拟CPU到处游荡。如果没有“联系”,调度程序会为虚拟CPU选择一个物理CPU。当某个物理CPU处于繁忙状态时,虚拟CPU就会被转移,由另一个物理CPU服务。这个工作对性能的影响是很大的。因此,将虚拟CPU与物理CPU绑定是个不错的办法。

绑定虚拟CPU时,首先利用xm list命令查看当前配置。然后,在你要查看CPU详细信息的domain中使用xm vcpu-list命令,命令输出结果如下:

xm vcpu-list 2

vcpu-list

这个命令显示,ID 2 domain当前使用了一个CPU(ID 0),该CPU当前在物理CPU 0。为了确认它的状态,可以使用如下命令:

xm vcpu-pin 2 0 1

如果你再使用xm vcpu-list命令,你会看见CPU Affinity由原来的“any cpu”变为了CPU 1。

注意,这个设置是无法被写入的。意思是,每次重启虚拟机之后,你都必须再重新设置。

最后,你还可以更改虚拟机分配的CPU数量。要更改此设置,既可以利用虚拟机管理器(Virtual Machine Manager)进行,也可以使用xm vcpu-set命令。例如,将domain 1分配的VCPU数改为4个,则:

xm vcpu-set 1 4

使用该命令时,你会发现它有时不起作用。这是因为,虚拟机的操作系统还必须支持动态更改CPU数量,不然就不能这样更改了。所以,在虚拟机的配置文件中更改其VCPU数更有效,而且不会因为重启虚拟机而失效。

Set (dom-cpus=1) in  /etc/xen/xend-config.sxp.

domain0的VCPU是不能通过xm vcpu-pin来设置的,只能用以上处理,要重启,之后,可以看到其中一个状态为 pause

xm vcpu-list
Name                              ID VCPUs   CPU State   Time(s) CPU Affinity
Domain-0                           0     0     0   r--      27.4 0
Domain-0                           0     1     -   --p      13.3 1

dom0-cpus
This specifies the number of CPUs that Domain0 will be allowed to use. If the value is 0, all available CPUs will be used by Domain0.如果系統是多处理器的环境SMP(symmetric multiprocessing) ,就可以限制 Dom0 可以使用的 CPU 个数,1 代表 Dom0 只能使用一顆 CPU,以此类推...这么做的好处是可以保留 CPU 資源給 DomU 來使用.
預設 為 "0" 代表 Dom0 不受限制系統上所有的 CPU 都會使用到.

2.3 配置文件

name = "ssd.web00101"
uuid = "8724aa2b-5cbf-706f-b7c4-20ae8292328c"
maxmem = 8192
memory = 8192
cpus = "0,1,2,3"
vcpus = 4
builder = "hvm"
kernel = "/usr/lib/xen/boot/hvmloader"
boot = "c"
pae = 1
acpi = 1
apic = 1
localtime = 0
on_poweroff = "destroy"
on_reboot = "destroy"
on_crash = "destroy"
device_model = "/usr/lib64/xen/bin/qemu-dm"
sdl = 0
vnc = 1
vncunused = 1
keymap = "en-us"
disk = [ "phy:/dev/sda3,hda,w", "phy:/dev/cdrom,hdc:cdrom,r" ]
vif = [ "mac=00:16:36:50:fa:e3,bridge=virbr0,script=vif-bridge,vifname=vif3.0" ]
parallel = "none"
serial = "pty"

2.4 综述

对于虚拟机的性能优化,内存与CPU设置很重要,本文已阐述了其原因。此外,你还了解了如何调整虚拟机在物理CPU中的优先级。
2.5 一些命令

xm list 列出当前虚拟机  
xm shutdown ssd.webxxx 关闭ssd.webxxx名称的虚拟机  
xm shutdown -a 关闭所有虚拟机  
xm create -c centos5 开启centos5配置文件里的虚拟机,并且接上当前界面  
xm vcpu-list ssd.webxxx 查看ssd.webxxx名称的虚拟机的cpu信息  
virt-clone -o ssd.web00102 -n ssd.web00104 -f /dev/sda7 克隆虚拟机




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值