现在,一些 PCIE 设备有一个 cpu,例如:DPU。
我想用qemu来模拟这个设备。
qemu可以支持这个需求吗?
QEMU 的仿真框架不支持具有完全可编程 CPU 的设备,这些 CPU 可以以与主系统仿真 CPU 相同的方式执行任意来宾提供的代码。 (主要障碍是系统中的所有 CPU 必须采用相同的架构,例如全部为 x86 或全部为 Arm。)
对于在其实现中具有 CPU 的设备,但该 CPU 通常运行固定固件,向来宾代码公开更有限的接口,QEMU 设备模型可以提供对该有限接口的直接模拟,这通常更无论如何,效率很高。
理论上,您可以编写一个设备,对板载 CPU 进行纯粹的解释模拟,使用定时器和下半部回调等 QEMU 设施来经常解释一小块指令。不过,我不知道有任何人编写过这样的设备。这将是相当大量的工作,而且最终的仿真速度也不会很快。
这可以通过提升两个 QEMU 实例(一个使用主机系统架构构建,另一个使用辅助架构构建)并通过某种接口连接它们来完成。
Xilinx 通过启动两个独立的 QEMU 进程并在它们之间进行一些进程间通信来完成此操作,Neuroblade 通过在 nios2 架构中将 QEMU 构建为共享库,然后从对主机架构进行建模的 QEMU 进程加载它来完成此操作(在在这种情况下,接口可以简单地通过直接函数调用来建模)。
相关:
对于商业用途,您还可以查看 Intel Simics 等工具,它能够模拟异构系统,包括具有自己的处理器的 PCIe 上的子系统。 使用系统中所有处理器的时间片执行。 其他可能有效的工具是 Synopsys Virtualizer,但我不清楚它们是否有一个可以工作的 PCIe 运动通用主机模型。