以下是一些细节。
当进程调用ibv_post_send()
时,在HCA的PCI接口上会发生什么? WQE是否封装在PCIe门铃内并通过Programmed IO写入?或者WQE是否由HCA单独读取?
当流程调用ibv_poll_cq()
时会发生什么? HCA如何将CQE推送到系统内存?或者,如果基于拉动,CPU如何检测HCA中的新CQE?
答案 0 :(得分:4)
WQE是否封装在PCIe门铃内并通过Programmed IO写入? 或者WQE是否由HCA单独读取?
也可以。 通常的方法是写WQE并敲响门铃,在这种情况下,HCA将通过DMA获取WQE。 不太常见的方式是所谓的“蓝色火焰” - PCIe BAR的一部分用于WQE,WQE以写入门铃的方式写入HCA。
HCA如何将CQE推送到系统内存?
HCA使用DMA将CQE写入系统内存。
您的应用程序有两种方式来了解新的完成:基于轮询或基于事件。
ibv_poll_cq()
用于基于投票的方法。