VFIO 调试、性能、故障与安全加固
1. 基线
1 | lspci -nnk |
2. Group not viable
检查同组:
- multifunction siblings;
- upstream bridge;
-音频 function;
-原 host driver;
-driver_override;
-未绑定 device。
不要用 ACS override补丁假装硬件隔离,除非接受其安全风险。
3. MAP_DMA失败
常见:
- memlock不足;
- IOVA overlap;
- page alignment;
-超出 aperture;
-reserved region;
-pin user page失败;
-domain未 attach;
-权限 flags错误。
4. IOMMU fault
记录 requester、IOVA、direction和时间。对照 QEMU memory listener mappings和 guest DMA。Fault后设备可能持续发 DMA,先隔离/停止再调试。
5. Reset失败
表现:
-第二次启动 VM失败;
-guest driver timeout;
-MSI残留;
-BAR状态异常;
-host reboot才能恢复。
检查 FLR/PM/bus reset和同 bus影响。
6. 性能
影响因素:
- IOMMU page size;
- IOTLB miss;
- vCPU/IRQ affinity;
- hugepages;
- eventfd/irq bypass;
- NUMA;
- DMA map批量;
-dirty logging;
-host power management。
RK3588通常 UMA,但 CPU cluster和 IRQ affinity仍影响延迟。
7. 安全加固
-关闭 no-IOMMU;
-最小 /dev/vfio/N ACL;
-仅绑定必要设备;
-模块签名;
-限制 memlock;
-禁用无用 vendor/mdev driver;
-QEMU sandbox/SELinux;
-验证 firmware和 option ROM;
-监控 IOMMU fault;
-定期测试 reset和 teardown。
8. Debug开关
可使用 dynamic debug:
1 | echo 'file drivers/vfio/* +p' > /sys/kernel/debug/dynamic_debug/control |
通配支持依 shell和 dynamic debug parser;也可逐文件开启。生产环境避免长期高日志。
9. 威胁模型
IOMMU主要限制 DMA,不会自动防止:
-设备 firmware漏洞;
-PCIe peer-to-peer;
-共享 reset/sideband;
-CPU MMIO误用;
-中断 DoS;
-host VFIO/kernel漏洞;
-恶意 migration stream。
设备直通扩大攻击面,应只给可信 VM/进程。
正在加载留言…