Subject: Re: "filtered" shared libraries
To: der Mouse <mouse@Rodents.Montreal.QC.CA>
From: Eric Haszlakiewicz <erh@nimenees.com>
List: tech-userlevel
Date: 11/01/2001 23:11:54
On Thu, Nov 01, 2001 at 08:54:01PM -0500, der Mouse wrote:
> >>> Sounds like a cool idea, does ld.so already do this?
> >> Isn't this called "demand paging"?
> > Thanks for reminding me! I wonder why anyone would need "lazy
> > loading" to be explicitly supported by the link loader.
>
> Primarily, I would think, because it guarantees functional grouping.
> If you filter-load stdio, strings, and the resolver, let's say, and use
> only stdio, you page in only stdio. If you load a single shared
You get almost exactly that just by splitting the library into
sub-libraries that the filter lib links against. Then you'd only page in
the headers of each library until you actually used something in it.
> > I guess with "lazy loading" you could have even less mmap'ed in the
> > first place, but why would you need that on a server system?
>
> VM consumption? The ability to replace one library without having to
> rebuild and replace a whole humngous blob? The ability to defer
> deciding exactly which library to actually use until as late as
> possible? (For example, I could imagine a libc that lazily loads
> shared libraries for string stuff depending on wihch locale is in use.)
Replacing one small library doesn't require lazy loading, just a split
library.
I believe deciding which library to load can be done using dlopen (of
course you still need a stub function in the primary library to do this)
So the only thing lazy loading really gets you is decreased VM consumption.
eric