This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

【6670】关于descriptor资源分配的问题

在调试BCP和FFTC等硬核资源时,会有descriptor和free descriptor queue的相关配置

比如API:cppi_initDescriptor()就为全局fdq分配了若干个descriptors,

问题是该API中分配的descriptors数目是如何确定的

在硬核资源中,对应的有allocate_fdq和deallocate_fdq,但是这只是释放了fdq,并没有释放被使用的descriptor资源。

例如:

我在多次调用BCP资源时,上面的全局fdq分配了32个descriptors,

所以我在使用allocate_fdq时,只能为RX分配31个descriptor(其中还有一个descriptor资源被TX使用)

继续调用就出现资源不够,调用descriptor失败。

请问,如何适时释放出已经用过的descriptor,使其可以继续被循环使用

 

诚邀TI工程师解答,谢谢。

  • cppi_initDescriptor入参中有参数desc_num指定申请的个数。

    你可以为Tx及Rx分别申请free queue及descriptor,在使用的时候从TxFDQ中获取描述配置好后push到TxQ,同时配置后描述符放到RxFDQ中。在使用过程中,发送侧的描述符可以配置自动回收到TxFDQ,接收侧则由软件从RxQ中得到描述符重新配置后放回RxFDQ. 建议你仔细看看Navigator user guide关于数据收发流程。

  • 1.当Tx/RxFDQ中使用完毕后,这个free descriptor不是应该被自动回收吗?

    2.Rx和Tx分别申请了free queue和descriptor,现在我的free queue根据软件设置的回收机制可以重复使用,但是Tx和Rx申请的descriptor是用完一个就少一个,对于收发流程来说,descriptor应该是收发数据完毕就自动回收,可以供下次循环使用。

    不知道我的理解对不对。

  • 是否自动回收,取决于配置,对于Tx侧来说一般可以将TxFDQ配置为Tx returnQ,这样就可以自动回收,接收侧则不建议将RxFDQ直接配置为RxQ,需要手动回收。

    descriptor需要及时回收,才可以循环使用。

  • 谢谢 Andy 解答。

    问题有2,

    1. 在哪里可以将TxFDQ配置成Tx returnQ,以实现 descriptor 的自动回收

    2. 手动回收 descriptor 在 lld layer 如何实现

    Thx

  • 将Tx descriptor中的returnQ信息配置为TxFDQ即可,建议你可以稍微看看Navigator user guide中对描述符的说明。

    手动回收,原理很简单,就是从一个queue pop描述符,然后再将其push到另一个queue,即可,如果LLD中没有,可以调用QMSS提供的相关API实现。