The init functions are called once per object at initialization time, not at allocation time. From a performance perspective, this is preferable, though it leaves a dependency on the application to do subsequent initialization when the object is allocated or when it is freed.
-- Matt Laswell Principal Software Engineer, infinite io laswell at infiniteio.com On Tue, Nov 3, 2015 at 11:49 AM, ????????? ???????? <cidjey1991 at mail.ru> wrote: > 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
