使用libvirt做适配的kvm虚拟机window server 2008 磁盘性能的提升
实验室自己做了一个iaas的项目,当时是为了更方面的在kvm和xen下进行迁移,所以选择了libvirt作为适配层。
昨天简单的测试一了一下我们跟qingcloud的性能对比。我们的linux主机性能跟qingcloud差不多,但是window下的性能就差了一大截,尤其是硬盘的性能。同等配置的虚机,青云的评分是我们的好几倍,于是乎就开始寻找我们window下硬盘慢的原因。
去qingcloud上安装了一台window server 2008的虚机,通过硬件管理器看qingcloud的配置与驱动信息,如下图所示:

而我们的机器关于存储的配置是:

记得以前看过关于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倍。
]8F()7GG]0MD)G.jpg)


使用libvirt做适配的kvm虚拟机window server 2008 磁盘性能的提升的更多相关文章
- 在window server 2008 64位系统上 发布网站的过程中遇到的问题(转)
发布网站的过程如下: 1.安装数据库系统2.建立数据库,执行sql3.安装iis4.在本地机子上发布网站5.把发布好的东西拷贝到IIS上 1.安装数据库系统: 出现错误:必须使用角色管理工具 安装或配 ...
- 在window server 2008 64位系统上 发布网站的过程中遇到的问题
发布网站的过程如下: 1.安装数据库系统2.建立数据库,执行sql3.安装iis4.在本地机子上发布网站5.把发布好的东西拷贝到IIS上 1.安装数据库系统: 出现错误:必须使用角色管理工具 安装或配 ...
- Restrict each user to a single session in window server 2008 R2 or 2012
Restrict each user to a single session in window server 2008 R2 or 2012 2014-10-31 In window server ...
- Window Server 2008 R2 FTP服务用户隔离
Window Server 2008 R2 FTP服务用户隔离 原题:安装FTP服务,新建一个FTP站点,主目录为C:\ftproot,通过适当技术实现用户soft1 与soft2通过匿名方式登录FT ...
- 使用 libvirt创建和管理KVM虚拟机
1. libvirt介绍 Libvirt是一个软件集合,便于使用者管理虚拟机和其他虚拟化功能,比如存储和网络接口管理等等.Libvirt概括起来包括一个API库.一个 daemon(libv ...
- linux kvm虚拟机快速构建及磁盘类型
KVM命令管理 virsh命令:用来管理各虚拟机的接口命令查看/创建/停止/关闭...支持交互模式格式:virsh 控制指令 [虚拟机名称] [参数] [root@room1pc01 桌面]# vir ...
- 烂泥:KVM安装Windows Server 2008 R2使用virtio硬盘
本文首发于烂泥行天下. 在上一篇文章中,我们介绍了使用IDE硬盘来安装Windows Server 2008 R2,这篇文章我们来介绍使用virtio硬盘来安装Windows Server 2008 ...
- 安装Window Server 2008的些配置
上次安装window server2008,由于server2008需要设置很多东西,不然用起来很不爽,就说IE吧,每次随便打开一个网页都要弹出n多窗口出来叫你添加到信任域里面!太烦人了![下面有解决 ...
- window server 2008 安装Oracle10g
oracle安装都大同小异. 开始安装步骤 输入完之后点击下一步 这时候稍等一会儿. 这时候也要稍等一会儿. 直接安装. 设置口令管理,设置SCOTT的密码为tiger就好了. 这时候稍等一会儿. o ...
随机推荐
- android service文章转载
郑重转载几篇网络文章: Android Service使用 http://www.cnblogs.com/linlf03/archive/2013/06/14/3135273.html Android ...
- java中的Volatile 变量
Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”:与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少, ...
- mybatis遇见的奇葩问题(返回null)
1.问题描述 select 语句没有问题,执行完毕后通过日志也可以看出 select到数据了,但是拿到的值就是null 2.原因 原来是有人将对象变量命名给改了,导致select到结果后不能映射成为对 ...
- POJ1113 Wall 凸包
题目大意:建立围墙将城堡围起来,要求围墙至少距离城堡L,拐角处用圆弧取代,求围墙的长度. 题目思路:围墙长度=凸包周长+(2*PI*L),另外不知道为什么C++poj会RE,G++就没问题. #inc ...
- mongodb 数据库导入.cvs文件时某些字段类型变成NumberLong的解决办法
在mongodb中导入数据时,会在数据库中生成字段记录为NumberLong的数据,可以使用以下方式将其转换为String db.Account.find().forEach( function(it ...
- Linux下编译C代码,出现tan函数报错的情况
undefined reference to `tan' 但是已经包含了头文件 <math.h>了,可还是报错,说是找不到tan 这个问题的原因不是很清楚, 但是网上给出的方案,就是编译的 ...
- lldpd-0.7.7代码解读(send_pdu部分)
此文档是经过逆序推到出的,可能有错误之处,敬请指教,谢谢. 1)interfaces_update 更新一些接口信息 2)levent_iface_subscribe 该接口通过socket通信(非阻 ...
- Git从远程库克隆
上次我们讲了先有本地库,后有远程库,如何关联远程库. 现在,假设我们从零开始开发,那么最好的方式就是先创建远程库,然后从远程库克隆. 首先,登录GitHub,创建一个新的仓库,gitskill 创建过 ...
- iOS:UIWebView scrollView 的分页滑动问题
最近在弄一个native webview+html的项目,感觉这种尝试还是挺不错的,特被是适合内容类app.如杂志.电子书等.其实native搭的就是一个框架,主体还是在html的内容上,所以花在ht ...
- linux文件权限赋值
1修改权限 命令:chmod (change mode) 功能:改变文件的读写和执行权限.有符号法和八进制数字法. 选项:(1)符号法: 命令格式:chmod {u|g|o ...