caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Gerd Stolpmann <info@gerd-stolpmann.de>
To: Benjamin Geer <benjamin.geer@misys.com>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] Suggestion: a possible alternative to shared libraries?
Date: 14 Jun 2004 17:03:06 +0200	[thread overview]
Message-ID: <1087225386.23883.51.camel@ares> (raw)
In-Reply-To: <40CDB4F3.6010203@misys.com>

Am Mon, 2004-06-14 um 16.23 schrieb Benjamin Geer:
> The reasoning is as follows: if many small programs use the same large 
> library, each of the small programs will require a lot of memory. 
> Rather than create shared libraries to get around this, the idea is to 
> write the in-memory representation of libraries (ideally on an as-needed 
> basis) into a cache consisting of one or more files that can be mapped 
> read-only into memory; that memory could then be shared by multiple Caml 
> processes that needed to use the same libraries.

Basically, a shared library _is_ an in-memory representation of the code
to be mapped into memory. There is a bit of additional stuff that makes
it complicated, in particular the file format is organized such that
most of the file can be mapped read-only, and only a small fraction is
mapped read-write (e.g. for address relocations).

So you are only re-inventing the wheel, at least if you want to do it
for native code.

I read the announcement differently. As Java is based on bytecode, and
the .class files are transformed after being loaded into memory (to
increase speed, this may or may not include JIT compiling), they are
dumping the memory after this transformation, and emulate a kind of
shared library for their execution model. They cannot use normal shared
libraries because they don't use normal ways of code representation,
that's why it is reasonable to port this wheel to the Java vehicle.

One can discuss whether one should do the same for O'Caml bytecode. In
particular, neither bytecode executables nor loaded CMAs are loaded by
memory mapping. When I am not completely wrong, executables could be
loaded by mapping them read-only (at least in the case when no endianess
transformation is necessary), as they are mainly a memory footprint. For
CMAs, a non-trivial change of the file format would be necessary as the
loader performs relocations, and these relocations should be restricted
to certain memory areas to maximize memory sharing.

> Perhaps Caml's existing MD5 signatures for libraries could be used to 
> distinguish between an older version of a library and a newer one, so 
> each Caml process would only memory-map the version that it was 
> originally linked with, in order to avoid the "DLL hell" problem that 
> Xavier points out.

Much easier: Include the MD5 signature in the name of the shared
library.

However, the hell persists: You don't know which versions are still in
use.

Gerd
-- 
------------------------------------------------------------
Gerd Stolpmann * Viktoriastr. 45 * 64293 Darmstadt * Germany 
gerd@gerd-stolpmann.de          http://www.gerd-stolpmann.de
------------------------------------------------------------

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


  reply	other threads:[~2004-06-14 15:03 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-06-14 14:23 Benjamin Geer
2004-06-14 15:03 ` Gerd Stolpmann [this message]
2004-06-14 15:37   ` Benjamin Geer

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=1087225386.23883.51.camel@ares \
    --to=info@gerd-stolpmann.de \
    --cc=benjamin.geer@misys.com \
    --cc=caml-list@inria.fr \
    /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).