DPDK usage discussions
 help / color / mirror / Atom feed
From: "Wiles, Keith" <keith.wiles@intel.com>
To: Wajeeha Javed <wajeeha.javed123@gmail.com>
Cc: users <users@dpdk.org>
Subject: Re: [dpdk-users] Increasing the NB_MBUFs of PktMbuf MemPool
Date: Fri, 12 Oct 2018 11:35:00 +0000	[thread overview]
Message-ID: <2A2ED626-CEA7-4DD5-A29C-E515B67BF5F1@intel.com> (raw)
In-Reply-To: <CAAQUUHUbowa5EnTiOhsaimAXNJXxjxKgPY1GAsqR+EUtoGL_2w@mail.gmail.com>



On Oct 11, 2018, at 11:48 PM, Wajeeha Javed <wajeeha.javed123@gmail.com<mailto:wajeeha.javed123@gmail.com>> wrote:

Hi,

I am in the process of developing  DPDK based Application where I would
like to delay the packets for about 2 secs. There are two ports connected
to DPDK App and sending traffic of 64 bytes size packets at a line rate of
10GB/s. Within 2 secs, I will have 28 Million packets for each of the port
in delay application. The maximum RX Descriptor size is 16384. I am unable
to increase the number of Rx descriptors more than 16384 value. Is it
possible to increase the number of Rx descriptors to a large value. e.g.
65536.

This is most likely a limitation of the NIC being used and increasing beyond that value will not be possible, please check the NIC being used programmer guide.
Therefore I copied the mbufs using the pktmbuf copy code(shown
below) and free the packet received. Now the issue is that I can not copy
more than 5 million packets because the  nb_mbufs of the mempool can't be
more than 5 Million (#define NB_MBUF 5000000). If I increase the NB_MBUF
macro from more than 5 Million, the error is returned unable to init mbuf
pool. Is there a possible way to increase the mempool size?

The mempool uses uint32_t for most sizes and the number of mempool items is uint32_t so ok with the number of entries in a can be ~4G as stated be make sure you have enough memory as the over head for mbufs is not just the header + the packet size.

My question is why are you copying the mbuf and not just linking the mbufs into a link list? Maybe I do not understand the reason. I would try to make sure you do not do a copy of the data and just link the mbufs together using the next pointer in the mbuf header unless you have chained mbufs already.

The other question is can you drop any packets if not then you only have the linking option IMO. If you can drop packets then you can just start dropping them when the ring is getting full. Holding onto 28m packets for two seconds can cause other protocol related problems and TCP could be sending retransmitted packets and now you have caused a bunch of work on the RX side at the end point.


Furthermore, kindly guide me if this is the appropriate mailing list for
asking this type of questions.

You are on the correct email list, dev@dpdk.org<mailto:dev@dpdk.org> is for DPDK developers normally.

Hope this helps.

<Code>

static inline struct rte_mbuf *

pktmbuf_copy(struct rte_mbuf *md, struct rte_mempool *mp)
{
struct rte_mbuf *mc = NULL;
struct rte_mbuf **prev = &mc;

do {
   struct rte_mbuf *mi;

   mi = rte_pktmbuf_alloc(mp);
   if (unlikely(mi == NULL)) {
       rte_pktmbuf_free(mc);

       rte_exit(EXIT_FAILURE, "Unable to Allocate Memory. Memory
Failure.\n");
       return NULL;
   }

   mi->data_off = md->data_off;
   mi->data_len = md->data_len;
   mi->port = md->port;
   mi->vlan_tci = md->vlan_tci;
   mi->tx_offload = md->tx_offload;
   mi->hash = md->hash;

   mi->next = NULL;
   mi->pkt_len = md->pkt_len;
   mi->nb_segs = md->nb_segs;
   mi->ol_flags = md->ol_flags;
   mi->packet_type = md->packet_type;

  rte_memcpy(rte_pktmbuf_mtod(mi, char *), rte_pktmbuf_mtod(md, char *),
md->data_len);
  *prev = mi;
  prev = &mi->next;
} while ((md = md->next) != NULL);

*prev = NULL;
return mc;

}

</Code>

*Reference:*  http://patchwork.dpdk.org/patch/6289/

Thanks & Best Regards,

Wajeeha Javed

Regards,
Keith

  parent reply	other threads:[~2018-10-12 11:35 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-12  4:48 Wajeeha Javed
2018-10-12  8:56 ` Andrew Rybchenko
2018-10-12 11:35 ` Wiles, Keith [this message]
2018-10-12 11:40 ` Wiles, Keith

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=2A2ED626-CEA7-4DD5-A29C-E515B67BF5F1@intel.com \
    --to=keith.wiles@intel.com \
    --cc=users@dpdk.org \
    --cc=wajeeha.javed123@gmail.com \
    /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).