[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.