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 ...
随机推荐
- 20155334 实验四:Android程序设计
20155334实验四:Android程序设计 实验内容 基于Android Studio开发简单的Android应用并部署测试; 了解Android组件.布局管理器的使用: 掌握Android中事件 ...
- 20145226夏艺华 《Java程序设计》第7&8周学习总结、实验一
[实验一]http://www.cnblogs.com/bestixyh/p/6358734.html [第7周]http://www.cnblogs.com/bestixyh/p/6380475.h ...
- 修改cmd为utf-8编码:
1.组合键WIN+R键,组合键后就会弹出窗口,然后输入CMD,回车: 2.要修改成UTF8编码,输入命令CHCP 65001(设置为65001): 3.鼠标放在命令窗口的标题部分右键,在弹出的右键菜单 ...
- 【转载】CPU阿甘
原文:CPU阿甘 前言 上帝为你关闭了一扇门,就一定会为你打开一扇窗这句话来形容我最合适不过了.我是CPU, 他们都叫我阿甘, 因为我和<阿甘正传>里的阿甘一样, 有点傻里傻气的.上帝 ...
- 用 GSL 求解超定方程组及矩阵的奇异值分解(SVD)
用 GSL 求解超定方程组及矩阵的奇异值分解(SVD) 最近在学习高动态图像(HDR)合成的算法,其中需要求解一个超定方程组,因此花了点时间研究了一下如何用 GSL 来解决这个问题. GSL 里是有最 ...
- KVM虚拟机无法启动
一.启动虚拟机报错: [root@KVM ~]# virsh start node-mssql-test01 error: Failed to start domain node-mssql-test ...
- 运行ntpdate报错:Temporary failure in name resolution
一.问题报错: 忽然发现某台机器时间慢了些几分钟,之前没有搭建ntpd服务,目前都是使用的ntpdate加定时任务进行时间同步.直接执行ntpdate报错如下: # ntpdate cn.pool.n ...
- itchat个人练习 语音与文本图灵测试例程
背景介绍 itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单. 使用不到三十行的代码,你就可以完成一个能够处理所有信息的微信机器人. 官方文档参考https://itchat ...
- java计算工龄
计算工龄原则:若是2000-10-12作为开始工作时间,则到下一年的2001-10-13算为一年.有个bug,不满一年的工龄是错误的. import java.util.Date;import jav ...
- 【转】lvs、nginx、haproxy转发模式优缺点总结
原文地址: https://yq.aliyun.com/ziliao/78374 一.LVS转发模式 LVS是章文嵩博士写的一个工作于四层的高可能性软件.不像后两者支持七层转发,不过也正因为其简单,所 ...