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

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. R语言学习笔记—组合数

    组合数:从m个不同元素中取出n(n≤m)个元素的所有组合的个数,叫做从m个不同元素中取出n个元素的组合数. 代码: str_comb <- function(vector){ n <- l ...

  2. 4.28-python学习笔记(转义符&input函数)

    参考书目:<Learn Python The Hard Way> ##练习10 print("i am 6'2\"tall.")#将双引号转义 print(' ...

  3. Asp.Net实现在线人数统计 (转)

    原文件:http://blog.csdn.net/wxd_860825/article/details/4589292 利用Application对象和Session对象可以统计当前在线用户数量. 注 ...

  4. 20145226夏艺华 EXP5 MSF基础应用

    实践目标 · 掌握metasploit的基本应用方式. · 具体需要完成 (1)ms08_067; (2)ms11_050: (3)Adobe (4)成功应用任何一个辅助模块. 报告 本次实验一共用到 ...

  5. 【转】 线段树完全版 ~by NotOnlySuccess

    载自:NotOnlySuccess的博客 [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还去pku打广告,但是现在我自己都不太好意思去看那篇文章 ...

  6. 一、初识 Django

    一.引子 Django最初设计用于具有快速开发需求的新闻类站点,目的是要实现简单快捷的网站开发! 从好的方面来看,Web 开发激动人心且富于创造性:从另一面来看,它却是份繁琐而令人生厌的工作.通过减少 ...

  7. 解决Sublime Text 3中文显示乱码(tab中文方块)问题

    博客分类:  Sublime   一.文本出现中文乱码问题 1.打开Sublime Text 3,按Ctrl+-打开控制行,复制粘贴以下python代码,然后回车运行. 2. 复制并粘贴如下代码: P ...

  8. spark读取外部配置文件的方法

    spark读取外部配置文件的方法 spark-submit  --files /tmp/fileName /tmp/test.jar 使用spark提交时使用--files参数,spark会将将本地的 ...

  9. 剑指 Offer——数字在排序数组中出现的次数

    1. 题目 2. 解答 时间复杂度为 \(O(n)\) 的算法,顺序遍历数组,当该数字第一次出现时开始记录次数. class Solution { public: int GetNumberOfK(v ...

  10. Python多重赋值

    可以将变量名视对象的一个链接 >>>foo1 = foo2 = 4.3 >>>foo1 is foo2 True >>>foo1 = 4.3 &g ...