coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: RFC: [PATCH] build: Option for building all tools in a single binary


From: Pádraig Brady
Subject: Re: RFC: [PATCH] build: Option for building all tools in a single binary
Date: Mon, 09 Jun 2014 14:56:39 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130110 Thunderbird/17.0.2

On 06/09/2014 02:14 PM, Eric Blake wrote:
> On 06/08/2014 04:33 AM, Pádraig Brady wrote:
>> On 06/07/2014 09:37 PM, Alex Deymo wrote:
>>> Add the --enable-single-binary option to the configure file. When
>>> enabled, this option builds a single binary file with all the
>>> selected tools in it. Which tools gets executed depends on the value
>>> of argv[0] which is intended to use together with symlinks to the
>>> single program.
>>>
> 
>>
>> This seems like a very useful option, thanks!
>> Yes given that there are around 100 utils,
>> amalgamation like this reduces overhead significantly.
> 
> Isn't that precisely the premise of busybox?

Should we not support it if easy to add?

> I'm also slightly worried about the ramifications.

I was waiting for timing/assignment info before digging into the implementation,
but yes there are significant things to consider here.

> For example, sort is
> currently multithreaded, and therefore must take care that use of stdio
> functionality is properly locked between threads.  Meanwhile, most other
> utilities are single-threaded, and can optimize to use unlocked stdio
> functions for speed because there is no other thread competing for
> locks.  But if combined into a single binary, then that one binary will
> be multi-threaded, and you may lose the performance benefit of
> specifically compiling other apps to be single-threaded.

Note sort still uses the unlocked I/O functions.
I was unsure about it, but on further investigation seems OK:
http://lists.gnu.org/archive/html/coreutils/2013-11/msg00087.html

There will be overhead associated with an amalgamation.
For example all shared libs would be loaded and resolved
even for simple programs like `true`.  Also all static
data initialized etc.

It's worth noting that if all utils aren't needed then an
option like provided by openwrt is to have separately installable utils:
For e.g.: http://downloads.openwrt.org/backfire/10.03/brcm47xx/packages/

thanks,
Pádraig.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]