Fathi Boudra <fathi.bou...@linaro.org> writes:

> On 18 May 2013 04:06, Kevin Hilman <khil...@linaro.org> wrote:
>> Fathi Boudra <fathi.bou...@linaro.org> writes:
>>
>> [...]
>>
>>>> Is there a way for us (linaro folks) to see more of the Jenkins setup
>>>> for these jobs (including the scripts.) There appears to be some useful
>>>> add-ons being used.  Read-only access to the detailed configuration of
>>>> the jenkins jobs would be very useful.
>>>
>>> You've got access and can even view/modify the set up.
>>> I used a multi-configuration project for these jobs.
>>> If you have more questions, just ask.
>>
>> Now that I have permission on linaro jenkins, I started experimenting
>> with trying to get something useful for ARM maintainers, and I created a
>> basic job[1] for building all ARM defconfigs (120+) in linux-next.
>>
>> This is a simple build-only job. No downloading toolchains, ubuntu
>> packaging, lava testing, etc. etc like the other Linaro CI jobs.
>
> It will be great if we can keep using latest Linaro GCC. We copy a
> tarball from the master to slave and extract it only once, it's taking
> less than a minute on the full build time.

OK.

> We probably want to keep the boot testing part optional, there's
> several options to implement, without impacting the main build testing
> job. IMO, to investigate.

Yes, the build, packaging, boot test, etc. should all be separate jobs
that are independent, but could be chained together as needed.

>> Just kernel builds, and output that should make sense to kernel developers.
>> IMO, this is the starting point to having some basic sanity testing for
>> maintainers.
>>
>> I have several questions (and suggestions) now on how to speed this up
>> based on configuration of the slaves, as well as several questions
>> around best practice for using the slaves, how workspaces/tools/scripts
>> are (or aren't) shared between slaves, etc.
>>
>> The first suggestion is to speed up the git clones/fetches.  Even a
>> shallow git clone (--depth=1) is taking > 3 minutes on the slaves.  What
>> I do on my home jenkins box is to have a local repo (periodically
>> updated via cron), and then use the advanced options under jenkins git
>> SCM config to point to it using the "Path of the reference repo to use
>> during clone" option.  That makes the git clones/fetches very fast since
>> they're (almost) always from a local repo.
>
> The difference between the slaves and your home box is that the slaves
> are ephemeral instances (terminated after a defined timeout) while
> your box is always up.
> We'll need to move to a persistent slave (stopped instead of
> terminated), opening the door to proper caching (local mirror).

Yes, that sounds better.  I'll be glad to test.

> We have such set up for OpenEmbedded builds and other tricks in our
> toolbox for Android builds.
>
>> Another suggestion is to have ccache installed on the slaves.  Since
>> this job is building much of the same code over and over (120+
>> defconfigs), ccache would dramatically speed this up, and probably make
>> it more sensible to run all the builds sequentially on the same slave.
>
> ccache is already installed but due to the ephemeral property of
> current instances, it isn't exploited. Once again, moving to
> persistent slave will resolve the issue.

OK

> Also, the EC2 instances aren't I/O optimized. 

Yes, I've definitely noticed that.  

Here's a quick comparison of my home build box (6 x i7, 16G RAM)
compared to the linaro build slaves.  Build times in seconds:

                     mine  linaro
allnoconfig           18   128
exynos4_defconfig     32   201
imx_v6_v7_defconfig   72   703 
omap2plus_defconfig   100  ?

That's roughly a 10x difference, and that's only comparing the build
time, not the time it takes for the git clone, toolchain copy/unpack, etc.

However, with all parallel builds due to the slaves, all 120+ defconfigs
still finish quicker on the slaves than my single box at home.

> On some jobs, I create a tmpfs directory where I build. It reduces
> dramatically build time.

Do you have some examples of how to do that as a normal jenkins user?

I see there's a /run directory on the slaves mounted as a tmpfs but it's
only 1.5G and only root accessible.

I'd be willing to run some experiments with a local tmpfs.  I'm sure
that will make a huge difference.

Kevin

_______________________________________________
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev

Reply via email to