通用平台的拓扑
VMM - qemu
guest software - 虚拟机里运行的软件(guest os + app)
Emulation - 纯粹软件模拟, 比如e1000模拟的网卡
New Software Interfaces - 比如 SRIOV
Assignment - 直接物理IO 设备分给VM
I/O Device Sharing - IO设备共享,SRIOV/SIOV
IO虚拟化的要求,隔离和限制资源访问
I/O device assignment -
DMA remapping - DMA地址转换
Interrupt remapping: - 隔离并路由正确的中断到|VM
Interrupt posting - 直接投递中断
Reliability - 记录和报告 DMA/中断的错误
DMA-remapping 硬件截获系统内存访问,利用页表,决定访问是不是不允许,以及访问的实际位置。
常用的分页结构可以缓存在硬件中。 DMA重新映射可以为每个设备独立配置,也可以跨多个设备共同配置。
操作系统保护:操作系统可以定义一个包含其关键代码和数据结构的domain,并限制系统中所有I / O设备对该domain的访问。 这允许操作系统通过设备驱动程序对设备进行不正确的编程来限制其数据和代码的错误或意外损坏,从而提高了操作系统的健壮性和可靠性。
功能支持:操作系统可以使用domain来更好地管理从旧版设备到高内存的DMA(例如,访问4GB以上内存的32位PCI设备)。 这是通过对I / O页表进行编程以将DMA从这些设备重新映射到高内存来实现的。 没有这样的支持,软件就必须通过OS的“反弹缓冲区(bounce buffers)”来复制数据。
DMA隔离:OS可以通过创建多个domain并将一个或多个I / O设备分配给每个域来管理I / O。每个设备驱动程序都会在操作系统中显式注册其I / O缓冲区,然后操作系统会使用硬件实施DMA域保护,从而将这些I / O缓冲区分配给特定的domain。请参见图2-2。
共享虚拟内存:对于支持适当PCI Express1功能(PCI Express *基本规范中的进程地址空间ID - PASID功能)的设备,操作系统可以使用DMA重映射硬件??功能与I / O设备共享应用程序进程的虚拟地址空间。共享的虚拟内存以及对I / O页面故障的支持,使应用程序可以将任意数据结构自由地传递到图形处理器或加速器等设备,而无需进行数据固定和编组的开销。
图2-2
DMA重新映射的硬件支持可实现设备直接分配,而无需或者最小VMM接入(配置空间和中断管理), VMM不需要感知设备的特殊知识。
IO设备分配,可以IO共享。一个IO分区的设备,可以给其他分区提供分享。
VMM可以将重新映射的硬件虚拟化给guest。
VMM可以拦截来宾对虚拟重映射硬件??寄存器的访问,并管理guest的重映射结构的影子拷贝。来宾更新I / O页表时,来宾软件执行适当的虚拟无效操作。虚拟无效请求可以被VMM拦截,以更新相应的影子页表并执行重新映射硬件操作。
由于故障DMA事务的不可重启性(与CPU内存管理虚拟化不同),VMM无法对其影子重映射结构执行延迟更新。
为了使影子结构与来宾结构保持一致,VMM可能会以急切的预取行为(包括缓存不存在的条目)暴露虚拟重映射硬件??,或使用处理器内存管理机制对guest重映射结构进行写保护。
在支持两级地址转换(将虚拟地址重新映射到guest物理地址的第一级转换,以及将guest物理地址重新映射到host物理地址的第二级转换)的硬件实现上,VMM可以通过配置硬件以执行第一级和第二级的嵌套地址转换,而不需要影子页表来虚拟化guest操作系统对第一级转换。
原文:https://www.cnblogs.com/shaohef/p/13111478.html