Here's a list of features that I think would be useful for the arm-soc(?) auto-builder/tester systems. This is a big pie-in-the-sky wish-list so I'm well aware that I'm asking someone to implement something useful and complex for me for free, and hence I may well not get want I want:-) Still, there are some fun ideas below, I hope!
* Per-build/test email distribution list.
If there is a change to e.g. the tegra_defconfig build status (first broken build, first successful build, etc.), I'd like to be emailed about this specifically, likely in a separate email. That way, I can filter these actionable messages separately from the general list content, so that I generally don't need to read most of the list messages, unless I'm notified of a specific problem.
This could be implemented by adding me to To:/Cc: on the existing messages in addition to sending them to the list, rather than sending a separate notification. However, this still means that I need to read through the whole email to find the specific issue that I'm interested in.
* Web-based UI, with history and filtering.
Email is very useful for notification of changes. However, if I want to quickly check the current status, or research historic build status, I find a web UI much easier. Some public examples that I use:
http://nvt.pwsan.com/experimental/linux-next/testlogs/
http://kisskb.ellerman.id.au/kisskb/matrix/ http://kisskb.ellerman.id.au/kisskb/config/338/
I'd love the ability to restrict the history so I can see just one architecture, compiler, defconfig, branch, board, test-case, or somewhat arbitrary combinations thereof. Perhaps throw HW configuration into the mix too (e.g. single-CPU vs. SMP vs. a specific core count, different RAM-size bands, presence of certain HW such as SPI flash, etc.)
* Archival of full build/test logs
Perhaps not so much for build problems, but it can be useful to have an entire console log for test failures. Preferably, these would all be linked from the web UI filtered history view.
* More test-cases
Boot test catches a lot of issues, but I'd love to run tests such as the following:
+ Reboot + Shutdown + System suspend/resume + CPU hotplug + check that cpuidle is activating + force cpufreq to min/max to check it works, or similar + dd from SD or eMMC, perhaps check for performance changes + Play audio, and at least check that it takes the right amount of time; doesn't hang or cause kernel oops. Perhaps also loop it back and validate that capture roughly approximates playback sound (e.g. FFT a sine wave or similar?) + Test I2C transactions (likely tested by playing audio on many systems, but some explicit i2cget's wouldn't hurt. + USB, e.g. lsusb, ping over a USB NIC, dd from USB mass storage? + hexdump an SPI flash, validate against expected content. Perhaps do a write test too on a specific flash region? + Verify HDMI signal is generated. Perhaps use xrandr/... to test changing video modes + Test WiFi, Bluetooth connectivity + Test PCIe devices are detected, and work + crypto driver tests + kexec
I run all of those manually sometimes. Some more often than others. Not often enough though in many cases! It'd be awesome if they ran automatically e.g. nightly, or on every commit.
I would love each test to be a standalone script file that developers could just check out from git and run themselves to reproduce problems, without having to set up their build/target systems identically to the auto-build/test systems. Hopefully they would report status in a standard way to ease integration into the test framework.
Some ability to run a stress-test (manually, automatically but less often?) to weed out problems that happen with low frequency.
* Automated bisect
If a build or test fails, bisect to find the problematic commit, automatically, and email people about the result.
* "Virtual" submissions
Send the system a git URL, and have it run the same set of builds/tests as it would if those commits appeared in a branch it usually tested automatically. Very useful for testing something across a range of HW before sending it or applying it, so problems can be caught early rather than once something is in linux-next.
A command-line or email-based interface to do this, for ease-of-use, perhaps in addition to a web form, which would probably lower the barrier to usage for some people.
There may be some security issues here re: letting arbitrary people compile/run kernel code on the test systems. Implementing ACLs would probably be annoying. Perhaps branches would have to be pushed to some git server, which would implement the ACLs? Say, trust all kernel.org repos?
* Packaged project
The ability to install the system locally, e.g.:
+ My own system can run tests that the main system might not be so interested in. This way, I get to use the same test infra-structure for everything, to avoid duplicating it.
+ My system could run extreme levels of stress testing.
+ My system could be more open in who I accept "virtual" submissions from for Tegra HW (e.g anyone @nvidia.com or using specific internal git servers/branches perhaps).
+ My system can use boards that aren't available to the main system, or that the main system isn't interested in. This will give me more coverage. For example, I could test every single Tegra board to enable extreme paranoia, rather than a representative sample in the main system.
* Apply similar testing to U-Boot, other relevant bootloader, or other useful projects!
* The human and computer resources to back this up
Implementing much of the above is a lot of work to code, and support. It'll require quite a bit of HW to run on.
(Note that this not a comment on the current arm-soc builder or other public systems I linked to above, but some internal system...)
Hi,
On Mon, Sep 16, 2013 at 11:06 AM, Stephen Warren swarren@wwwdotorg.org wrote:
- The human and computer resources to back this up
Implementing much of the above is a lot of work to code, and support. It'll require quite a bit of HW to run on.
(Note that this not a comment on the current arm-soc builder or other public systems I linked to above, but some internal system...)
You provide a good written-down wishlist, and it's actually nearly identical to what my non-written down is w.r.t. features.
For example, I had a web interface going last year, with a distributed build environment. Turns out I had to redo it because it ate up the free quota of appengine resources very quickly due to the way I saved the logs, but it's definitely doable.
To be honest, the current state of things is that I built a service for myself that I wanted to see (the autobuilder and autobooter), and started emailing out the results to me and Kevin. He created the list for his equivalent testing, and I started cc:ing that as well. I'm happy to help out with doing a lot of this feature work but I don't have nearly enough cycles to do much of it -- I'm already short on hours in the day between Chrome OS work, upstream maintainership and this.
There's some security aspects that haven't been solved yet either. Right now I build linux-next and other source trees on a machine on my home network without isolating it. Getting some evil code into linux-next wouldn't be impossible, and from there on someone could get into my network. I need to isolate it more.
My next steps, besides some rewriting of my scripts to be more scalable and secure, is to add more testing on the host. Your list there summarizes what I had in mind pretty closely as well. I don't know if I'll be able to upload a Docker image for the work I'm doing, but if I or someone else can that could be a good way to deliver a "packaged" version of this for easy bootstrapping, since it could have all the toolchains and everything setup.
I suspect the resource and time problem is going to be the biggest hurdle. Linaro seems to be in a different spot w.r.t. what they want to do with testing, and their agenda does not align with the community in these aspects. So it'll come down to best efforts from people out there.
I've said I'm willing to add hardware to my setup if vendors want to send it to me, and I've had several who already sent hardware: Atmel SAMA5, Beaglebone Black, Nvidia Tegra Beaver, SolidRun Cubox, Allwinner A31, Cubieboard2 hardware is all provided by vendors -- thanks! The rest I've bought or ended up with from other sources.
-Olof
Olof,
On Mon, 16 Sep 2013 11:23:42 -0700, Olof Johansson wrote:
I've said I'm willing to add hardware to my setup if vendors want to send it to me, and I've had several who already sent hardware: Atmel SAMA5, Beaglebone Black, Nvidia Tegra Beaver, SolidRun Cubox, Allwinner A31, Cubieboard2 hardware is all provided by vendors -- thanks! The rest I've bought or ended up with from other sources.
Maxime is on its way to the US for Plumbers, and I've given him an Armada 370 based Mirabox to give to Kevin Hilman to add to his test farm.
I can quite probably also arrange an Armada XP based OpenBlocks board to be shipped to one of you (Kevin or Olof, who takes it?). Until now, even though you had a test farm, I was a bit reluctant to do so because the build/boot results were not publicly visible. Now that they are, it is much easier I believe to convince board manufacturers that they should give away hardware platforms to be tested.
Generally speaking, since the build/boot results are now public, I'll try to make sure that Marvell EBU hardware is decently represented in those farms :)
Best regards,
Thomas
On Mon, Sep 16, 2013 at 11:41 AM, Thomas Petazzoni thomas.petazzoni@free-electrons.com wrote:
Olof,
On Mon, 16 Sep 2013 11:23:42 -0700, Olof Johansson wrote:
I've said I'm willing to add hardware to my setup if vendors want to send it to me, and I've had several who already sent hardware: Atmel SAMA5, Beaglebone Black, Nvidia Tegra Beaver, SolidRun Cubox, Allwinner A31, Cubieboard2 hardware is all provided by vendors -- thanks! The rest I've bought or ended up with from other sources.
Maxime is on its way to the US for Plumbers, and I've given him an Armada 370 based Mirabox to give to Kevin Hilman to add to his test farm.
I ordered one myself yesterday too; given the recent discovery of breakage through non-bisectable submissions through different trees I want one catch those kind of things early on myself instead of after the merge window. :)
I can quite probably also arrange an Armada XP based OpenBlocks board to be shipped to one of you (Kevin or Olof, who takes it?). Until now, even though you had a test farm, I was a bit reluctant to do so because the build/boot results were not publicly visible. Now that they are, it is much easier I believe to convince board manufacturers that they should give away hardware platforms to be tested.
Generally speaking, since the build/boot results are now public, I'll try to make sure that Marvell EBU hardware is decently represented in those farms :)
Cool, that's appreciated.
-Olof
On Mon, Sep 16, 2013 at 11:06 AM, Stephen Warren swarren@wwwdotorg.org wrote:
Here's a list of features that I think would be useful for the arm-soc(?) auto-builder/tester systems. This is a big pie-in-the-sky wish-list so I'm well aware that I'm asking someone to implement something useful and complex for me for free, and hence I may well not get want I want:-) Still, there are some fun ideas below, I hope!
These are all great ideas, and pretty much aligns with my own feature list. Unfortunately, like you said, doing this requires some full-time work for awhile (and personally, I don't want to write test frameworks full time.)
The long term goal (for me) is to have Linaro's test infrastructure (LAVA) do all this, where there are development resources and hardware resources do do broad testing. Currently, Linaro's test priorities have not been aligned with our upstream needs for arm-socl (which is why we ended up doing it ourselves) but there are some good signs that may be changing. Linaro has the infrastructure and building blocks to do most of whats on our collective wishlist, it just needs to become a priority.
Kevin
kernel-build-reports@lists.linaro.org