Hi Lu,

Thank you for getting back to me.

On 24.07.2015 05:49, Lu, Wenzhuo wrote:
> Hi Ciprian,
>
>> -----Original Message-----
>> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of ciprian.barbu
>> Sent: Thursday, July 23, 2015 11:20 PM
>> To: dev at dpdk.org
>> Subject: Re: [dpdk-dev] can eth_igb_xmit_pkts called with len 0 affect
>> transmission?
>>
>> Anyone?
>>
>> On 17.07.2015 16:48, ciprian.barbu wrote:
>>> Hi,
>>>
>>> I'm seeing a strange behavior when calling rte_eth_tx_burst with len
>>> == 0. I'll explain the reason for this situation further bellow. But
>>> what I'm seeing is that after doing this call my application keeps
>>> returning from eth_igb_xmit_pkts here, even when len > 0:
>>> http://dpdk.org/browse/dpdk/tree/lib/librte_pmd_e1000/igb_rxtx.c?h=rel
>>> eases#n476
> Don?t understand what the len means? The packet length?

Sorry about this, failure to communicate :) I meant to say nb_pkts = 0

> According to where the code returns, seems the queue is not initialized 
> correctly.

The queue should have been initialized ok, I'm able to several millions 
of packets before getting stuck. It's only after I make a 
rte_eth_tx_burst call with nb_pkts = 0 that I get stuck in that return. 
Looking at the source code, the function will only do:

         rte_wmb();
         E1000_PCI_REG_WRITE(txq->tdt_reg_addr, tx_id);

The barrier should be harmless, so I'm thinking that writing that 
register without sending any packets causes this behavior.


> I saw you used odp-dpdk. Sorry, I'm not familiar with it. Why not try dpdk 
> examples,
> and check if the behavior is same?

Of course, I tried the DPDK l2fwd example, that's how I managed to find 
the difference between odp_l2fwd and DPDK l2fwd. After I removed the 
piece of code that was calling rte_eth_tx_burst with nb_pkts 0 it 
started behaving the same as DPDK l2fwd.

I suppose I could also modify l2fwd to make this call and see it it gets 
stuck too.

>
>>>
>>>
>>> I can't really explain myself this behavior, I don't understand very
>>> well what the nic does once it receives buffers in its rings, but to
>>> me it looks like calling rte_eth_tx_burst with len 0 has this effect.
>>>
>>> What I'm using in my tests is the linaro odp-dpdk implementation and
>>> the odp_l2fwd example. The odp-dpdk implementation makes this call to
>>> try and make the pmd to flush the tx queue in case there are no more
>>> free buffers in the pool, but this was only verified for ixgbe 82599
>>> cards, for igb the packets are not actually flushed until the tail
>>> circles back the whole length of the queue. I'm pretty much the only
>>> one (that I know
>>> of) that uses odp with 1G igb i350 cards and see this issue.
>>>
>>> Can anyone explain whether I'm getting this right and there could be
>>> side effects to calling eth_igb_xmit_pkts with len 0?
>>>
>>> Thank you,
>>> /Ciprian

Reply via email to