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.

使用C6678的SRIO模块传输丢包的问题



平台:TI C6678处理器,使用CUSTOM board,未使用操作系统

问题描述:多片C6678经过交换机互联,多个源DSP同时向一片目的DSP进行传输时出现丢包问题

TI的各位工程师好,

      我在使用6678的SRIO模块时遇到一些困惑,在此请教下各位前辈。CUSTOM板上有多片C6678通过交换机CPS1848进行互联,分别与交换机的不同port相连并绑定各ID号。正常传输时没有问题,DSP间两两传输,可以正常通信。

     但是,实际使用时,会遇到有多片DSP同时向一片DSP写数据的情况,此时发现有丢包现象。咨询1848的FAE了解到,SRIO协议能够实现无丢包的数据传输,交换机内部也有特殊的调度机制来保证不会丢包,当交换机的各个port的接收缓存满时,会有满的标志出现,但目前暂时不清楚它怎样使用这个标志。我的理解是,假如交换机缓存已满,可能会导致交换机堵塞而使得传输时间延长,但是由于调度机制的存在,不会出现丢包的问题,此时交换机很有可能使用一种通知机制来通知传输发起方。那么,很可能就是DSP这边的配置有问题。

    我使用的传输模式是Stream Write,了解到这是一种不需要回应的写模式。请问,是否因为使用的是这种写模式,DSP端不管有没有传输成功而一直不停传输从而导致了丢包现象?DSP端所谓的流控机制是怎样的?会根据接收方的通知信息而控制自己的流量传输吗,Stream Write的这种没有对方回应的模式下是否支持这种流控机制,没有回应接收方又是怎么通知发送方使其自动进行流量控制的?

    如果我上面的分析不对,那么能否给出关于这个问题的一些建议?

    谢谢!

     

 

 

 

  • 我理解这个问题应该先从switch上开始查,因为发送方的DSP把包交给switch就不管了,由switch再提交给目的的DSP(如果传输的是需要ACK类型的报文,ACK是由switch提供给发送方DSP的),所以先从switch上连接发送和接收方的端口上看有没有error,找到到底是发送方和接收方的问题是定位的第一步。

    这种多对一的传输出现问题,我怀疑很可能在switch到接收DSP的传输出现了问题,因为switch中对应一个端口的缓冲是有限的,当一个端口的流量过大时容易产生问题。