Thread (3 messages) 3 messages, 3 authors, 2010-07-13

Re: optimized script [Was: ARM defconfig files]

From: Olof Johansson <hidden>
Date: 2010-07-13 18:10:56
Also in: linux-arm-kernel, linux-arm-msm, linux-omap, lkml

On Tue, Jul 13, 2010 at 10:07:05AM +0200, Uwe Kleine-König wrote:
Hello,

On Tue, Jul 13, 2010 at 09:07:41AM +0200, Uwe Kleine-König wrote:
quoted
Hi

On Mon, Jul 12, 2010 at 01:50:47PM -0600, Grant Likely wrote:
quoted
On Mon, Jul 12, 2010 at 1:34 PM, Linus Torvalds
[off-list ref] wrote:
quoted
On Mon, Jul 12, 2010 at 12:17 PM, Nicolas Pitre [off-list ref] wrote:
quoted
I think Uwe could provide his script and add it to the kernel tree.
Then all architectures could benefit from it.  Having the defconfig
files contain only those options which are different from the defaults
is certainly more readable, even on x86.
Quite possible. But maintainers would need to be on the lookout of
people actually using the script, and refusing to apply patches that
re-introduce the whole big thing.
I can (partially) speak for powerpc.  If ARM uses this approach, then
I think we can do the same.  After the defconfigs are trimmed, I
certainly won't pick up any more full defconfigs.
I just restarted my script on the powerpc defconfigs basing on rc5, I
assume they complete in a few days time.
So Stephen was faster than me.  I don't know yet how he optimised my
script, meanwhile I put some efforts into it, too by just checking lines
that match "^(# )?CONFIG_".

Find it attached.

I will start to reduce the remaining configs (i.e. all but arm and
powerpc).
I added just a simple heuristic: If I could remove a line, I attempted
to remove twice the amount next time around (and fall back to 1 if it failed).

I.e. main loop:

i = 0
lines = 1

while i < len(config):
    print 'test for %r + %d' % (config[i], lines)
    defconfig = open(defconfig_src, 'w')
    defconfig.writelines(config[:i])
    defconfig.writelines(config[i + lines:])
    defconfig.close()
    subprocess.check_call(['make', '-s', 'ARCH=%s' % arch, target])
    if os.stat('.config').st_size == config_size and list(open('.config')) == origconfig:
        del config[i:i+lines]
        lines *= 2
    else:
        if lines > 1:
            lines = 1
        else:
            i += 1


I didn't measure what the actual improvement was, but I saw a fair amount
of 2/4/8-attempts passing, so I let it run. Stephen beat me to posting
the resulting patch though. :P

While this script is great, it is somewhat painful to run given that it
attempts one config per line. Even on a fast machine that tends to take
a while.


-Olof
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help