public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Samuel Thibault <samuel.thibault@ens-lyon.org>
To: Carlos O'Donell <carlos@redhat.com>
Cc: libc-alpha@sourceware.org
Subject: Re: [PATCH] Add RTLD_RELOAD to dlopen
Date: Thu, 20 Jul 2017 20:19:00 -0000	[thread overview]
Message-ID: <20170720201934.o3ob5tipivwtidy7@var.youpi.perso.aquilenet.fr> (raw)
In-Reply-To: <5dd4f2da-c951-ca9e-9a50-5b7bca547482@redhat.com>

Carlos O'Donell, on jeu. 20 juil. 2017 16:03:46 -0400, wrote:
> On 07/20/2017 03:34 PM, Samuel Thibault wrote:
> > Carlos O'Donell, on jeu. 20 juil. 2017 15:31:38 -0400, wrote:
> >> On 07/20/2017 03:15 PM, Samuel Thibault wrote:
> >>> In our parallel programming projects, we would like to load some DSO
> >>> several times within the same process, because we want to share the
> >>> addresse space for passing data pointers between parallel executions,
> >>> and the DSO has global variables and such which we want to see
> >>> duplicated.
> >>>
> >>> Unfortunately, dlopen() does not re-load the DSO when it is already
> >>> loaded. One workaround is to cp the file under another name, but that's
> >>> ugly and does not share the memory pages.
> >>>
> >>> The patch proposed here simply adds an RTLD_RELOAD flag which disables
> >>> checking for the DSO being already loaded, thus always loading the DSO
> >>> again. There is no actual code modification, only the addition of two
> >>> if()s and reindent.
> >>  
> >> This is what Solaris designed dlmopen() for, is there any reason you
> >> can't use dlmopen()?
> > 
> > Because only that DSO should be reloaded. All the dependencies are fine
> > to use as such, to avoid memory usage duplication.
> 
> Is that really a problem? Have you measured this?

Yes and yes. We are targetting loadling like thousands of replicates of
the DSO, to emulate a very large parallel execution.

> The kernel will share every page except data/bss.

But that also eats addressing space and VMAs.

> Using dlmopen will protect you from all kinds of issues with dependent
> libraries only supporting a single global state since you'll get unique
> state for each of the loaded libraries.

Sure, but it's really too costly for us, and it loads glibc several
times in the process, which can pose other problems.

> I see RTLD_RELOAD as an shortcut to simply having multiple copies of the
> shared library on disk. I believe you could use hardlinks and glibc should
> load each as a unique library.

Hardlinks would have the same st_ino, so libc would detect it is already
loaded.

Samuel

  reply	other threads:[~2017-07-20 20:19 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-20 19:15 Samuel Thibault
2017-07-20 19:31 ` Carlos O'Donell
2017-07-20 19:34   ` Samuel Thibault
2017-07-20 20:03     ` Carlos O'Donell
2017-07-20 20:19       ` Samuel Thibault [this message]
2017-07-20 20:26         ` Samuel Thibault
2017-07-20 20:31       ` Samuel Thibault
2017-07-23 10:17 ` Florian Weimer
2017-08-03 14:37 ` Samuel Thibault
2017-08-03 17:26   ` Florian Weimer
2017-08-03 19:57     ` Carlos O'Donell

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=20170720201934.o3ob5tipivwtidy7@var.youpi.perso.aquilenet.fr \
    --to=samuel.thibault@ens-lyon.org \
    --cc=carlos@redhat.com \
    --cc=libc-alpha@sourceware.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 read-only IMAP folder(s) and NNTP newsgroup(s).