On Wed, 2022-10-26 at 13:21 -0400, Sean Anderson wrote: > On 10/26/22 13:00, Richard Purdie wrote: > > On Wed, 2022-10-26 at 12:49 -0400, Sean Anderson wrote: > > > On 10/26/22 10:08, Richard Purdie wrote: > > > > This looks like a pretty nice improvement, I've been worried about how > > > > entangled all this was becoming. Is there anything better we could do > > > > with testing of this code? We rely increasingly on the tests to spot > > > > regressions and I doubt the testcases we have cover the code > > > > complexity. > > > > > > FWIW, I found the test suite to be fairly helpful when debugging this > > > whole process, if agonizingly slow. I found many bugs in my initial > > > implementation which were uncovered by the test suites, > > > > > > The best way to extend the test suite would probably be to have QEMU try > > > to boot using the Linux and U-Boot. This would help cases where all the > > > artifacts are created correctly but e.g. the wrong U-Boot is packaged. > > > However, I am rather loathe to add more test cases like this, because it > > > already takes around 10 minutes (with sstate!) to run the tests. This > > > basically kills the speed of iterative development. > > > > Out of interest how were you running the tests? Did you look at the > > parallelism options? Were you just running specific tests or specific > > suites of tests? > > As noted in the cover letter, I ran > > oe-selftest -r fitimage.FitImageTests
Ok, good. That at least means you were only running one class of tests. I was worried you were running all of them! > I also tried using -j$(nproc), but I saw no increase in parallelism > outside of the usual for bitbake. This was especially noticable for > do_rootfs, which is single-threaded. Sadly the parallelism works on a per test class basis so it wouldn't help in this case. There are only small marginal gains from running tests in individual build directories so we don't do that. > This is ommitted above, but I *had* to use -j1 in order to avoid > manually wiping out my existing build directory each time (and instead > ending up with dozens of pid-named directories). This is documented > nowhere, and I found it in some old IRC logs. Parallelism using differently named build directories is an implementation detail, not something which the -j option implies. I guess you were also using --keep-builddir and could have used the -B option with $PID or similar for the same effect. We could document that? > > I do think we need something like you describe and adding a linux+uboot > > approach is something I've wanted to do for a long time. Usually the > > time is taken on our automated CI rather than impacting users, unless > > they're working in that area at which point the tests are hopefully > > helpful. > > Which of course provides no incentive to reduce runtime. Most of the tests do use our standard tasks so there is as much incentive to optimise do_rootfs as there would be otherwise :/. > > We haven't really had anyone try and optimise the tests either, I'm > > sure there will be things in there which can help. Please don't let the > > speed put you off trying to improve things and extend our coverage! > > The poor speed of these self tests (and of everything related to the > yocto project in general) makes this project frustrating to contribute > to. It took me around 2 days to go from my prototype to this series, > most of which was spent waiting for tests to compile and losing whatever > train of thought I had. I probably went through perhaps 20 revisions. If > I was working on e.g. U-Boot, I could have made 20 revisions in 2 hours, > as it takes around 15 seconds to recompile it and run the full unit test > suite. > > On the topic of these specific tests, part of the problem is that > do_rootfs is a bottleneck which takes around 45-60s on my system. Every > test which modifies something in the rootfs incurs this overhead. For better or worse we've 'a few' more moving pieces than U-Boot. Building a root filesystem from packages is a non-trivial task, taking under a minute is in some ways pretty good already. The only other thing we could do is incremental rootfs construction where it would add/remove changed packages. I'd worry that the result may not always be equal to a build from scratch and it might cause weird and interesting reproducibility problems (particularly when you consider things like postinsts). I would love to improve our development "iteration" time but I'm struggling to see where we could get the speed gains from :(. Open to other ideas... Cheers, Richard
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#172257): https://lists.openembedded.org/g/openembedded-core/message/172257 Mute This Topic: https://lists.openembedded.org/mt/94487631/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-