TI中文支持网
TI专业的中文技术问题搜集分享网站

queue和descriptor的一点问题

您好!

     目前遇到这样一个疑惑:

1)假设我把两个queue对应到一个Tx channel上,优先级一样;

2)使用的又是host模式的descriptors。这样我的我把数据分成了4段,分别对应1个SOP描述符,两个MOP描述符,和一个EOP描述符,我分别叫他们1 2 3 4 ;

3)这样我一个应用把1 2 3 4分别进入两个不同的queue上,queue 1上有1 3,queue 2上有 2 4。

那这样我的TX channel里的PKTdma engine需要从queue中读取描述符:

1)那么我的dma需要依次按照1 2 3 4 的顺序读出描述符么,传输的时候是不是必须按着顺序传送,这样接收端才能获得正确的payload;

2)我觉得1)是必须按序号来的,那这样dma如何去识别这个序列,加入原子操作的时候,3比2先辈dma读取,dma如何等待2的出现(这个是问题的关键);

同样的问题也能出现在下面的场景下,一个queue对应两个tx channel:

queue中的包依次是 A1 B1 A2 B2,channel 1需要处理A的描述符,但是有B在其中插队,那Channel如何处理B1以等待A2的出现呢?

UG里面可能在这个点上没有深入,或者是我没看到,所以麻烦Andy或者前辈们指点一下。

另外在确认一个问题:queue其实存放在QMSS里面的,就是存放了队列头核尾的两个entries的指针,linking ram放的是entries,而不是描述符;描述符实际上是放在memory region 里面。我理解的正确么?

谢谢!

 

Alan

Andy Yin1:

1. 首先指出其中的一个错误,TxQ与Tx channel是一一对应的,映射关系不可配;对应Navigator进行数据传输的使用,简单来说就是在发送端将数据地址挂在descriptor上,然后push TxQ,就完成了,对于位于不连续地址的发送buffer可以通过link方式,之后将第一个descriptor push TxQ即可;对应接收端在初始化的时候将接收buffer地址及最大的长度写给descriptor,之后push给RxFDQ,也就完成了,接收侧QMSS会自动从RxFDQ header依次获取描述符进行数据的存储;

至于你的应用设计我不太明白,麻烦简述一下,或者不需要设计的那么繁琐,只要能满足你的应用需求即可,不需要太过转入死角,如果真要专研,最好的方法就是写代码做实验验证猜想。

2 对。descriptor是在memory region,link ram中会对每个描述符有一个entry,在PUSH/POP后queue中描述符的关系都存储在entry中。

chen xie:

回复 Andy Yin1:

先谢谢Andy!

1.  手册里是这样写的:

2.3.1 Transmit QueuesTX ports use packet queues referred to as transmit queues to store the packets that arewaiting to be transmitted. TX ports will require one or more packet queues dedicatedto each transmit channel for this purpose. Typically, TX queues are internallyconnected to a specific PKTDMA transmit channel.

然后我就理解成多个TxQ可以对应到一个Tx channel。您的意思一一对映,能帮助我解决一下这句话的困惑么?

在描述一下问题:

TX端我程序想写两个应用(两个核),共享一个queue(例如shared mode),push的时候有原子操作竞争,用的还是host模式有多个packet,queue这样pop给CPPI处理时的顺序可能不是我想要的正确顺序(如之前说的A1 B1 A2 B2,我想要的是A1 A2 B1 B2),而CPPI传到RX后是依次接收,这样的话我担心数据块就乱序了。不知道MN是否有机制可以避免这个问题。

我们的工程的功能已经做完了,正如您所说目前就是针对优化的可能性进行试验和研究。如果对上面的担忧有经验的话,希望得到帮助;或者我们自己继续试一下都好!

2.谢谢!linking ram里的entries 是64bit的么,因为我看说QMSS 维护的linking table 是64bit的。

3.再啰嗦的问一下:每个硬核的cppi是独立的,cppi的channel是独立的,那每个channel是分别各有一个dma,还是多个channel共享一个dma硬件呢?SRIO的CPPI和QMSS的CPPI都是直接连接到teranet 3A上,是CPU/3,那为什么这两个CPPI单channel的时候传输能力还有不同呢?MN-performance手册上大概显示的是两倍的关系。

再次感谢Andy!原理上的问题就这三点挺难理解的,剩下的我在多做实验吧!

 

Alan

赞(0)
未经允许不得转载:TI中文支持网 » queue和descriptor的一点问题
分享到: 更多 (0)