IOMMU 可以理解为针对 I/O 空间的 MMU,支持设备通过 DMA 直接访问这些 I/O 空间。如图 IOMMU 位于主内存和设备之间,为每个设备创建一片虚拟 I/O 空间,并将虚拟 I/O 地址自动映射到物理地址。故而,当驱动配置设备的 DMA(比如网卡)时,下发的配置是虚拟地址,当设备尝试访问这些虚拟地址时,会经过 IOMMU 重映射...
virtio-rpmb:防篡改和防重放存储设备 virtio-iommu:既可以作为物理 IOMMU 的代理,也可以充当虚拟 IOMMU virtio-snd:支持输入和输出 PCM 流的声卡 virtio-mem:在guest物理地址空间中提供一个内存区域;对实现内存热插拔很有用 virtio-i2c:一个虚拟 I2C 适配器 virtio-scmi:实现 Arm 系统控制和管理接口,可用于传感器...
它通过硬件的辅助可以让虚拟机直接访问物理设备,而不需要通过 VMM 或被 VMM 所截获。 由于多个虚拟机直接访问物理设备,会涉及到内存的访问,而内存又是共享的,那怎么来隔离各个虚拟机对内存的访问呢,这里就要用到一门技术——IOMMU,简单说,IOMMU 就是用来隔离虚拟机对内存资源访问的。 I/O 直通技术需要硬件支持才...
在这种背景下,VFIO 这项技术被提出并在 2012 年合入 Linux 内核主线。VFIO 全称是 Virtual Function I/O,它实际是一个用户态设备驱动框架,相较于更早的 uio 这个用户态设备驱动框架,VFIO 能够有效利用硬件 IOMMU 机制进行安全隔离,从而能够广泛地应用在云计算这类有多租户需求的场景中。 如上图所示,通过 VFIO,...
对于一个真实的硬件设备,需要一个硬件级别的地址转换,通常是IOMMU descriptor area 它实际上是一个环形的buffer,又可以被称为descriptor ring,是第一个需要理解的ring。它包括一个数组,数组中每一项的元素包括指向guest buffer的地址和长度。另外每一个desc还包含一些其他信息。例如这个desc指向的不是真实的buffer而是一...
:透传(pass-through)、DMA映射(VFIO、PCI、IOMMU)、virtio-balloon、异步DMA映射、预处理》...中心在弹性裸金属和硬件网络卸载方面的经验和思考目录一、概述 二、弹性裸金属 三、OVS全卸载方案 四、QoS硬件卸载的实践结语推荐阅读一、概述 弹性裸金属,是由自研的磐石服务器和 ...
The IOMMU specification within VirtIO allows for the device to manage DMA from one or more end points and can act as a proxy for physical IOMMUs managing devices assigned to the guest. VirtIO-IOMMU can deal with managing both emulated and para-virtualized devices. ...
内存硬件虚拟化的EPT技术可以解决第一个问题。而VT-d技术则用来解决第二个问题。VT-d技术主要是引入地址重映射(IOMMU+IOTLB),负责提供重映射和设备直接分配。从设备端的DMA访问,都会进入地址重映射进行地址转换,使得设备可以访问到对应客户机特定的内存区域。
然后vfio收到进程给的地址信息,把进程虚拟地址转换成物理地址给IOMMU。IOMMU在外设给进程虚拟地址搬运数据时把地址转换成这个物理地址。qemu相比ovs-dpdk多了一道手续,guest driver给硬件配置的地址是自己的物理地址,qemu和vfio得把guest的物理地址转换成host的物理地址。
并且把datapath offload到了硬件,控制面没有offload继续由qemu模拟,硬件设备虚拟出来的vdpa未必实现了virtio标准要求的pcie功能,显然用vfio不行,没有vfio就不能利用vfio控制iommu的代码,vdpa需要自己开发,内核中没有upstream,控制面利用vhost协议,vhost再调用vhost-vdpa,vhost-vdpa调用硬件厂商提供的接口把控制信息下放到...