这个山头今天好像要攻占下来了

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是啥子的更多相关文章

  1. kvm上的Linux虚拟机使用virtio磁盘

    kvm上的Linux虚拟机使用virtio磁盘 系统:centos6.6  64位 网上的文章比较少,怎麽将Linux虚拟机的磁盘改为使用virtio磁盘 因为centos6或以上系统已经包含了vir ...

  2. virtio 半虚拟化驱动

    半虚拟化驱动 5.1.1 virtio概述 KVM是必须使用硬件虚拟化辅助技术(如Intel VT-x.AMD-V)的hypervisor,在CPU运行效率方面有硬件支持,其效率是比较高的:在有Int ...

  3. [Virtualization][qemu][kvm][virtio] 使用 QEMU/KVM 模拟网卡多队列

    序: 做DPDK例子的时候,发现一些例子需要多队列,而我当前所使用的虚拟机并不是多队列的.关于我当前虚拟机的状态,可以见前文. 所以,我的需求就是,让虚拟机里的网卡,有多队列! 参考: http:// ...

  4. 烂泥:KVM安装Windows Server 2008 R2使用virtio硬盘

    本文首发于烂泥行天下. 在上一篇文章中,我们介绍了使用IDE硬盘来安装Windows Server 2008 R2,这篇文章我们来介绍使用virtio硬盘来安装Windows Server 2008 ...

  5. [qemu] 在前端驱动使用virtio的情况下,如何让后端使用vhost-user [未解决]

    首先,如果你更关心原理和知识,请读读这个 http://chuansong.me/n/2186528 (值得细细的逐字读). 在<<深入浅出dpdk>>中提到,vhost-us ...

  6. Virtio:针对 Linux 的 I/O 虚拟化框架

    Virtio:针对 Linux 的 I/O 虚拟化框架 --http://www.ibm.com/developerworks/cn/linux/l-virtio/#ibm-pcon 使用 KVM 和 ...

  7. KVM: 安装Windows virtio半虚拟化驱动

    Install KVM Windows virtio para-virtualized dirver If you can't read Chinese, there's an English ver ...

  8. Guest与virtio netdev交互模式

    Qemu为virtio设备分配了专门的pci设备ID,device IDs (vendor ID 0x1AF4) from 0x1000 through 0x10FF,而pci子系统中的厂商ID和设备 ...

  9. KVM下windows虚拟机使用virtio驱动

    KVM下windows虚拟机默认disk使用的是Qemu IDE硬盘,网卡默认是rtl8139网卡.为了使kvm主机在相同的配置下,有更好的效率,可以将网卡和磁盘替换成virtio的驱动. windo ...

随机推荐

  1. SQLSERVER字符串处理函数

    sqlserver提供了一系列字符串处理函数:substring.left.right.len.charindex.patindex.replace.replicate.stuff.upper.low ...

  2. Java程序设计 第16周 课堂实践 —— 数据库3

    Java程序设计 第16周 课堂实践 -- 数据库3 课堂实践任务3 查询world数据库,获得New Jessey州所有城市的总人口数. 代码分析 实现查询数据库需要我们修改MessageDAO.j ...

  3. 第六周课上测试-3-ch02补充作业

    实验要求: 编写一个程序 "week0603学号.c",运行下面代码: short int v = -学号后四位 unsigned short uv = (unsigned sho ...

  4. 20155325 2016-2017-2 《Java程序设计》第十周学习总结

    教材学习内容总结 Java视频笔记 强制转换 运算符 获取特定位数的值 循环 switch(不能判断布尔型) int x = 3, y = 3, z = 3; int n = 0; switch (x ...

  5. 20155327 2016-2017-2《Java程序设计》课程总结

    20155327 2016-2017-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1:http://www.cnblogs.com/l97----/p/6160983.htm ...

  6. 微信小程序点击按钮,修改状态

    WXML中: <view wx:if="{{orderstate}} = '待送检' " data-no="{{orderstate}}" bindtap ...

  7. JDK核心源码

    一.核心包有哪些? Jdk的包中,除开了lang包下面的类,用得最多的应该要属于util包下面的类了, 本篇文章主要针对Jdk的util包下面的类(util目录下面的类,暂时不包括util 包下面的子 ...

  8. cogs62 [HNOI2004] 宠物收养所

    cogs62 [HNOI2004] 宠物收养所 啦啦啦啦 不维护区间的平衡树题都是树状数组+二分练手题! 不会的参考我的普通平衡树的多种神奇解法之BIT+二分答案 // It is made by X ...

  9. 身份证扫描识别/身份证OCR识别的正确姿势,你get到了吗?

    自从国家规定电信实名制之后,实名制已经推广到各个领域:办理通信业务需要实名制.银行开户需要实名制.移动支付需要实名制,就连注册个自媒体账户都需要实名制. 而实名制的背后,就是身份证信息的采集和录入验证 ...

  10. docker部署war包到阿里云

    最近买了个阿里云服务器,配置1核2g内存,学习够了.记录下过程. 1,服务器相关,请看下图,云服务器主要配置是安全组和密钥,前者是开放端口,后者可以用于远程连接(比如我windows系统通过putty ...