本博文主要交流设计思路,在本博客已给出相关博文约140篇,希望对初学者有用。 注意这里只是抛砖引玉,切莫认为参考这就可以完成商用IP 设计。
应用程序的工作流程如图 1所示,大致分为 READ 包接收、SEND 包接收及WRITE 包接收三部分。其中 READ 包接收并不需要应用程序进行任何操作,无论是READ 包接收、回复还是数据搬运过程,均由网卡通过 DMA 操作完成。

图1 应用程序工作流程图
在接收到 FPGA 数据包后,应用程序进行数据包类型判断,针对 SEND 数据包和 WRITE 数据包将分别进入对应的处理流程。
当接收到 SEND 数据包后,将首先记录首包时间戳并启动定时器,为时 1s,并同时调用 ibv_poll_cq()函数轮询完成队列处理工作完成事务(Work Completion,WC),该函数将返回应用程序可处理的完成队列条目数量。根据该数量,对每一个 WC 进行状态判断并调用 ibv_post_recv()函数动态重投递接收 WR。至此一轮 SEND 包处理流程结束,如果定时器已经结束,则返回初始状态;如果定时器仍在运行,则返回调用ibv_poll_cq()函数继续处理完成时间.
B站已给出相关性能的视频,如想进一步了解,请搜索B站用户:专注与守望
https://www.bilibili.com/video/BV1mPV5eCE8z/?spm_id_from=333.337.search-card.all.click&vd_source=c355545d27a44fe96188b7caefeda6e7
|