【问题标题】:DPDK packet lost and disorderDPDK丢包乱码
【发布时间】:2018-02-06 02:24:59
【问题描述】:

我使用 DPDK 做了一个简单的测试程序:computer1 中的 program1 是发送数据包,computer2 中的 program2 是接收数据包。 computer1 和computer2 直接相连,没有开关。

在程序1中,我使用了一个packId来表示packet id的顺序。

while(true){
pkt = rte_pktmbuf_alloc(mbuf_pool); 
uint8_t* pchar = rte_pktmbuf_mod(pkt, uint8_t*); 
//set mac address and packet length. (pkt 0 to pkt 13). 
//use from byte 14 to store uint_64 packId; 
uint64_t* pPackId = (uint64_t*)(pchar+14); 
*pPackId = packId; 
packId++; 
//put 1024 bytes data inside packet. 
uint16_t sent = rte_eth_tx_burst(0, 0, &pkt, 1); 
while(sent!=1)
{
   sent = rte_eth_tx_burst(0, 0, &pkt, 1); 
}
}

在接收器中,我定义了长接收环:nb_rxd=3072:

rte_eth_dev_adjust_nb_rx_tx_desc(0, &nb_rxd, &nb_txd); 
rte_eth_rx_queue_setup(0, 0, nb_rxd, rte_eth_dev_socket_id(0), NULL, mbuf_pool);

有一个for循环来接收数据包,并检查数据包序列ID。

for(;;)
{
   strcut rte_mbuf *bufs[32]; 
   const uint16_t nb_rx = rte_eth_rx_burst(0, 0, bus, 32);
   if(unlikely(nb_rx==0))
      continue; 
   int m = 0; 
   for (m=0; m<nb_rx;m++)
   {
       uint8_t* pchar = rte_pktmbuf_mtod(buf[m], uint8_t*); 
       uint64_t* pPackId = pchar+14; 
       uint64_t packid = *pPackId; 
       if(expectedPackid!=packid){
           printf... 
           expectedPackid = packid+1; 
        }
       else expectedPackid++; 
   } 
} 

基于program2,我看到很多丢包和乱码。接收到的数据包被放入环形缓冲区。如果按顺序接收,我也发现有丢包,但我的program1的发送速度只有1gbps左右。

【问题讨论】:

  • 嗯,它是依赖于 PMD 的,但一般来说,如果你使用一个 TX/RX 队列发送和接收数据包,你应该按顺序获取数据包。总体而言,“很多数据包丢失”听起来像是其他问题,而不是排序本身。我建议您先处理丢失的数据包,然后再进行订购... rte_eth_stats_get() 可能会启发丢失数据包的情况...
  • 我使用 rte_eth_stats_get() 发现所有数据包都已收到。最后我发现这是我的program2问题。感谢您的正确指导,很高兴与您交谈。
  • 您可能会发现自己回答问题很有用,因此其他人可能会从您的经验中学习...

标签: dpdk


【解决方案1】:

rte_eth_stats_get() 对于故障排除非常有用。从rte_eth_stats,我发现ipackets是正确的,q_ipackets[0]是正确的,imissed是0,ierrors是0,rx_nombuf是0,q_errors[0]是0。所以应该是program2中的代码有问题。经过检查代码,这是因为program2中的一些内存管理。

【讨论】:

    猜你喜欢
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多