内存钉扎、Dirty Logging 与迁移
1. Pinning
DMA mapping需把用户页长期钉住,防止 reclaim/migration后设备仍访问旧物理地址。Type1使用长期 pin语义并记录每个 DMA mapping的 pages。
2. Accounting
锁页受 RLIMIT_MEMLOCK、进程权限和 mm accounting约束。QEMU通常需足够 memlock限制;盲目 unlimited扩大资源耗尽风险。
3. 页生命周期
1 | map -> pin -> iommu_map |
必须先停止 DMA再 unmap,单纯关闭用户映射不停止硬件。
4. MM归属
本 Type1实现为每个 DMA mapping保存 group leader和 mm_struct引用,用于 locked-memory accounting,即使创建 mapping的 task退出也能完成记账和释放。Mdev外部 pinning路径还支持使 vaddr失效及重新设置;此文件没有注册通用 mmu_notifier。
5. Dirty tracking
迁移需知道 device DMA写过哪些 guest pages。本树通过:
- IOMMU dirty bitmap能力;
- device DMA logging feature;
-软件 bitmap/ranges;
组合提供 dirty报告,具体设备/backend不一定支持。
6. IOVA bitmap
iova_bitmap.c在 IOVA范围与用户 bitmap之间迭代和设置 bits,处理 page size、范围和用户复制。
7. Migration states
VFIO device migration feature表达 running、stop、stop-copy、resuming等状态及 data fd。合法转换由 driver实现,Core检查 feature格式。
8. Vendor migration
mlx5和 HiSilicon accelerator VFIO PCI driver实现设备特定 state save/restore和 dirty tracking,不表示通用 vfio-pci可迁移所有 PCI设备。
9. 风险
-设备内部状态不可完整保存;
-DMA未 quiesce;
-dirty bitmap漏记;
-目标硬件/firmware不兼容;
-migration data不可信;
-大规模 pin导致 host内存压力。
10. RK3588
本树未见适用于 RK3588集成设备的 mdev/migration parent driver。普通 platform VFIO不能自动提供 live migration。
正在加载留言…