Unfortunate dynamic linking for everything

dyson at iquest.net dyson at iquest.net
Tue Nov 18 05:07:58 PST 2003


Guys,
	Please revisit the dynamic linking for everything.  The
	cost for using shared libs in cases like shells actually
	is higher than statically linking (both in memory and
	in time.)  It appears that there is a loss of VM understanding
	over time.  Don't confuse the advantages of using shared
	libs on X windows (and environments like that) with the
	same advantages being non-existant when using shared
	libs on normal layout programs (shells are perhaps the
	worst general case, but not necessarily the worst in all ways.)

	Another issue:  if you continue to support the dynamic
	linking mechanisms for special shared libs, but otherwise
	link statically, much of the high overhead of shared libs
	for-everything will still be mitigated.  Just because there
	might be a need for a special shared lib, that doesn't justify
	using shared libs for everything (and add the cost of
	sparse memory allocation and significantly higher fork/exec
	times than necessary.)  For a 'fun time', take a look at
	the process map in the deprecated /proc filesystem.  Compare
	the size (complexity) of a shared program with a static
	program...  It doesn't show all of the internal differences,
	but is an externally accessable (and benchmark free) exemplar.

	The only real reason for building various programs dynamic
	in order to gain the advantage of specific shared object
	would be an all or nothing type argument (a typical fallacy
	in most religious discussions.)

	It really doesn't make sense to arbitrarily cut-off a
	discussion especially when a decision might be incorrect.
	Perhaps the all-dynamic scheme had been decided upon so
	as to give a competitive performance advantage to those who 
	rebuild everything (appropriate) static? :-).

	If there hadn't been a noticed increase in cost by using
	all-shared-libs, then the measurements were done
	incorrectly.  If the decision is made based upon allowing
	for 1.5X (at least) times increase in fork/exec times, and
	larger memory usage (due to sparse allocations), then it
	would be best to have decided that performance isn't as
	important as it used to be (which it just might not be
	anymore.)  Last time that I heard, disk space is still
	much much less expensive than main memory :-).

	Remember:  the cost for disk space is nil nowadays, space
	only made obvious by an insanely small default root filesystem
	size allocation.  (An 'insanely' small root filesystem is
	okay when that root is a mini-root recovery system, but
	the cost of an extra 500MB is rather small on a non-specialty
	system is nil compared to other resources.)

	I do use an all-dynamic configuration for certain embedded
	applications (but also a case where there are no seperated
	filesystems, and the memory usage isn't quite as important
	because of the fact that AVAILABLE features is more important
	than lots of concurrently running programs.)  For the best
	sharing and quickest system response (both due to memory and
	raw program/image invocation times), at least make the shells
	static.

	(Sorry for any misspellings or grammar errors -- it is early
	in the morning...  I'll probably not participate in any further
	discussion on this matter either, but it would be good to
	generally avoid loosing 'ancient', but still 'accurate'
	technical history.)

	John



More information about the freebsd-current mailing list