vfio
VFIO简介
Documentation/vfio.txt
还是不理解IOMMU、北桥、PCI的MMIO和ioremap
file:///C:/Users/shaohefe/Downloads/vt-directed-io-spec.pdf <Intel® Virtualization Technology for Directed I/O>
已经有清晰的认识了。
+-------------------------------------------+
| |
| VFIO Interface |
| |
+---------------------+---------------------+
| | |
| vfio_iommu | vfio_pci |
| | |
+---------------------+---------------------+
| | |
| iommu driver | pci_bus driver |
| | |
+---------------------+---------------------+
VFIO要依赖IOMMU,目前主要针对PCI设备(mdev也是VFIO框架)
主要提供DMA remmaping 和 Interrupt remmapping.
此外IOMMU还要进行设备的隔离,停供安全特性。IOMMU提供DMA隔离的最小硬件单元(group)
同一个group的device必须给一个VM(等同于一个Container )。
multi-function设备在物理硬件上就是互联的, 他们可以互相访问对方的数据,不能拆分,只能放在一个group中。
iommu driver提供不同厂家(intel、AMD和intel)硬件平台相关的实现
https://kernelgo.org/vfio-introduction.html
最底层的驱动是iommu driver和pci_bus driver.
1. IOMMU
iommu driver提供不同厂家(intel、AMD和intel)硬件平台相关的实现
2. PCI BUS
进行设备的注册和反注册等操作
中间层的驱动是iommu driver和pci_bus driver.
1. vfio_iommu
VFIO对iommu层的统一封装主要用来实现DMAP Remapping的功能,即管理IOMMU页表的能力
2. vfio_pci
进行PCI配置空间、Bar空间重和Interrupt Remapping的操作。
最顶层VFIO Interface 提供用户的统一操作接口。
VFIO的操作
https://www.jianshu.com/p/bfbb5095d8fd
这个步骤很详细,cloud-hypervisor的PCI管理,就是这个操作流程。
VFIO ——将 DMA 映射暴露给用户态 详细介绍了内存访问的流程
Linux iommu和vfio概念空间解构 介绍了ARM的SMMU
- VFIO设备支持多中断号注册。
- 设备的中断用户态通信机制基于eventfd/irqfd实现。用户通过/dev/vfio设备select/poll/epoll,从而实现中断从内核态到用户态的异步事件通知。
- 支持对物理设备进行逻辑抽象。
- 仅支持pci intx中断共享,其他类型中断不支持共享。
- VFIO仅支持特定IOMMU设备,如x86与PowerPC平台的PCI设备和ARM平台的platform设备。
-
- eventfd
- irqfd (KVM VHOST中irqfd的使用)
-
-
袋鼠轻量化中断处理与原理 主要是介绍中断的处理
[转]vfio概述(vfio/iommu/device passthrough) 最综合的总结。
中断重映射
其实主要是安全性。
名词解析:
RC:
在PCI Express(PCIe)系统中,根复合体(root complex)设备将处理器和内存子系统连接到由一个或多个交换设备组成的PCI Express交换结构。
类似PCI系统中的主机桥(Host Bridge),根复合体代表处理器生成事务请求,通过本地总线相互连接。根复合体功能可以以分立设备实现,也可以在处理器中集成。一个根复合体可能包含多个PCI Express端口,且可将多个交换设备连接到根复合体的端口或级联的端口。[2]