virtio是啥子
这个山头今天好像要攻占下来了
guest os中的一些特权操作会被hypervhisor给接收,这里一个很重要的认识是:hypervisor是os的os,既然要访问资源,那么就需要经过整机资源的管理者vmm决定,以前操作系统是整机资源的管理者,现在是hypervisior了!这是理解整个虚拟化的核心;
好了,我们现在试着理解下virtio虚拟化做了一些神马事情,之前一直没搞明白,是因为以前不知道所谓的virtio的驱动前端和后端到底发生在哪里。是每个驱动都要具备吗?想想不对,这样的话,写驱动就太麻烦了,还要考虑到虚拟化的前后端;如果是访问本地磁盘设备,那么是作用在block层吗?好像也不是很对,hypervisor是接收到一些指令的,但是block层就是个软件,不会有什么特殊的指令在呀,分析到这里,再加上网上的一些资料,我们基本清楚了:问题是发生在驱动真正出发了读外设的指令时!该类指令对于cpu来说都是一些特权指令,因为设备是一种资源不是谁都能随便访问的,所以,这个时候虚机的执行就停止了,一般外设的指令都是有具体的设备号的page地址,然后这些数据都被hypervisor给拿出来了,传递给注册的qume进程,那磁盘读写操作为例,这个时候如果是读磁盘,那么qemu会从宿主机中将数据读上来,然后将数据拷贝到共享内存页,然后通知kvm可以反回了,在这里涉及到多处内存拷贝,数据流是设备上的数据,经过宿主机文件系统--》共享内存页--》guest文件系统
这是传统的纯软件化的方案,那么virtio解决了神马事情呢?老方案有太多的拷贝了,新的方案中,guest文件系统,只需要把相应的文件的page放到virtio设备中,然后同样去通知qemu,这个时候qemu只要去通知驱动的后端去处理virtio 队列中的io事件就可以了,所以减少了很多的内存拷贝,这样一来,就节省了时间了;
【所以说,这种虚拟化到底发生在哪里?其实,都是我们软件出身的人认知以外的事情了,是发生在驱动层!发生在驱动层!发生在整个数据链路的最后一层:比驱动还下面呢】所以我们平常说的block层stap仍然有效,我们用的tcpdump仍然有效!
virtio貌似已经有着接近宿主机的IO性能了,这里相当于在驱动层又做了一层缓存,和block层的缓存、驱动的缓存,本质上并没有多大的差异;
virtio是啥子的更多相关文章
- kvm上的Linux虚拟机使用virtio磁盘
kvm上的Linux虚拟机使用virtio磁盘 系统:centos6.6 64位 网上的文章比较少,怎麽将Linux虚拟机的磁盘改为使用virtio磁盘 因为centos6或以上系统已经包含了vir ...
- virtio 半虚拟化驱动
半虚拟化驱动 5.1.1 virtio概述 KVM是必须使用硬件虚拟化辅助技术(如Intel VT-x.AMD-V)的hypervisor,在CPU运行效率方面有硬件支持,其效率是比较高的:在有Int ...
- [Virtualization][qemu][kvm][virtio] 使用 QEMU/KVM 模拟网卡多队列
序: 做DPDK例子的时候,发现一些例子需要多队列,而我当前所使用的虚拟机并不是多队列的.关于我当前虚拟机的状态,可以见前文. 所以,我的需求就是,让虚拟机里的网卡,有多队列! 参考: http:// ...
- 烂泥:KVM安装Windows Server 2008 R2使用virtio硬盘
本文首发于烂泥行天下. 在上一篇文章中,我们介绍了使用IDE硬盘来安装Windows Server 2008 R2,这篇文章我们来介绍使用virtio硬盘来安装Windows Server 2008 ...
- [qemu] 在前端驱动使用virtio的情况下,如何让后端使用vhost-user [未解决]
首先,如果你更关心原理和知识,请读读这个 http://chuansong.me/n/2186528 (值得细细的逐字读). 在<<深入浅出dpdk>>中提到,vhost-us ...
- Virtio:针对 Linux 的 I/O 虚拟化框架
Virtio:针对 Linux 的 I/O 虚拟化框架 --http://www.ibm.com/developerworks/cn/linux/l-virtio/#ibm-pcon 使用 KVM 和 ...
- KVM: 安装Windows virtio半虚拟化驱动
Install KVM Windows virtio para-virtualized dirver If you can't read Chinese, there's an English ver ...
- Guest与virtio netdev交互模式
Qemu为virtio设备分配了专门的pci设备ID,device IDs (vendor ID 0x1AF4) from 0x1000 through 0x10FF,而pci子系统中的厂商ID和设备 ...
- KVM下windows虚拟机使用virtio驱动
KVM下windows虚拟机默认disk使用的是Qemu IDE硬盘,网卡默认是rtl8139网卡.为了使kvm主机在相同的配置下,有更好的效率,可以将网卡和磁盘替换成virtio的驱动. windo ...
随机推荐
- 【 C 】字符串常量
当一个字符串常量出现在表达式中时,它的值是个指针常量.编译器把这些指定字符的一份拷贝存储在内存的某个位置,并存储一个指向第一个字符的指针.但是,当数组名用于表达式中时,它们的值也是个指针常量.我们可以 ...
- 20155202张旭 2016-2017-2 《Java程序设计》第2周学习总结
20155202张旭 2016-2017-2 <Java程序设计>第2周学习总结 教材学习内容总结 第一,二章知识小节: git log 命令来查看 :提交历史 查看当前所处位置: pwd ...
- 分块算法&BZOJ2002
题目传送门 第一次接触分块...... 分块查找是折半查找和顺序查找的一种改进方法,分块查找由于只要求索引表是有序的,对块内节点没有排序要求,因此特别适合于节点动态变化的情况. 分块修改理论复杂度为O ...
- 十、Django之Admin
一.Django Admin 管理工具 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中 ...
- nuget必备插件(待续)
DevLib.ExtensionMethods Extend Z.ExtensionMethods
- scrapy (一)
scrapy框架 scrapy 是一个爬虫框架,能够高效率,高层次的爬取页面的数据并进行处理. 在scrapy的英文文档中,有这样的一个流程图 scrapy 框架主要分为五大部分,spider, en ...
- php缩放处理png和jpg图片
本例子介绍使用php自带的GD库对png和jpg图片进行放大和缩小处理 <?php$target_width = 120; //目标图片宽度 $target_height = 150; //目标 ...
- PHP自定义生成二维码跳转地址
比较简单的一款PHP自定义生成二维码跳转地址,手机端微信扫码,自动跳转到定义好的链接.支持自定义生成二维码尺寸.间距等. 鼠标悬浮显示二维码弹出层,离开后消失.js实现,代码如下: $(fu ...
- MAC清理DS_Store和._文件
打开终端输入 find . -name .DS_Store -type f -delete ; find . -type d | xargs dot_clean
- Python常用模块之PIL
官方网址:http://www.pythonware.com/products/pil/index.htm Python Imaging Library (PIL) Python图像库(PIL)将图像 ...