DPDK usage discussions
 help / color / mirror / Atom feed
From: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
To: Antonio Di Bacco <a.dibacco.ks@gmail.com>
Cc: users@dpdk.org
Subject: Re: Shared memory between two primary DPDK processes
Date: Fri, 8 Apr 2022 16:26:29 +0300	[thread overview]
Message-ID: <20220408162629.372dfd0d@sovereign> (raw)
In-Reply-To: <CAO8pfFmiSYf=z5kK4EBwJkyJEpSCUrCqZspbNb3dC8nEPipUBw@mail.gmail.com>

2022-04-08 14:31 (UTC+0200), Antonio Di Bacco:
> I know that it is possible to share memory between a primary and secondary
> process using rte_memzone_reserve_aligned to allocate memory in primary
> that is "seen" also by the secondary. If we have two primary processes
> (started with different file-prefix) the same approach is not feasible. I
> wonder how to share a chunk of memory hosted on a hugepage between two
> primaries.
> 
> Regards.

Hi Antonio,

Correction: all hugepages allocated by DPDK are shared
between primary and secondary processes, not only memzones.

I assume we're talking about processes within one host,
because your previous similar question was about sharing memory between hosts
(as we have discussed offline), which is out of scope for DPDK.

As for the question directly, you need to map the same part of the same file
in the second primary as the hugepage is mapped from in the first primary.
I don't recommend to work with file paths, because their management
is not straightforward (--single-file-segments, for one) and is undocumented.

There is a way to share DPDK memory segment file descriptors.
Although public, this DPDK API is dangerous in the sense that you must
clearly understand what you're doing and how DPDK works.
Hence the question: what is the task you need this sharing for?
Maybe there is a simpler way.

1. In the first primary:

	mz = rte_memzone_reserve()
	ms = rte_mem_virt2memseg(mz->addr)
	fd = rte_memseg_get_fd(ms)
	offset = rte_memseg_get_fd_offset(ms)

2. Use Unix domain sockets with SCM_RIGHTS
   to send "fd" and "offset" to the second primary.

3. In the second primary, after receiving "fd" and "offset":

	flags = MAP_SHARED | MAP_HUGE | (30 << MAP_HUGE_SHIFT)
	addr = mmap(fd, offset, flags)

Note that "mz" may consist of multiple "ms" depending on the sizes
of the zone and hugepages, and on the zone alignment.
Also "addr" may (and probably will) differ from "mz->addr".
It is possible to pass "mz->addr" and try to force it,
like DPDK does for primary/secondary.


  reply	other threads:[~2022-04-08 13:26 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-08 12:31 Antonio Di Bacco
2022-04-08 13:26 ` Dmitry Kozlyuk [this message]
2022-04-08 14:36   ` Ferruh Yigit
2022-04-08 21:14     ` Antonio Di Bacco
2022-04-08 21:08   ` Antonio Di Bacco
2022-04-11 13:03     ` Antonio Di Bacco
2022-04-11 17:30       ` Dmitry Kozlyuk
2022-04-14  8:20         ` Antonio Di Bacco
2022-04-14 19:01           ` Dmitry Kozlyuk
2022-04-14 19:51             ` Antonio Di Bacco
2022-04-18 17:34               ` Antonio Di Bacco
2022-04-18 17:53                 ` Antonio Di Bacco
2022-04-18 19:08                   ` Dmitry Kozlyuk
2022-07-06 22:14   ` Antonio Di Bacco
2022-07-07  0:26     ` Dmitry Kozlyuk
2022-07-07  8:48       ` Antonio Di Bacco
2022-07-07  9:26         ` Dmitry Kozlyuk

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=20220408162629.372dfd0d@sovereign \
    --to=dmitry.kozliuk@gmail.com \
    --cc=a.dibacco.ks@gmail.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).