On Mon, Mar 09, 2015 at 03:36:42AM +0800, Jeffrey 'jf' Lim wrote:

> Dynamic linking results in smaller binaries (
> http://www.postfix.org/INSTALL.html#shared_enable), and memory savings, but
> what about dynamic loading of database clients? Does this work the same
> way, or is this something different from dynamic linking? It's not
> altogether clear to me. What does it mean to dynamically load a client?
> 
> http://www.postfix.org/INSTALL.html#dynamicmaps_enable only mentions that
> 'Dynamic loading is useful when you distribute or install pre-compiled
> Postfix packages.' What if I'm not planning to distribute? Are there any
> other reasons (like as mentioned, saving on memory) I would want to enable
> dynamic loading of database clients when compiling?

The memory savings are not generally significant, because the code
(text segment) of each executable is only loaded once and shared
by all instances of that running executable.  So whether you're
running one smtpd(8) process or five hundred, the memory consumed
by the code is the same.

Modern systems have ludicrous amounts of RAM the modest savings in
memory footprint for a system running zero or more of each of:

        master
        pickup
        qmgr
        trivial-rewrite
        smtpd
        cleanup
        smtp
        local
        virtual

are negligible.  Yes with shared libraries there is more sharing
going on, with the above executables smaller and some more code
loaded just once, but this hardly matters.

The benefit of dynamic loading of table drivers is simplified
dependency management for O/S release engineers.  They can ship a
system with an MTA without having to bundle support for every
database client library under the sun and the dependencies of those
libraries, ...

There is little to no benefit to users building their own Postfix
from source.

-- 
        Viktor.

Reply via email to