Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7173350
  • 博文数量: 3857
  • 博客积分: 6409
  • 博客等级: 准将
  • 技术积分: 15948
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-02 16:48
个人简介

迷彩 潜伏 隐蔽 伪装

文章分类

全部博文(3857)

文章存档

2017年(5)

2016年(63)

2015年(927)

2014年(677)

2013年(807)

2012年(1241)

2011年(67)

2010年(7)

2009年(36)

2008年(28)

分类: LINUX

2014-07-08 12:08:13

最近一直在研究qemu-kvm,今天来总结一点心得。欢迎来拍砖。

virtio框架
virtio 框架
virtio-net为半虚拟驱动,virtio-net请求处理过程如下:
1.客户机(virtio-net设备驱动)读写数据方式vring队列
2.客户机执行Virtqueue队列函数kick通知host宿主机(通过virtio-pci硬件寄存器发送通知)
3.宿主机host截获通知信息
4.宿主机host从vring队列获取读写请求(vring队列内容涉及地址为客户机物理地址)
5.宿主机host处理读写请求
6.宿主机host处理结果添加到vring队列
7.宿主机host发送中断(通过virtio-pci中断)

而这儿的Virtio Device是由用户态的qemu-kvm虚拟的,从内核态切换用户态,必然会导致性能的下降。如果能够直接在内核态捕获,而非切换到用户态,必然能提高效率。

本文是对network的优化,至于scsi等,后续继续添加。。。。
在virtio中利用virtqueue_notify()函数通知Virtio device,向网卡发送数据。这个地方用函数钩子,替换成一个内核模块直接调用内核函数向网卡发送数据。而对于接收的数据包,采用linux netfilter机制,在qemu-kvm启动虚拟机时,添加一个对该虚拟机的网络数据接收规则来实现。

以上只是对network优化的一点想法,后续贴上对qemu-kvm和linux内核的修改代码。
阅读(484) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~