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