DPDK usage discussions
 help / color / mirror / Atom feed
* [dpdk-users] A question about rte_pktmbuf_init() and alike functions
@ 2015-11-03 17:49 Александр Самойлов
  2015-11-03 18:52 ` Wiles, Keith
  2015-11-03 18:53 ` Matt Laswell
  0 siblings, 2 replies; 6+ messages in thread
From: Александр Самойлов @ 2015-11-03 17:49 UTC (permalink / raw)
  To: users

 Hi all. I'm sorry if the question is naive or stupid, but still I couldn't find the answer in the manual.

The question is: are the element init functions called just once (with the mempool creation) or are they called each time we retrieve a new element from a pool? I'm asking because I use a mempool pool with pkt_mbuf structures for generating new Ethernet frames (with IP and TCP data) and it works just fine for a while (I reckon just as long as I'm getting a new pktmbuf with rte_pktmbuf_alloc and not a recycled one) and at some point my generated frames start to have the wrong TCP ckecksum (even though TCP checksum it totally OK at first). And the strange thing is that if, for instance, mempool has 2048 elements -  my program works for 5 seconds (rough estimate), and if mempool has 4096 elements - my program works for 10 seconds. The connection is obvious. I used to believe that init() functions are called each time we retrieve an element from a mempool, but now I'm not so sure.


Alex Samoylov

^ permalink raw reply	[flat|nested] 6+ messages in thread
* [dpdk-users] A question about rte_pktmbuf_init() and alike functions
@ 2015-11-03 19:23 Александр Самойлов
  2015-11-03 19:27 ` Wiles, Keith
  0 siblings, 1 reply; 6+ messages in thread
From: Александр Самойлов @ 2015-11-03 19:23 UTC (permalink / raw)
  To: users

 An update. I decided to try this:

m = rte_pktmbuf_alloc(mp);
if(unlikely(m == NULL))
{
    RTE_LOG(INFO, USER1, "%s: Couldn't allocate pkt_mbuf\n", __func__);
    return NULL;
}
rte_pktmbuf_init(mp, NULL, m, 0);
rte_mbuf_refcnt_set(m, 1);
Well, it worked out. My memory is not dirty anymore and TCP checksum is always OK. Thank you for the input.
But this raises another question: You said that rte_pktmbuf_alloc() implies resetting the buffer to a "sane state". 
So why this reset doesn't make my new "m" buffer "sane enough" to keep a new frame while rte_pktmbuf_init does?


Alex Samoylov



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2015-11-03 19:44 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-11-03 17:49 [dpdk-users] A question about rte_pktmbuf_init() and alike functions Александр Самойлов
2015-11-03 18:52 ` Wiles, Keith
2015-11-03 18:53 ` Matt Laswell
2015-11-03 19:23 Александр Самойлов
2015-11-03 19:27 ` Wiles, Keith
2015-11-03 19:44   ` Александр Самойлов

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).