PCIe P2P (peer-to-peer communication)是PCIe的一种特性,它使两个PCIe设备之间可以直接传输数据,而不需要使用主机RAM作为临时存储。如下图3的走向
比如EP1要发送和数据给EP2,操作流程如下:
1. 打开EP1的dma控制器;--client侧
2.src=EP1的内存地址,dst=EP2的BAR地址空间(provider),EP2的BAR地址一般会与自己的某段内存空间有一个映射关系,也就是将EP2的bar暴漏给了EP1去操作。
3.开启dma传输,将EP1的ddr数据搬运到EP2 bar空间
思考:
Why would you want peer to peer DMA?
没有CPU开销或同步的处理管道;
节省数据流行程
附:
Providers – Expose P2P resources to other drivers
◢ Clients – Make use of P2P resources via DMA
◢ Orchestrators – Enables data flow between clients and providers
◢ Memory is allocated on the client side
接口参考:
PCI Peer-to-Peer DMA Support — The Linux Kernel documentation