使用libvirt做适配的kvm虚拟机window server 2008 磁盘性能的提升
2013-12-13 14:23
148 查看
实验室自己做了一个iaas的项目,当时是为了更方面的在kvm和xen下进行迁移,所以选择了libvirt作为适配层。
昨天简单的测试一了一下我们跟qingcloud的性能对比。我们的linux主机性能跟qingcloud差不多,但是window下的性能就差了一大截,尤其是硬盘的性能。同等配置的虚机,青云的评分是我们的好几倍,于是乎就开始寻找我们window下硬盘慢的原因。
去qingcloud上安装了一台window server 2008的虚机,通过硬件管理器看qingcloud的配置与驱动信息,如下图所示:
![](http://images.cnitblog.com/blog/453786/201312/13105640-28ea556ee4594c17815bbb2ef55f2416.png)
而我们的机器关于存储的配置是:
![](http://images.cnitblog.com/blog/453786/201312/13110352-750e3c95f4d146238bd894b044b36574.jpg)
记得以前看过关于virtio是一个利用半虚拟话技术优化kvm下io处理性能的方案。所以就觉得我们的windows慢是因为没有配置virtio所导致。于是就查找相关的资料。
大概的原因就是:
kvm因为使用了硬件虚拟化,所以其cpu方面的运行效率是很高的。不过,kvm在I/O虚拟化方面,传统的方式是利用QEMU纯软件的方式来模拟I/O设备,这样每次虚机发起I/O请求的时候,KVM内核模块会捕获这次请求,然后处理后将其放入I/O共享页,并通知用户空间中运行的QEMU程序。QEMU获得I/O操作,交由硬件模拟代码(Emulation)来模拟出本次I/O操作之后,将结果放回I/O共享页,同时通知KVM内核模块读取I/O共享页的操作结果,把结果返回给虚机。由于这种方式每次I/O操作经过的路径很复杂,其效率很低。
所以就提出了virtio这种方案,virtio其实就是一个运行于Hypervisor之上的api接口,让客户机知道自己运行于虚拟化环境中,进行I/O操作的时候通过virtio与Hypervisor通信,从而是虚机有更好的性能。
关于virtio详细的介绍,我们下回在谈。
现在就看看怎么配置虚机,让其支持virtio。
linux下话:默认目前的流行的发行版,其自带的内核都已经将virtio相关的驱动编译为模块了,这里就不再叙述了,只需在用配置文件启动虚拟机的时候,在disk标签的target子标签的bus属性的时候指出使用的为virtio(如果没有指定该属性,默认的给的bus是ide)
另外,多说一点,target标签的的bus属性也不是必须的,如果没有bus属性,libvirt会根据dev来判断bus的类型,默认的hd* bus为ide,vd* bus为virtio。
window下的话:window就比较麻烦,微软没有提供默认的virtio的相关驱动,因此需要提供额外的驱动以便支持virtio。我选择是从Fedora项目中下载二进制ISO文件。地址是:
http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/。相关的关于virtio在window下具体的kvm官方文档是在:http://www.linux-kvm.org/page/WindowsGuestDrivers/Download_Drivers
具体的做法比如说你已经有一台win-server-08机器的镜像。但是如果你直接把你的系统盘按照linux的方法来做的话,你的win会启动不起来,因为你没有装这时候你需要装virtio相关的驱动。这时候你就需要手动去申请一块硬盘给该虚机挂上,并把下载的iso也挂载在该虚拟机上。
比如说:你用
指令申请了一块磁盘,这时候你需要修改win-server-08的libvirt的配置文件。修改为如下格式:
其中cdrom是为了挂载iso文件,以便安装virtio的驱动。而fake.img是为了让win能识别需要安装virtio的驱动。
这样你重启虚机以后,在windows下的硬件管理器之中就能看到有标黄的需要安装的驱动,选择在文件系统里安装,在iso文件里找对应的版本的驱动,下一步安装即可。是不是很简单。
经过这些步骤之后,你的带virtio i/o驱动的window的模版就OK了。
我们在我们的环境下测试新模版的i/o得分,比以前提高了大概3-4倍。
![](file:///C:\Users\haowei.yu\Documents\Tencent Files\305273687\Image\Image1\]D]([$IQ)]8F()7GG]0MD)G.jpg)
![](file:///C:/Users/haowei.yu/AppData/Local/YNote/Data/ieyuhaowei%40163.com/b72749c4567241c6b159cb74da06de4f/clipboard.png)
昨天简单的测试一了一下我们跟qingcloud的性能对比。我们的linux主机性能跟qingcloud差不多,但是window下的性能就差了一大截,尤其是硬盘的性能。同等配置的虚机,青云的评分是我们的好几倍,于是乎就开始寻找我们window下硬盘慢的原因。
去qingcloud上安装了一台window server 2008的虚机,通过硬件管理器看qingcloud的配置与驱动信息,如下图所示:
![](http://images.cnitblog.com/blog/453786/201312/13105640-28ea556ee4594c17815bbb2ef55f2416.png)
而我们的机器关于存储的配置是:
![](http://images.cnitblog.com/blog/453786/201312/13110352-750e3c95f4d146238bd894b044b36574.jpg)
记得以前看过关于virtio是一个利用半虚拟话技术优化kvm下io处理性能的方案。所以就觉得我们的windows慢是因为没有配置virtio所导致。于是就查找相关的资料。
大概的原因就是:
kvm因为使用了硬件虚拟化,所以其cpu方面的运行效率是很高的。不过,kvm在I/O虚拟化方面,传统的方式是利用QEMU纯软件的方式来模拟I/O设备,这样每次虚机发起I/O请求的时候,KVM内核模块会捕获这次请求,然后处理后将其放入I/O共享页,并通知用户空间中运行的QEMU程序。QEMU获得I/O操作,交由硬件模拟代码(Emulation)来模拟出本次I/O操作之后,将结果放回I/O共享页,同时通知KVM内核模块读取I/O共享页的操作结果,把结果返回给虚机。由于这种方式每次I/O操作经过的路径很复杂,其效率很低。
所以就提出了virtio这种方案,virtio其实就是一个运行于Hypervisor之上的api接口,让客户机知道自己运行于虚拟化环境中,进行I/O操作的时候通过virtio与Hypervisor通信,从而是虚机有更好的性能。
关于virtio详细的介绍,我们下回在谈。
现在就看看怎么配置虚机,让其支持virtio。
linux下话:默认目前的流行的发行版,其自带的内核都已经将virtio相关的驱动编译为模块了,这里就不再叙述了,只需在用配置文件启动虚拟机的时候,在disk标签的target子标签的bus属性的时候指出使用的为virtio(如果没有指定该属性,默认的给的bus是ide)
<disk type='file' device='disk'> <driver name='qemu' type='qcow2' cache='none'/> <source file='/opt/images/win-server-08.img'/> <target dev='vda' bus='virtio'/> </disk>
另外,多说一点,target标签的的bus属性也不是必须的,如果没有bus属性,libvirt会根据dev来判断bus的类型,默认的hd* bus为ide,vd* bus为virtio。
window下的话:window就比较麻烦,微软没有提供默认的virtio的相关驱动,因此需要提供额外的驱动以便支持virtio。我选择是从Fedora项目中下载二进制ISO文件。地址是:
http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/。相关的关于virtio在window下具体的kvm官方文档是在:http://www.linux-kvm.org/page/WindowsGuestDrivers/Download_Drivers
具体的做法比如说你已经有一台win-server-08机器的镜像。但是如果你直接把你的系统盘按照linux的方法来做的话,你的win会启动不起来,因为你没有装这时候你需要装virtio相关的驱动。这时候你就需要手动去申请一块硬盘给该虚机挂上,并把下载的iso也挂载在该虚拟机上。
比如说:你用
qemu-img ceate -f qcow2 10G fake.img
指令申请了一块磁盘,这时候你需要修改win-server-08的libvirt的配置文件。修改为如下格式:
<disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/nfs/192.168.1.11/volumes/e/i/3046231d8c594c6a8ec4ccd362ea394e.img'/> <target dev='hda' bus='ide'/> </disk> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='xxxx/fake.img'/> <target dev='vdb' bus='virtio'/> </disk> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <source file='xxxx/xxx.iso'/> <target dev='hdc' bus='ide'/> </disk>
其中cdrom是为了挂载iso文件,以便安装virtio的驱动。而fake.img是为了让win能识别需要安装virtio的驱动。
这样你重启虚机以后,在windows下的硬件管理器之中就能看到有标黄的需要安装的驱动,选择在文件系统里安装,在iso文件里找对应的版本的驱动,下一步安装即可。是不是很简单。
经过这些步骤之后,你的带virtio i/o驱动的window的模版就OK了。
我们在我们的环境下测试新模版的i/o得分,比以前提高了大概3-4倍。
![](file:///C:\Users\haowei.yu\Documents\Tencent Files\305273687\Image\Image1\]D]([$IQ)]8F()7GG]0MD)G.jpg)
![](file:///C:/Users/haowei.yu/AppData/Local/YNote/Data/ieyuhaowei%40163.com/b72749c4567241c6b159cb74da06de4f/clipboard.png)
![](file:///C:/Users/haowei.yu/AppData/Local/YNote/Data/ieyuhaowei%40163.com/b72749c4567241c6b159cb74da06de4f/clipboard.png)
相关文章推荐
- Windows计数器做性能监控(window server 2008服务器)
- Window Server 2008 R2无线网络无法使用
- [企业化NET]Window Server 2008 R2[3]-SVN 服务端 和 客户端 基本使用
- 使用 WebSphere Application Server 动态缓存技术提升应用性能
- 教你50招提升ASP.NET性能(十四):使用startMode属性来减少ASP.NET站点加载时间
- server2008R2无法加入域 提示“必须首先使用adprep /forestprep准备林”解决方法
- Windos Server 2008 NFS 服务安装使用
- Server 2008 R2上 配置 FTP7并使用IIS管理凭据方式进行验 序
- 提升磁盘IO性能的几个技巧
- Java - 使用JDBC操作数据库时,如何提升读取数据的性能?如何提升更新数据的性能?
- 查找未使用的非聚集索引和表 for sql server 2005/2008
- window server 2008更改管理员用户名
- web应用中使用缓存提升性能的8种武器
- 安装Window Server 2008的些配置
- window Server 2008中因防火墙规则有些软件不能在PC间通讯问题的解决方法
- 优化临时表使用,SQL语句性能提升100倍
- 不要使用dd测试磁盘性能
- [转]Numpy使用MKL库提升计算性能
- 使用自定义文件缓存提升ASP.NET项目性能
- Microsoft SQL Server 2008 使用 Management Studio 进行连接