【发布时间】:2022-01-12 17:51:31
【问题描述】:
一些 PCIe 设备(例如 FPGA 卡)可以通过主机的 BAR 公开其物理内存的段,并且主机可以通过内存设备访问内存区域(在 Linux 上,我们可以将设备内存映射到虚拟内存)。我想如果设备本身也运行 Linux,它也可以通过 /dev/mem 映射机制访问这部分内存。
程序可以对(虚拟)内存做的一件事是原子操作,例如“__atomic_sub_fetch”,这在编写高性能代码时可能非常有用。
我的问题是,如果内存来自上面的 PCIe 共享内存(并映射到用户的虚拟内存空间)怎么办?原子操作还成立吗? 考虑到原子操作可能同时来自主机和设备的 CPU,我不知道 PCIe 是否可以保证原子性。如果是,它的性能与常规内存上的相同原子操作相比如何?
我在这里看到了相关问题,而不是直接回答。 PCI Express BAR memory mapping basic understanding
非常感谢!
【问题讨论】:
标签: c linux atomic shared-memory pci-e