免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2341 | 回复: 0
打印 上一主题 下一主题

KVM的半虚拟化: KVM-paravirt [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-08 18:16 |只看该作者 |倒序浏览
KVM的半虚拟化: KVM-paravirt

赵珂, cn.zhaoke.com
http://blog.zhaoke.com/48.html

2007年1月8日


什么是KVM? kvm是一个完整的全虚拟化解决方案. 当前主机操作系统支持linux系统和x86架构. 它包括了一个可加载的内核模块(kvm.ko)和一个用户空间组件. 通过使用kvm虚拟化技术, 你可以运行多个未修改的linux或windows虚拟机. 每一个虚拟机有自己的虚拟硬件: 一个网卡, 磁盘, 图形适配器, 等.

KVM支持全虚拟化和半虚拟化.


你可以通过给当前内核打kvm-paravirt-patches补丁来支持半虚拟化.

下面是Ingo Molnar的一些说明(测试和介绍):

kvm-paravirt-patches支持Intel-VMX CPU的cr3-cache硬件功能. (能够加速进程上下文切换和TLB刷新)

你可以从下面网址获得最新的内核补丁程序:

http://redhat.com/~mingo/kvm-paravirt-patches/

虽然代码的一些功能还在测试开发当中, 但是代码已经过测试证明是稳定的, 欢迎您的任何建议.

下面是一些测试数据:

2个进程上下文切换性能(单位微秒, 越小性能越好):

native: 1.11
———————————-
Qemu: 61.18
KVM upstream: 53.01
KVM trunk: 6.36
KVM trunk+paravirt/cr3: 1.60

比如. 2个进程的上下文切换性能, 第四项(结果1.60)的性能是最好的, 几乎接近于原始性能!

“hackbench 1″ (使用40个进程, 单位为秒, 越小性能越好):

native: 0.25
———————————-
Qemu: 7.8
KVM upstream: 2.8
KVM trunk: 0.55
KVM paravirt/cr3: 0.36

速度几乎快了2倍.

“hackbench 5″ (使用200个进程, 单位为秒, 越小性能越好):

native: 0.9
———————————-
Qemu: 35.2
KVM upstream: 9.4
KVM trunk: 2.8
KVM paravirt/cr3: 2.2

仍有30%的提高 - 考虑到200个进程的上下文切换, 结果还不是太糟糕. 当前CPU的cr3缓存数为4.

kvm-paravirt-patches的功能介绍:

1. 在linux客户和linux主机间提供一个专门的半虚拟化hypercall API.(接下来将被一个更好的hypercall系统调用替代).

2. 通过使用hypercall API利用Intel VMX CPU的”cr3目标缓存”功能和扩展KVM使用这些缓存”. 这项功可避免VM存在于hypervisor的上下文中. (客户机需要’知道’这些并且客户和hypervisor共享缓存, 所以完全模拟操作系统与此项功能无关).

3. Linux客户机的半虚拟化完成了少数几个更加简化的更改: IO端口的延迟不再影响VM, i8259A IRQ controller(中断控制器)的代码变的更简单(将由一个更正确的, 基于hypercall和主机维护的IRQ controller来替代), 还有取消了cr3缓存读入(如果没有取消将引起VM退出), 因此TLB刷新比以往更有效率. 这些修改已有了直接的影响: 当一个客户机空闲, 它们能减少qemu的CPU的使用率, 使用率在25%左右. (如果一个带有-rt选项的客户机的HZ=1000, CPU的使用率在~20%到14%之间).

半虚拟化通过kvm_paravirt=1启动选项来打开(现在, 这个方法比较麻烦) - 启动选项后, KVM客户机将在hypervisor端检测是否存在半虚拟化代码 - 如果发现, 然后将使用它. (如果客户机在hypervisor端发现不支持KMV-paravirt, 它将以全虚拟化方式运行.)

问题: 我只在32位的VMX上测试过kvm-paravirt. (kvm-paravirt稍微修改后将能支持64位, paravirt.c也是. 暂时我还不打算公开64位代码.)

参考
Linux: KVM Paravirtualization
http://kerneltrap.org/node/7545

相关文章
KVM虚拟化常见问题
http://blog.zhaoke.com/46.html
Linux上的虚拟化技术
http://blog.zhaoke.com/45.html
用户友好的Linux虚拟技术: KVM
http://blog.zhaoke.com/43.html
KVM: 基于内核的虚拟驱动
http://blog.zhaoke.com/42.html
Linux内核2.6.20增加虚拟化解决方案KVM
http://blog.zhaoke.com/34.html

备注
转载请保持文章完整性, 欢迎到blog.zhaoke.com网站与赵珂交流.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP