在虚拟化系统中,I/O外设只有一套,需要被多个guest VMs共享。VMM/hypervisor提供了两种机制来实现对I/O设备的访问,一种是透传(passthrough),一种是模拟(emulation)。

Device Passthrough

所谓passthrough,就是指guest VM可以透过VMM,直接访问I/O硬件,这样guest VM的I/O操作路径几乎和无虚拟化环境下的I/O路径相同,性能自然是非常高的。

在虚拟化环境下,guest VM使用的物理地址是GPA(参考这篇文章),如果直接用guest OS中的驱动程序去操作I/O设备的话(这里的I/O限定于和内存统一编址的MMIO),那么设备使用的地址也是GPA。这倒不难办,使用CPU的EPT/NPT MMU查询对应guest VM的nPT页表,进行一下GPA->HPA的转换就可以了。

可是别忘了,有一些I/O设备是具备DMA(Direct Memory Access)功能的。由于DMA是直接在设备和物理内存之间传输数据,必须使用实际的物理地址(也就是HPA),但DMA本身是为了减轻CPU的处理负担而存在的,其传输过程并不经过CPU。对于一个支持DMA传输的设备,当它拿着GPA去发起DMA操作时,由于没有真实的物理内存地址,传输势必会失败。

那如何实现对进行DMA传输的设备的GPA->HPA转换呢?再来一个类似于EPT/NPT的MMU?没错,这种专门转换I/O地址的MMU在x86的阵营里就是IOMMU

然而,不和AMD使用相同的名字是Intel一贯的路数,所以Intel通常更愿意把这种硬件辅助的I/O虚拟化技术叫做VT-d(Virtualization Technology for Direct I/O)。作为后起之秀的ARM自然也不甘示弱,推出了对应的SMMU(System MMU)。

IOMMU查找的页表通常是专门的I/O page tables。既然都是进行GPA->HPA的转换,为什么不和EPT/NPT MMU共享nPT页表呢?这个问题将在接下来的文章中给出解答。为了加速查找过程,IOMMU中也有类似于EPT/NPT TLB的IOTLB硬件单元。

以Intel的VT-d为例,它规定了一个domain对应一个IO页表。在具体的实现中,通常是一个guest VM作为一个domain,因此分配给同一个guest VM的设备将共享同一个IO页表。

学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂
更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,久学习,或点击这里加qun免费
领取,关注我持续更新哦! !

这里为了支持device passthrough模式下的DMA传输,IOMMU进行的是GPA->HPA的转换。既然EPT/NPT MMU都可以同时支持GVA->GPA和GPA->HPA的转换,那IOMMU是否也可以呢?这个问题也将留在后续的文章中讨论。

Device passthrough机制要求VMM为guest VM分配好设备,并提供隔离。假设系统中现在有三个guest VMs,编号分别是0, 1, 2,如果VM 0分配到了网卡A,就要阻止VM 1和VM 2对网卡A的访问。

可以采用的方法是在拥有设备的guest VM加载驱动程序前,先给要分配出去的设备加载一个伪驱动作为占位符,由于没有真正的驱动程序,这个设备对于其他的guest VM来说就相当于是“隐藏”了。

这同时也暴露了使用device passthrough存在的一个问题,就是同一个I/O设备通常无法在不同的guest VM之间实现共享和动态迁移(比如PCI设备的热插拔)。下文将介绍的device emulation机制将可以解决设备共享和迁移的问题。

参考:

https://kernelgo.org/dma-remapp

原文链接:虚拟化技术 - I/O虚拟化 [一] - 知乎

虚拟化技术 - I/O虚拟化 [一]相关推荐

  1. Docker容器与虚拟化技术——部署KVM虚拟化平台

    部署KVM虚拟化平台 一.搭建KVM虚拟化平台 1.前置知识点 (1)什么是虚拟化         把硬件资源从物理方式转变为逻辑方式,打破原有物理结构,使用户可以灵活管理这些资源,并且允许1台物理机 ...

  2. Docker与LXC、虚拟化技术的区别——虚拟化技术本质上是在模拟硬件,Docker底层是LXC,本质都是cgroups是在直接操作硬件...

    先说和虚拟化技术的区别: 难道虚拟技术就做不到吗? 不不不,虚拟技术也可以做到,但是会有一定程度的性能损失,灵活度也会下降.容器技术不是模仿硬件层次,而是 在Linux内核里使用cgroup和name ...

  3. 锐捷服务器虚拟化技术_交换机虚拟化技术.ppt

    交换机虚拟化技术 ※注意:交换机首次配置的方法 --必须通过Console口配置路由器的步骤: ①将控制线连接路由器的Console口与PC机串口: ②打开Windows附件下的"超级终端& ...

  4. g40-45支持虚拟化技术_CPU支持虚拟化,虚拟化有什么用怎么开启

    展开全部 虚拟化技术最大的实用性e69da5e6ba903231313335323631343130323136353331333366303135就是系统里装虚拟机. 比如现在已经是Win7或更高系 ...

  5. 虚拟化技术发展与虚拟化体系结构

    1.虚拟化技术发展历程 1. 虚拟化技术诞生 虚拟化技术萌芽于上世纪 50 年代末,1959 年 6 月,牛津大学的计算机教授,克里斯·托弗(Christopher Strachey)在国际信息处理大 ...

  6. 服务器虚拟化技术实现,服务器虚拟化关键技术及其系统实现

    <服务器虚拟化关键技术及其系统实现>由会员分享,可在线阅读,更多相关<服务器虚拟化关键技术及其系统实现(9页珍藏版)>请在人人文库网上搜索. 1.服务器虚拟化关键技术及其系统实 ...

  7. 服务器虚拟化技术简介,服务器虚拟化技术简介

    服务器虚拟化的方式 服务器虚拟化的有多种划分方式,可以根据虚拟化架构划分为裸金属/寄居,根据虚拟化层次硬件辅助虚拟化/软件辅助虚拟化,根据虚拟化平台划分为全虚拟化/半虚拟化. 裸金属/寄居 未虚拟化 ...

  8. 云计算虚拟化技术与开发-------虚拟化技术应用第二章内容(CPU虚拟机X86要解决的问题、VT-x、VMX、vCPU、EPT、VT-d)

    目录 第二章:虚拟化实现技术架构 CPU虚拟机要解决的问题(x86处理器结构漏洞)及软硬件解决方案 intel VT-x的技术特点,VMX(非根操作)的操作模式及操作流程 vCPU的组成和基本操作 内 ...

  9. 服务器cpu虚拟化vt,聚焦五大虚拟化技术:CPU虚拟化居首

    近期焦点: 虚拟化,曾经是一个技术人员最不喜欢的词,因为对于一个搞工程科学的人来说,实在.量化.数据逻辑才是工作进行的根本. 但是现在,最前沿的IT技术工程师们狂热的爱上了这个词,因为它代表着一系列先 ...

最新文章

  1. 一文简述FFmpeg
  2. Jest DoneCallback 数据类型的理解
  3. 抖音上非常火的旋转图快速部署
  4. 鸿蒙思维和小央美,中心路汝南路站附近艺术培训
  5. php一定要用phpstudy,用phpstudy有什么好处
  6. arduino esp8266_Arduino-httpupdate-OTA-esp8266升级探险记
  7. Rust: Path等
  8. 网站转换APP源代码/WebAPP源代码/网站生成APP源代码/Flutter项目/带控制端
  9. 简单 申请 msn.com邮箱 @
  10. 第七章——ICell的常用属性与方法
  11. c语言 tc 编译,用Win-TC编译与用TC2.0编译的差异
  12. 王之泰201771010131《面向对象程序设计(java)》第一周学习总结
  13. python抓取京东商品评价总数_python爬虫抓取和分析京东商城评价
  14. JavaScript实现淘宝商品展示(鼠标放在小图片上,上面会出现相应的大图片)
  15. 详解量子计算:相位反冲与相位反转
  16. 蚂蚁特工吱指南|用来吃的AR游戏机,奥利奥终于对自己下手了
  17. Python3快速入门教程-zyiz.net
  18. 基于Sentence-Bert的检索式问答系统
  19. IDL学习:语法基础-运算
  20. 大数据技术原理与应用(三)

热门文章

  1. MySQL Error Query database. Causejava.sql.SQLException: Incorrect key file for table ‘/tmp/#sql_181c
  2. 小米面试总结(附答案)
  3. 模仿网易云盾滑动验证码生成--抠图,大图部分背景透明
  4. 蓝牙Mesh基础 (1)蓝牙Mesh简介
  5. PPT文档如何插入爱心
  6. 利用Python解决生物问题-获取反向互补序列
  7. 常见c语言语法错误,C语言常犯错误(二)——语法错误
  8. Chem. Eur. J.|针对细胞内靶点的环肽药物:肽药物发展的下一个前沿
  9. 常见函数的级数展开及推导
  10. MyBatis的基础使用