Chinaunix首页 | 论坛 | 博客
  • 博客访问: 49012
  • 博文数量: 5
  • 博客积分: 15
  • 博客等级: 民兵
  • 技术积分: 83
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-03 00:15
文章分类

全部博文(5)

文章存档

2014年(5)

我的朋友

分类: LINUX

2014-07-07 22:02:23

最近一直在研究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内核的修改代码。
阅读(5010) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

zhunxun2016-11-10 14:58:04

请问您这个想法实现了吗??