Intel VT-d的全称是Intel Virtualization Technology for Direct I/O,它是Intel虚拟化技术的一部分,主要针对的是I/O子系统,它的实现主要是通过在硬件上引入重定向单元,该硬件重定向单元用于对I/O子系统的DMA操作和中断传递进行重定向,从而辅助VMM(Virtual Machine Monitor)实现I/O子系统的虚拟化。

一般情况下VMM支持I/O虚拟化可以通过以下四种方式实现:

  1. 纯软件模拟。即VMM的软件模拟一个现有的I/O设备,这种方式具有较好的兼容性,但是纯软件模拟在性能和功能上就表现得比较差了。
  2. 还是纯软件模拟,但是引入新的I/O操作接口,这些接口针对I/O虚拟化进行一定的优化,这样虽然能够解决一定的性能问题,但是兼容性问题又出现了,因为需要使用新的操作接口。
  3. 硬件分配,直接将I/O设备分配给某个VM(Virtual Machine),这样只有指定的VM能够使用该I/O设备,并且I/O设备的驱动位于VM中,并且VM能够直接对I/O设备进行操作,这样性能和兼容性都能达到最佳,但是一个I/O设备只能给一个VM使用。
  4. I/O设备分享,这是硬件分配方式的一种扩展,主要还是需要I/O设备本身需要支持一定的功能,如能够同时提供多个功能接口,比如PCIe设备的SR-IOV功能,即PCIe设备本身能够将一个物理PCIe设备,变成多个逻辑设备,这多个逻辑设备共享该PCIe设备上的物理资源,并且可以独立地分配给不同的VM。

以上I/O虚拟化的一个通用要求就是要求VMM能够将属于不同VM的I/O设备安全地隔离起来,即需要满足以下两方面的要求:

  1. 属于一个VM的vCPU无法访问到属于另外一个VM的I/O设备,这可以通过VMX(Virtual Machine Extension)中的EPT(Extended Page Table)功能来实现,即VMM可以通过软件配置,将虚拟机物理内存,即Guest Physcial Address映射到不同的主机内存区域,即Host Physical Address。
  2. 属于一个VM的I/O设备不能访问到属于其他VM的内存或者向属于其他VM的中断控制器发送中断。如果是纯软件模拟的方式,则VMM也可以通过纯软件的方式来控制I/O设备访问内存(如DMA)和发送中断的行为。但是如果采用硬件分配的方式,则就需要在硬件上对I/O设备访问内存和发送中断的行为进行拦截,然后重定向到指定的VM中,这就是VT-d派上用场的时候了。

VT-d是一个位于CPU、内存和I/O设备之间的硬件设备,通常位于PCI设备树的根部,或者类似的位于I/O子系统的根部,当VT-d重定向硬件设备启用的时候,它会拦截位于它下面的所有I/O设备产生的中断请求和通过DMA方式对虚拟机内存访问的请求,然后通过查找中断重定向表或者I/O页表的方式(类似分页机制)来重新定位中断转发的目标LAPIC或者是I/O设备访问的目标主机物理内存地址。如下图所示:

VMM软件负责I/O设备的分配,即将指定I/O设备和相应的VM对应起来,并且负责建立中断重定向关系表和I/O地址转换页表,并将这些转换关系的配置设置到VT-d硬件设备上,而I/O设备发起的中断请求或者DMA内存访问请求中带有相应设备的ID,这样VT-d硬件单元就可以通过硬件查找的方式将不同的I/O设备中断和内存访问请求重定向到相应的VM上,从而达到隔离不同VM的I/O设备的目的。

总的来说,VT-d的主要功能就是将I/O设备的DMA访问请求和中断请求重定向到VMM设定好的VM中。

欢迎关注同名微信公众号“河马虚拟化”第一时间获取最新文章。

Intel VT-d(1)- 简介相关推荐

  1. 开源项目-基于Intel VT技术的Linux内核调试器

    本开源项目将硬件虚拟化技术应用在内核调试器上,使内核调试器成为VMM,将操作系统置于虚拟机中运行,即操作系统成为GuestOS,以这样的一种形式进行调试,最主要的好处就是调试器对操作系统完全透明.如下 ...

  2. 自己动手利用KVM和Intel VT实现简单虚拟机

    自己动手利用KVM和IntelVT实现简单虚拟机 计划开发一套虚拟机最小系统.该原型系统会利用Linux原生提供的内核模块kvm.ko,使用该模块提供的API接口,自行开发一个用户态程序,实现一个最基 ...

  3. Intel VT学习笔记(九)—— EPT应用示例

    Intel VT学习笔记(九)-- EPT应用示例 内存保护 EPT violation 代码实现 参考资料 内存保护 描述:尝试使用EPT将一块特定的物理内存保护起来. 先来选择一块物理地址,那么这 ...

  4. Intel VT学习笔记(七)—— EPT物理地址转换

    Intel VT学习笔记(七)-- EPT物理地址转换 要点回顾 EPT 支持检测 9-9-9-9-12分页 实验:EPT物理地址转换 参考资料 要点回顾 在上一篇中,已经初步实现了最小VT框架,但实 ...

  5. Intel VT学习笔记(六)—— VM-Exit Handler

    Intel VT学习笔记(六)-- VM-Exit Handler Reutrn To DriverEntry VM-Exit Handler External interrupt I/O instr ...

  6. Intel VT学习笔记(五)—— 调试技巧

    Intel VT学习笔记(五)-- 调试技巧 要点回顾 INT 3失效 调试技巧 参考资料 要点回顾 在上一篇中,我们主要学习了如何填写Guest state fields的各项字段,以及如何对错误码 ...

  7. Intel VT学习笔记(四)—— VMCS(下)

    Intel VT学习笔记(四)-- VMCS(下) 要点回顾 VM-Exit Information Guest state fields 代码实现 参考资料 要点回顾 在上一篇中,我们了解了如何设置 ...

  8. Intel VT学习笔记(二)—— VMXEVMXON

    Intel VT学习笔记(二)-- VMXE&VMXON VT生命周期 VMXE VMXON 准备工作 VMXON region 代码实现 参考资料 VT生命周期 描述: 软件通过执行VMXO ...

  9. Intel VT学习笔记(三)—— VMCS(上)

    Intel VT学习笔记(三)-- VMCS(上) 要点回顾 VMCS 设置字段 错误排查 Fields Host-State Area VM-Control Fields 代码实现 参考资料 要点回 ...

  10. 逐渐成熟 Intel VT技术性能初探

    作者:IT168评测中心 Lucifer  2007-06-25    [IT168评测中心]当前非常热门的Virtualization虚拟化技术的出现和应用其实已经有数十年的历史了,在早期,这个技术 ...

最新文章

  1. socket 套接字的基本概念
  2. Christopher G. Atkeson 简介
  3. mysql 组合索引
  4. Android API中被忽略的几个函数接口
  5. Directx11教程39 纹理映射(9)
  6. Linux如何用link命令停网卡,如何使用 ethtool 命令管理以太网卡 | Linux 中国
  7. SVG 图标制作指南
  8. php 干扰曲线,曲线干扰控制
  9. js如何获取当天开始时间和结束时时间并传递(时间戳)给后端
  10. ASP.NET设置404错误页面
  11. php-fpm 启动失败,php-fpm自启动失败问题排查
  12. anaconda图形界面打开方式
  13. Shell Tools and Scripting
  14. 佟年计算机大赛,《亲爱的,热爱的》热播,吴白见到佟年第一眼,这眼神亮了!...
  15. React使用本地svg图片配置
  16. 红黑树详解及代码实现(C++)
  17. 数据库的隔离级别介绍
  18. 合作师专计算机培训,2016年西北师范大学校企合作计算机联合办学建设方案.pdf...
  19. 2023年深度学习服务器、GPU服务器配置推荐参考?(2)
  20. Say Hello 一下

热门文章

  1. 碱基数据处理中的算法研究
  2. 同心向前,Google Play 十周年啦!
  3. CentOS7 配置与管理DHCP服务器及DHCP中继代理 DHCP服务实训整合
  4. Linu系统——基础知识1
  5. 布局之space-evenly兼容性问题
  6. 常见Bugger篇章一
  7. 电子计算机管理人事资料的准则,{转帖}关于中国的一些人事制度,职称评定
  8. 解决:香橙派orangepi3lts网口用不了 网口灯不亮 没反应
  9. WIN10 EXCEL 快捷键
  10. eval函数介绍与用法