Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1506538
  • 博文数量: 388
  • 博客积分: 8464
  • 博客等级: 中将
  • 技术积分: 4562
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-13 15:12
个人简介

狮子的雄心,骆驼的耐力,孩子的执著!

文章分类

全部博文(388)

文章存档

2018年(9)

2017年(13)

2016年(19)

2014年(7)

2013年(29)

2012年(61)

2011年(49)

2010年(84)

2009年(95)

2008年(22)

分类: 虚拟化

2011-12-29 15:24:33

1. Host上安装CentOS6(注意必须64位系统才支持虚拟化),这里选择最小化(Minimal)安装

2. 安装虚拟化相关程序组

yum groupinstall "Virtualization*"

3. 安装字体,否则virt-manager所有字符都是框框

yum -y install dejavu-lgc-sans-fonts

4. 如果安装成功,执行以下命令将可以看到kvm_intel 或者kvm_amd

lsmod | grep kvm

5. 启用X11 forwarding

yum -y install xorg-x11-xauth

6. 启用网络桥接

禁用网络管理器

# chkconfig NetworkManager off

# service  NetworkManager stop

创建用以桥接的虚拟网卡

# cd /etc/sysconfig/network-scripts 

# cp ifcfg-eth0 ifcfg-br0

编辑 ifcfg-br0

# vi ifcfg-br0 

DEVICE="br0"
TYPE="Bridge"
ONBOOT="yes"
BOOTPROTO=static
IPADDR=192.168.1.17
PREFIX=24
GATEWAY=192.168.1.1
DNS1=202.106.46.151

DELAY=0 

编辑ifcfg-eth0 

# vi ifcfg-eth0 

DEVICE="eth0"
NM_CONTROLLED="yes"
ONBOOT=yes
TYPE=Ethernet
BRIDGE="br0"
BOOTPROTO=none
IPADDR=192.168.1.17
PREFIX=24
GATEWAY=192.168.1.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
DNS1=202.106.46.151

HWADDR=00:1E:67:07:EC:30 

重新启动网络

7. 如果虚拟机里键盘按键错乱,要修改下VNCkeymap

打开Host系统的/etc/libvirt/qemu/.xml,增加keymap

修改完毕后重启服务/etc/init.d/libvirtd restart
8.centos6.4中网卡配置参数,否则网络可能会不通
bridge网卡配置中要加入如下两项

NAME="br0"
NM_CONTROLLED=no
物理网卡eth0配置中添加一项
NM_CONTROLLED=yes

9.系统需要保留的服务
cpuspeed        0:off   1:on    2:on    3:on    4:on    5:on    6:off
crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off
hypervkvpd      0:off   1:off   2:off   3:on    4:on    5:on    6:off
iptables        0:off   1:off   2:on    3:on    4:on    5:on    6:off
irqbalance      0:off   1:off   2:off   3:on    4:on    5:on    6:off
libvirt-guests  0:off   1:off   2:on    3:on    4:on    5:on    6:off
libvirtd        0:off   1:off   2:off   3:on    4:on    5:on    6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
rsyslog         0:off   1:off   2:on    3:on    4:on    5:on    6:off
sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
sysstat         0:off   1:on    2:on    3:on    4:on    5:on    6:off
vncserver       0:off   1:off   2:off   3:on    4:off   5:off   6:off


10. 使用 virt-manager 创建虚拟机,报错:Unable to complete install: 'Unable to create cgroup for fedora: No suc file or directory

解决方法:

在xwindows环境中重启 libvirtd 服务,使用指令:

/etc/init.d/libvirtd restart

重新连接 qemu ,再创建 虚拟机.
如果要修改虚拟机磁盘默认存储路径配置: /etc/libvirt/storage/autostart/default.xml ,参数/var/lib/libvirt/images,指定到实际的目录路径。
然后重起libvirtd服务。



性能优化

1、全虚拟化使用半虚拟化驱动(virtio)
    virtio是KVM的半虚拟化机制,可提高IO性能,使用virtio可心显著提高KVM性能。virtio包括磁盘驱动和网卡驱动,下面是在XML文件中的使用方法:
磁盘配置文件:
   
     
     
     
   
网卡配置文件:
   
     
     
     
     
   

2、使用writeback缓存选项
针对客户机块设备的缓存,drive有一个子选项cache来设置缓存模式。两个主要的选项为writeback和writethrough,man手册是这样说的
By default, writethrough caching is used for all block device. This means that the host page cache will be used to read and write data but write notification will be sent to the guest only when the data has been reported as written by the storage subsystem.
Writeback caching will report data writes as completed as soon as the data is present in the host page cache. This is safe as long as you trust your host. If your host crashes or loses power, then the guest may experience data corruption.
writethrough写操作时不使用主机的缓存,只有当主机接受到存储子系统写操作通知时,宿主机才通知客户机写操作,也就是说这是同步 的。而writeback则是异步的,它是当客户机有写请求时,先将数据写入宿主机缓存,而此时主机并未将数据真正写入存储系统。之后,待合适的时机主机 会真正的将数据写入存储。显然writeback会更快。
这样使用writeback选项:
   
      cache='writeback'/>
     
     
   

3、客户机的磁盘IO调度策略
    客户机上的磁盘只不过是宿主机的一个文件,所以其IO调度并无太大意义,反而会影响IO效率,所以可以通过将客户机的IO调度策略设置为NOOP来提高性能。NOOP就是一个FIFO队列,不做IO调度。可以通过给内核传递一个参数来使用NOOP调度策略
    宿主机调度方式改为:deadline deadline是通过时间以及硬盘区域进行分类,这个分类和合并要求类似于noop的调度程序确保了在一个截止时间内服务请求,默认读期限短于写期限.这样就防止了写操作因为不能被读取而饿死的现象。

3.1.宿主机优化

修改磁盘调度为deadline,修改内核启动参数,追加:elevator=deadline

3.2.客户机优化

修改磁盘调度为noop,修改内核启动参数,追加:elevator=noop

务必使用virtio磁盘驱动,使用IDE性能会下降很多。

   
4、打开KSM(Kernel Samepage Merging)
    页共享在内核2.6.32之后又引入了KSM。KSM特性可以让内核查找内存中完全相同的内存页然后将他们合并,并将合并后的内存页打上COW标记。 KSM对KVM环境有很重要的意义,当KVM上运行许多相同系统的客户机时,客户机之间将有许多内存页是完全相同的,特别是只读的内核代码页完全可以在客 户机之间共享,从而减少客户机占用的内存资源,从而可以同时运行更多的客户机。
centos默认没有开启KSM,如果KVM要使用KSM那必要安装:qemu-common。
开启KSM服务:service ksm start
            service ksmtuned start
通 过/sys/kernel/mm/ksm目录下的文件来查看内存页共享的情况,pages_shared文件中记录了KSM共享的总页面 数,pages_sharing文件中记录了当前共享的页面数。每个页面的大小为4KB 可计算出共享内在为:4X页面数=内存大小(K)
KSM会稍微的影响系统性能,以效率换空间,如果系统的内存很宽裕,则无须开启KSM,如果想尽可能多的并行运行KVM客户机,则可以打开KSM。
5、KVM Huge Page Backed Memory
    通过为客户机提供巨页后端内存,减少客户机消耗的内存并提高TLB命中率,从而提升KVM性能。x86 CPU通常使用4K内存页,但也有能力使用更大的内存页,x86_32可以使用4MB内存页,x86_64和x86_32 PAE可以使用2MB内存页。x86使用多级页表结构,一般有三级,页目录表->页表->页,所以通过使用巨页,可以减少页目录表和也表对内存的消耗。当然x86有缺页机制,并不是所有代码、数据页面都会驻留在内存中。
首先挂装hugetlbfs文件系统
#mkdir /hugepages
#mount -t hugetlbfs hugetlbfs /hugepages
然后指定巨页需要的内存页面数
#sysctl vm.nr_hugepages=xxx
客户机的XML配置文件使用巨页来分配内存:
 
 
 
或用命令行方式:
qemu-kvm -mem-path /hugepages
让系统开机自动挂载hugetlbfs文件系统,在/etc/fstab中添加
hugetlbfs /hugepages hugetlbfs defaults 0 0
在/etc/sysctl.conf中添加如下参数来持久设定巨页文件系统需要的内存页面数
vm.nr_hugepages=xxx
巨页文件系统需要的页面数可以由客户机需要的内存除以页面大小也就是2M来大体估算。
查看巨页内存信息:cat /proc/meminfo |grep Hug
    AnonHugePages:     253120 kB
    HugePages_Total:   2000
    HugePages_Free:    904
    HugePages_Rsvd:     0
    HugePages_Surp:     0
    Hugepagesize:      2048 kB使用sysctl vm.nr_hugepages=1024 之后,x86_64系统相当于从物理内存中保留了2048 x 2M = 4GB的空间来给虚拟机使用,这也和Hugepagesize的大小有关。

验证方式,当虚拟机正常启动以后,在物理机里查看:

cat /proc/meminfo |grep -i hugepages
阅读(1583) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册