我正在 x86 主机上使用 QEMU2.6.0 以访客身份启动 x86 debian 系统。主机是一台 8 核、2 插槽机器,使用 RHEL7 启动并启用了 KVM。来宾上正在模拟 2 个 PCI 设备。 -我需要验证这些PCI设备的并发操作。 PCI 设备 A 的设计方式是,访问特定的 BAR 偏移量 X 会在该设备中引发 sleep() 固定持续时间。在此睡眠期间,测试应用程序尝试访问 PCI 设备 B 的 BAR 并向其中写入数据。
- 为两个 PCI 设备创建内存区域时,全局锁定会被清除。
- 为启动的进程设置任务关联性,以启动尝试访问 PCI A 和 B 的 BAR 的测试应用程序。
- 当使用 -smp 4 选项启动 QEMU 时,会创建 4 个 vcpu。通过设置任务关联性,我强制调度程序将两个设备的访问操作安排为单独的 vcpu。
- 在这种情况下,即使 PCI 设备 A 在 vcpu0 上进入休眠状态,PCI 设备 B BAR 访问也应该安排在使用taskset 选择的另一个 vcpu 编号上。
- 这种行为没有被观察到。当设备 A 进入睡眠状态时,设备 B 上的 R/W 操作将停止,并且仅当设备 A 退出睡眠状态时才恢复。
任何人都可以分享您对为什么会观察到这种行为的看法吗?
我目前对调试这个问题一无所知,需要一个关于我应该如何开始调试这个问题的指针。
问候 LT