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.

Queue Management、Queue Proxy Regions和Queue Peek Region几个寄存器的主要区别是什么?

Queue Management、Queue Proxy Regions和Queue Peek Region几个寄存器的主要区别是什么?

我看到手册上介绍的

Queue N Register A和Queue N Register B功能好像都是一样的,请高手指点,谢谢

  • Queue Proxy Region的目的是为连续写regC, regD的提供了一种原子性的保证。一个核如果通过 Queue proxy Region的寄存器先写了regC,在这个核再写regD之前,另一个核的写regC和D的操作是不能生效的。这样如果保证了多核之间入队(需要把包长度一起入队,也就是要连续写C,D)之间的互斥。需要注意的是如果用户只需要入队一个包,而不需要把包的size保存下来, 只要写D就可以了,这时候就不需要使用Queue Proxy Region,直接使用Queue Management 就可以了。

    Queue Peek Region的关键在regD,你可以发现regD的定义跟Queue Management定义不同,可以通过regD设置队列中包数量检测功能,以及检测的门限。这个功能是配合accumulator的自动pop功能。QMSS检测到队列中包数大于配置的门限,就会把status bit设置成1,accumulator检测到这个bit后,就会启动自动的pop功能。具体参考accumulator部分的介绍。

  • 感谢你的回答,现在明白了。还有个问题请教。

    就是发送队列和接收队列是怎么对应的?我看手册说是通过设置flowID,不是很明白怎么设置的。

    我的问题不知道你清楚了没?

    我的意思是:比如,发送队列为COREMSG_HOST_TX_Q =800,接收队列COREMSG_HOST_RX_Q = 662,怎么知道通过COREMSG_HOST_TX_Q push的描述符进入到了队列COREMSG_HOST_RX_Q 里,谢谢回答

  • 你看以参考sprugr9d中Host Packet Descriptor Packet Definition中的PD word1,其中23-16位的Source Tag-Lo中指定了接收侧使用的Rx flow的Index,在这个Rx flow中再指定对应的接收队列。

x 出现错误。请重试或与管理员联系。