DPDK usage discussions
 help / color / mirror / Atom feed
From: "Van Haaren, Harry" <harry.van.haaren@intel.com>
To: "songj@zctt.com" <songj@zctt.com>, "users@dpdk.org" <users@dpdk.org>
Subject: Re: [dpdk-users] How to free a rte_mempool buffer
Date: Thu, 21 Mar 2019 10:51:39 +0000	[thread overview]
Message-ID: <E923DB57A917B54B9182A2E928D00FA6758086E5@IRSMSX102.ger.corp.intel.com> (raw)
In-Reply-To: <000901d4dfc2$cee23e10$6ca6ba30$@zctt.com>+A89D211CCA5A0E85

Hi Jie,

Answers inline

> From: 宋捷 [mailto:songj@zctt.com] 
> Sent: Thursday, March 21, 2019 8:48 AM
> To: users@dpdk.org; Van Haaren, Harry <harry.van.haaren@intel.com>
> Subject: How to free a rte_mempool buffer
>
> Hi All,
>
> I test my DPDK program in VM Ubuntu (in VMware) with the two virtual NICs(VMXNET3 and e1000).
>
> I create a rte_mempool buffer by rte_pktmbuf_pool_create, and load some packets from a pcap file into this buffer. I can sending these packets > by rte_eth_tx_burst successfully.
>
> Now I want to load another pcap file, then I free the previous rte_mempool buffer by rte_mempool_free, and create a new rte_mempool buffer,
> But a crash will be occurred at rte_eth_tx_burst Both in VMXNET3 and e1000.
>
> I traced the code and found the crash point as below: 
> The VMXNET3 driver: crash at:
> vmxnet3_xmit_pkts->vmxnet3_tq_tx_complete->vmxnet3_unmap_pkt->rte_pktmbuf_free(mbuf);  (mbuf = txq->cmd_ring.buf_info[eop_idx].m;)
>
> The e1000 driver: crash at:
> eth_em_xmit_pkts->rte_pktmbuf_free_seg(txe->mbuf); 

Correct - when you free the mempool any mbufs that are currently in use are indirectly invalidated.
The reason for this is that each mbuf has a mempool pointer, and when an mbuf is freed, it uses the
pool pointer to return it to the correct mempool.

Given that the mempool has been freed, this is now Undefined Behaviour.


> I think rte_mempool_free side effects the driver’s TX ring, but don’t know how to fix this issue?
> How can we free a rte_mempool buffer safely?

It is not possible to free a mempool while a NIC is still using it.

I suggest to two different mempools: one for the NIC queues, and the other for loading pcap files.
Then you can leave the NIC mempool intact, and free/re-allocate the pcap mempool as required.


> Thanks
> Jie

Regards, -Harry

      reply	other threads:[~2019-03-21 10:51 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-21  8:48 宋捷
2019-03-21 10:51 ` Van Haaren, Harry [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=E923DB57A917B54B9182A2E928D00FA6758086E5@IRSMSX102.ger.corp.intel.com \
    --to=harry.van.haaren@intel.com \
    --cc=songj@zctt.com \
    --cc=users@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).