From: Tim Bird <tim.bird@sonymobile.com>
To: "josh@joshtriplett.org" <josh@joshtriplett.org>
Cc: "ksummit-discuss@lists.linuxfoundation.org"
<ksummit-discuss@lists.linuxfoundation.org>
Subject: Re: [Ksummit-discuss] RFC: Kernel tinification - kernel config reduction
Date: Thu, 14 Aug 2014 09:30:19 -0700 [thread overview]
Message-ID: <53ECE41B.6000707@sonymobile.com> (raw)
In-Reply-To: <20140813191907.GA14165@cloud>
On 08/13/2014 12:19 PM, josh@joshtriplett.org wrote:
> On Wed, Aug 13, 2014 at 07:29:21PM +0200, Bird, Tim wrote:
>> I'd like to raise an issue, ahead of the kernel summit, on the topic of reducing
>> kernel config options. (Or, at least, reducing the combinatorial explosion effect
>> for config options).
>>
>> Earlier this year when some patches were submitted to make the network
>> stack more configurable, there was some pushback, due (in part) to the
>> introduction of more kernel config options.
>> See http://thread.gmane.org/gmane.linux.kernel/1696910
>> I think it is reasonable to be concerned over the testability of myriad config
>> options.
>>
>> In the past, there have been efforts to curb the number of kernel config
>> options, but since we now stand at about 15,000 options throughout the
>> kernel, this seems like a battle we've mostly given up on.
>
> It'd be interesting to know how many of those options control the
> building of individual drivers or entire subsystems, and how many
> change kernel features in a non-trivial way. I suspect that the latter
> set grows much more slowly, and that latter set seems like the one we
> care about limiting.
>
>> I propose that we remove or hide a lot of the configuration options related
>> to size, and instead focus on size profiles. When someone wants to build a
>> minimal Linux system, they don't really want to manually trim down every
>> Linux sub-system. The more common development case is that they want
>> a fully minimal Linux system, except for one or two areas where they want
>> some flexibility in features. I propose that we tie most of the options that
>> are currently in the kernel for size reasons to a single or a few meta-options:
>> e.g. CONFIG_SMALL, CONFIG_TINY, CONFIG_RIDICULOUS. These
>> different meta-config options can get better testing, and this will help curb
>> the proliferation of size-related config options (and the resulting test
>> combination explosion for those individual options.)
>>
>> Note that this would be for sub-system related (feature or size) config options,
>> and not driver-related config options. Obviously, you have to have drivers
>> for the hardware you plan to run on.
>>
>> Optimally it would be nice to have the ability to configure a small system, and
>> then "back off" of the tiny config in a particular area (say networking).
>> I believe this would yield a much more tractable system for building small
>> systems with Linux, than the current situation.
>>
>> I'd like to discuss implementation ideas for this in the hallway track at KS.
>
> I'm interested in this as well, and I planned to raise the issue of
> configuration options as part of the tinification discussion.
>
> Size-constrained systems seem likely to start from the tiniest possible
> configuration, and incrementally add specific features they need. Given
> that, I do think we want the options for individual subsystems to look a
> lot less combinatorial and a lot closer to linear. Several subsystems
> could likely use a major pruning of options.
>
> However, I don't think a global set of meta-options or profiles
> necessarily makes sense; either we'll end up with a large number of
> meta-configurations, or we'll end up with "sample" configurations that
> few can use unmodified. We already have CONFIG_EMBEDDED for options
> that only exist for size purposes.
If we end up with a large number of meta-configuration options, that
would be a failure. In embedded, especially when fine-tuning for size,
there will likely be a need to modify the config slightly, but having
a starting point at the low end would be good.
>
> Can you elaborate a bit on the idea of "backing off" of the tiny
> configuration, and how that could work in practice? I don't see an
> obvious way to do that with today's Kconfig; what kinds of configuration
> enhancements do you have in mind?
Well, my ideas are not well-formed yet, but I envision something where
there's a global CONFIG_TINY flag, that causes size-related options
across all sub-systems to be configured to their "small" setting.
Then, I would like to see per-sub-system options to enable configuration
of individual options for that sub-system. So something
like CONFIG_NET_TINY_CONFIGURABLE (name to be improved), that when
set in combination with CONFIG_TINY, still allows individual
configuration options for networking. Developers would need to
realize that they are re-opening the combinatorial box when they
do this. (Note that the network maintainers might still want to limit
the configurability in their sub-system, due to e.g. readability,
maintenance and network compatibility issues).
The idea would be that when CONFIG_TINY is not set, the options for
configuring individual bits of networking would not be visible
in 'make menuconfig' (or to automated test tools), but when
CONFIG_TINY and CONFIG_NET_TINY_CONFIGURABLE are set, they would be.
-- Tim
next prev parent reply other threads:[~2014-08-14 16:30 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-13 17:29 Bird, Tim
2014-08-13 18:07 ` Guenter Roeck
2014-08-13 19:53 ` Geert Uytterhoeven
2014-08-13 22:45 ` Guenter Roeck
2014-08-14 0:14 ` Mark Brown
2014-08-14 0:38 ` Guenter Roeck
2014-08-14 15:33 ` Mark Brown
2014-08-14 7:49 ` Geert Uytterhoeven
2014-08-14 16:39 ` Mark Brown
2014-08-14 7:40 ` Geert Uytterhoeven
2014-08-14 8:50 ` Guenter Roeck
2014-08-14 9:02 ` Geert Uytterhoeven
2014-08-15 11:04 ` Guenter Roeck
2014-08-14 19:57 ` Stefan Hengelein
2014-08-13 19:19 ` josh
2014-08-14 16:30 ` Tim Bird [this message]
2014-08-14 17:17 ` Josh Triplett
2014-08-14 16:03 ` Christoph Lameter
2014-08-14 18:54 ` Jan Kara
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53ECE41B.6000707@sonymobile.com \
--to=tim.bird@sonymobile.com \
--cc=josh@joshtriplett.org \
--cc=ksummit-discuss@lists.linuxfoundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox