Hi Qing,

The idea is that we do not want to clean the descriptor ring until we have used 
"enough" descriptors.
So (nb_tx_desc -nb_tx_free) tells us how many descriptors we've used.  Once 
we've used "enough" (i.e. tx_free_thresh) then we will try to clean the 
descriptor ring.
If you look at the simpler "tx_xmit_pkts()" (simple is kind of a misnomer 
here... it refers to simplicity of features, not simplicity of implementation), 
we chose to implement the "nb_tx_free < tx_free_thresh" variant.
The only real difference is that the semantics of "tx_free_thresh" change from 
"free descriptors after this many are used" to "free descriptors after this 
many are remaining".

Thanks,
Jeff

-----Original Message-----
From: dev [mailto:dev-boun...@dpdk.org] On Behalf Of Qing Wan
Sent: Wednesday, February 12, 2014 3:50 PM
To: dev at dpdk.org
Subject: [dpdk-dev] condition for calling ixgbe_xmit_cleanup

Hi,



There are following code in function ixgbe_xmit_pkts,

....

if ((txq->nb_tx_desc - txq->nb_tx_free) > txq->tx_free_thresh) {

                ixgbe_xmit_cleanup(txq);

}

....

My understanding is, nb_tx_desc means total number of descriptors in ring and 
nx_tx_free represents how many descriptors are available, so
txq->nb_tx_desc - txq->nb_tx_free means how many we have used. I'm not
quite understand the meaning of this comparison.  Why is the condition not 
something like "if (txq->nb_tx_free < tx_free_thresh)". 



really appreciate if someone could help me on this.



Thanks

Qing

Reply via email to