From: "?ukasz Majewski" <lukma@denx.de>
To: "Nathan Rossi" <nathan@nathanrossi.com>
Cc: Richard Purdie <richard.purdie@linuxfoundation.org>,
Khem Raj <raj.khem@gmail.com>,
Patches and discussions about the oe-core layer
<openembedded-core@lists.openembedded.org>,
Adhemerval Zanella <adhemerval.zanella@linaro.org>
Subject: Re: [OE-core] [PATCH 2/2] glibc: ptest: Add support for running glibc test suite with ptest
Date: Fri, 27 Aug 2021 16:19:48 +0200 [thread overview]
Message-ID: <20210827161948.23c3b542@ktm> (raw)
In-Reply-To: <CA+aJhH1thPb_SuCcQHg3AF3QyaRTPNY=iod-oR0tm_Qta82wuw@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 14631 bytes --]
Hi Nathan,
> On Fri, 27 Aug 2021 at 19:20, Lukasz Majewski <lukma@denx.de> wrote:
> >
> > Hi Nathan,
> >
> > > On Thu, 26 Aug 2021 at 23:38, Richard Purdie
> > > <richard.purdie@linuxfoundation.org> wrote:
> > > >
> > > > On Thu, 2021-08-26 at 14:27 +0200, Lukasz Majewski wrote:
> > > > > Hi Richard, Khem,
> > > > >
> > > > > > Hi Richard,
> > > > > >
> > > > > > > On Tue, 2021-08-24 at 09:36 +0200, ?ukasz Majewski wrote:
> > > > > > >
> > > > > > > > Hi Khem,
> > > > > > > >
> > > > > > > > > On Mon, Aug 23, 2021 at 1:09 PM Lukasz Majewski
> > > > > > > > > <lukma@denx.de> wrote:
> > > > > > > > > >
> > > > > > > > > > On Mon, 23 Aug 2021 12:52:44 -0700
> > > > > > > > > > Khem Raj <raj.khem@gmail.com> wrote:
> > > > > > > > > >
> > > > > > > > > > > On Mon, Aug 23, 2021 at 11:24 AM Lukasz Majewski
> > > > > > > > > > > <lukma@denx.de> wrote:
> > > > > > > > > > >
> > > > > > > > > > > > Hi Khem,
> > > > > > > > > > > >
> > > > > > > > > > > > > On 8/23/21 8:08 AM, ?ukasz Majewski wrote:
> > > > > > > > > > > > > > This patch introduces new recipe - namely
> > > > > > > > > > > > > > 'glibc-tests', which builds and installs
> > > > > > > > > > > > > > glibc test suite to OE/Yocto built image.
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > It reuses code from already available
> > > > > > > > > > > > > > 'glibc-testsuite' recipe, which is run with
> > > > > > > > > > > > > > 'bitbake glibc-testsuite -c check' and uses
> > > > > > > > > > > > > > qemu to execute remotely (via SSH) tests on
> > > > > > > > > > > > > > some emulated machine.
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > This recipe installs eligible tests on some
> > > > > > > > > > > > > > rootfs image. Afterwards, either all of
> > > > > > > > > > > > > > them or only time related subset, those
> > > > > > > > > > > > > > tests can be executed on the real hardware,
> > > > > > > > > > > > > > to facilitate validation of this platform
> > > > > > > > > > > > > > with for example Y2038 problem compliance.
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > By default all tests are executed, with
> > > > > > > > > > > > > > 'ptest-runner glibc-tests'. To test only
> > > > > > > > > > > > > > time related subset - one needs to call: cd
> > > > > > > > > > > > > > /usr/lib/glibc-tests/ptest/; rm run-ptest;
> > > > > > > > > > > > > > \ ln -s run-ptest-time run-ptest; cd -;
> > > > > > > > > > > > > > ptest-runner glibc-tests
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > To facilitate debugging, source files are
> > > > > > > > > > > > > > provided by default with the unstripped
> > > > > > > > > > > > > > debugging symbols. Such approach would
> > > > > > > > > > > > > > reduce the already complex recipe (as it
> > > > > > > > > > > > > > inherits base glibc one), so there is no
> > > > > > > > > > > > > > need to also install *-dbg and *-src
> > > > > > > > > > > > > > packages.
> > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > > > > does it have to be a separate recipe I wonder
> > > > > > > > > > > > > if we can have it built as part of glibc
> > > > > > > > > > > > > itself controlled via ptest knob
> > > > > > > > > > > >
> > > > > > > > > > > > I've followed the glibc-testsuite recipe to
> > > > > > > > > > > > provide tests for ptest. Test creation is
> > > > > > > > > > > > similar to it, but doesn't require QEMU run
> > > > > > > > > > > > (tests are executed on the HW).
> > > > > > > > > > > >
> > > > > > > > > > > > Another rationale was to have some kind of
> > > > > > > > > > > > "features" separation in different file (liked
> > > > > > > > > > > > glibc-mtrace), which is easier to maintain and
> > > > > > > > > > > > review.
> > > > > > > > > > > >
> > > > > > > > > > > > Last but not least - separate recipe (and built
> > > > > > > > > > > > binaries) allow some kind of magic with
> > > > > > > > > > > > selection of used test programs (this may be
> > > > > > > > > > > > useful if one would like to have different sets
> > > > > > > > > > > > of tests in different packages)
> > > > > > > > > > >
> > > > > > > > > > > That’s seems ok I think the names are quite
> > > > > > > > > > > confusing now not that it was not so much better
> > > > > > > > > > > before but now we have glibc-tests and
> > > > > > > > > > > glibc-testsuites which do same things but in very
> > > > > > > > > > > different way maybe glibc-testsuite should be
> > > > > > > > > > > renamed to something like glibc-tests-crosd or
> > > > > > > > > > > some such
> > > > > > > > > >
> > > > > > > > > > I think that glibc-testsuite_2.34.bb shall be
> > > > > > > > > > renamed to glibc-tests-qemu_2.34.bb as it is more
> > > > > > > > > > descriptive.
> > > > > > > > >
> > > > > > > > > is it only runnable in qemu ? I thought we could use a
> > > > > > > > > read board as well with IP address
> > > > > > > >
> > > > > > > > It looks like by default the QEMU is used in this
> > > > > > > > recipe.
> > > > > > > >
> > > > > > > > This recipe provides custom check-test-wrapper, which
> > > > > > > > can log into remote board via ssh (when
> > > > > > > > TOOLCHAIN_TEST_TARGET = "ssh").
> > > > > > > >
> > > > > > > > This looks a bit awkward for me, as the goal would be to
> > > > > > > > run built tests on target (exact) HW without the need of
> > > > > > > > SSH.
> > > > > > > >
> > > > > > > > It is also easier to debug the code with the real HW.
> > > > > > >
> > > > > > > I'm a bit worried we're going around in circles with
> > > > > > > this. We did have a different form of tests a while back
> > > > > > > but I was told those didn't work well and they were
> > > > > > > replaced with the current setup which worked with the
> > > > > > > driver in the glibc source code.
> > > > > >
> > > > > > I've looked into the glibc-testing.inc from SHA1:
> > > > > > 0a42ae7f7ca8fcebe4630b701e50e2352f9b7c3b
> > > > > >
> > > > > > There glibc tests were built and copied on the target via
> > > > > > NFS.
> > > > > > > This was done around
> > > > > > > the time we added support for the other toolchain test
> > > > > > > suites (binutils+gcc).
> > > > > >
> > > > > > I'm not familiar with the "binutils+gcc" issue, which was
> > > > > > solved in the past. Could you share any reference?
> > > > > >
> > > > > > > We ended up with options to use full system qemu or
> > > > > > > user mode qemu emulation depending on the speed of the
> > > > > > > target (e.g. with kvm or not).
> > > > > >
> > > > > > From what I see in the recipe - you either run user mode
> > > > > > QEMU by default (at least when I do run it):
> > > > > >
> > > > > > NOTE: make PARALLELMFLAGS=-j 8 SHELL=/bin/bash -i
> > > > > > QEMU_SYSROOT=/home/lukma/work/yocto/y2038/build/tmp/work/armv7at2hf-neon-poky-linux-gnueabi/glibc-testsuite/2.34-r0/recipe-sysroot
> > > > > > QEMU_OPTIONS=qemu-arm -r 5.1.0 SSH_HOST=localhost SSH_HOS
> > > > > > T_USER=root SSH_HOST_PORT=2222
> > > > > > test-wrapper=/home/lukma/work/yocto/y2038/build/tmp/work/armv7at2hf-neon-poky-linux-gnueabi/glibc-testsuite/2.34-r0/check-test-wrapper
> > > > > > user check
> > > > > >
> > > > > > Or you log to the board via SSH (the 'ssh' mode).
> > > > > >
> > > > > > >
> > > > > > > Has this patchset been run with all the tests in glibc or
> > > > > > > just a subset?
> > > > > >
> > > > > > This patch set allows running all tests [*], or (preferably
> > > > > > in my use case) only a time related ones. The latter is to
> > > > > > validate Y2038 code, which testing has two issues:
> > > > > >
> > > > > > 1. It cannot be tested with QEMU user mode [1]. Instead
> > > > > > "linux timespaces" were suggested, but it lacks support for
> > > > > > CLOCK_REALTIME manipulation for those tests [2].
> > >
> > > So just a note, the qemu user mode testing is not a complete
> > > solution. There are a number of problems with it, but in general
> > > it is still quite useful for validating general functionally,
> > > especially when implementing a new platform.
> >
> > +1
> >
> > > A big one is due to the ability to run
> > > tests in parallel with user mode, it easily reduces test run
> > > times by an order of magnitude (compared to qemu system, which
> > > for some platforms is faster than real hardware).
> >
> > +1
> >
> > >
> > > The reason why qemu user mode is the default behaviour is because
> > > running "bitbake glibc-testsuite -c check" will work without any
> > > external dependencies (the remote machine, NFS/sshfs, etc.).
> >
> > +1
> >
> > >
> > > > > >
> > > > > > 2. Testing with SSH is possible, but is not as robust as
> > > > > > expected (i.e. imposes SSHD on the target board, and ETH
> > > > > > connection).
> > > > > > >
> > > > > > > I'm always very nervous about having two ways to do
> > > > > > > similar things.
> > > > > >
> > > > > > Technically, I just reuse the glibc-testsuite_2.34.bb to the
> > > > > > point where tests are _only_ built. Then I pack those
> > > > > > binaries and install on the target's rootfs to be run with
> > > > > > ptest framework.
> > >
> > > So it appears the make variable "run-built-tests" excludes the
> > > building of some tests.
> >
> > As fair as I remember, the 'run-built-tests=no' switch tells the
> > glibc build system to not execute built tests.
> >
> > > So I am not sure if the complete test suite
> > > can be built in this way.
> >
> > I'm pretty sure that all tests required for 'check' are build.
>
> If you look at some of the Makefiles in glibc, it conditionally
> includes/excludes some tests from being built based on the value of
> run-built-tests. For example:
>
> https://sourceware.org/git/?p=glibc.git;a=blob;f=localedata/Makefile;h=f585e0dd4115a99493e843aeed464090da19665f;hb=HEAD#l141
>
I see. Thanks for pointing this out.
> >
> > > Though I can see some value in having the
> > > glibc-testsuite recipe being able to only build the tests for
> > > development purposes (e.g. TOOLCHAIN_TEST_TARGET = "build"?).
> > >
> > > When I had implemented the testsuite recipe the glibc testsuite
> > > relied quite heavily on the environment it was built and run in,
> > > in particular around configuration. That is probably still an
> > > issue.
> >
> > Indeed, some (a few?) tests rely on the build environment in which
> > they were build. I do personally, regard this as a some kind of a
> > bug. I do believe, that when you build test for a particular
> > version of glibc (2.34 in this case), one shall expect that it can
> > be run only by linking the proper library.
> >
> > This is the case for "time" related tests. On my test system with
> > this patch applied, all of them are executed with no errors. Those
> > are self contained.
> >
> > >
> > > It would be interesting to know how much of the test suite can be
> > > run/passes and how that compares to the results of existing
> > > system/user emulation with cross execution using the glibc
> > > makefile.
> >
> > I can provide exact numbers when I finish porting more Y2038 related
> > patches to newest glibc -master.
>
> Also something to keep in mind is that sometimes the pass/fail of the
> test binary is not what is being validated by the test. For example
> this test uses mtrace, and compares the results of the output mtrace
> file, not the test itself.
>
> https://sourceware.org/git/?p=glibc.git;a=blob;f=localedata/Makefile;h=f585e0dd4115a99493e843aeed464090da19665f;hb=HEAD#l462
>
Ok. I see.
My main objective is to use time related programs, which rely on the
interfaces provided by the kernel.
From the above POV, those tests are a "standalone" ones.
> Regards,
> Nathan
>
> >
> > >
> > > > > >
> > > > > > Such approach has several advantages:
> > > > > >
> > > > > > - No need for SSH (which can hang, as you need sshfs in user
> > > > > > space for the setup)
> > >
> > > I had not tested with sshfs that likely has quite low
> > > performance, the OEQA tests rely on NFS for QEMU system emulation
> > > and that is what I had been using for hardware testing.
> >
> > I had some issues with NFS - either I couldn't place some OE/Yocto
> > build directory in it or glibc's build directory was not working
> > with it correctly.
> >
> > That was why I had to use the sshfs instead, which is _really_ slow
> > and often breaks.
> >
> > > However it would be interesting
> > > to see if virtiofs could improve the performance for testing with
> > > QEMU system emulation.
> > >
> > > > > >
> > > > > > - Run on the real HW (and environment) with the same
> > > > > > version of glibc on the real target.
> > > > > >
> > > > > > - Sources and debugging symbols available on the target, so
> > > > > > easier GDB debugging.
> > > > > >
> > > > > > - Using ptest framework to execute tests
> > > > > >
> > > > > > - Time related tests are "self contained", so could be
> > > > > > executed without built data.
> > > > > >
> > > > > > At least for Y2038 validation such approach seems more
> > > > > > appealing.
> > > > >
> > > > > Do you have any more feedback regarding this patch?
> > > >
> > > > We're at feature freeze and this wasn't a planned change so it
> > > > is too late for this release cycle, I'm struggling with the
> > > > things that were planned.
> > > >
> > > > I need to spend some time looking at what the other code is
> > > > doing and how we're using it on the autobuilder and whether we
> > > > want to change to use the ptest approach or not.
> > > >
> > > > I added Nathan Rossi to cc since he worked on the other code for
> > > > this and may have more insight.
> > >
> > > Thanks for cc'ing, I somehow managed to miss the thread.
> > >
> > > Regards,
> > > Nathan
> >
> >
> > Best regards,
> >
> > Lukasz Majewski
> >
> > --
> >
> > DENX Software Engineering GmbH, Managing Director: Wolfgang
> > Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell,
> > Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email:
> > lukma@denx.de
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 499 bytes --]
prev parent reply other threads:[~2021-08-27 14:19 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-23 15:08 [PATCH 1/2] glibc: Exclude common code to build tests to glibc-tests.inc ?ukasz Majewski
2021-08-23 15:08 ` [PATCH 2/2] glibc: ptest: Add support for running glibc test suite with ptest ?ukasz Majewski
2021-08-23 16:17 ` [OE-core] " Khem Raj
2021-08-23 18:24 ` ?ukasz Majewski
2021-08-23 19:52 ` Khem Raj
2021-08-23 20:09 ` ?ukasz Majewski
2021-08-23 20:41 ` Khem Raj
2021-08-24 7:36 ` ?ukasz Majewski
2021-08-24 7:41 ` Richard Purdie
2021-08-24 8:42 ` ?ukasz Majewski
2021-08-26 12:27 ` ?ukasz Majewski
2021-08-26 13:38 ` Richard Purdie
2021-08-26 14:12 ` ?ukasz Majewski
2021-08-26 16:25 ` Richard Purdie
2021-08-27 7:52 ` Nathan Rossi
2021-08-27 9:20 ` ?ukasz Majewski
2021-08-27 11:29 ` Nathan Rossi
2021-08-27 14:19 ` ?ukasz Majewski [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210827161948.23c3b542@ktm \
--to=lukma@denx.de \
--cc=adhemerval.zanella@linaro.org \
--cc=nathan@nathanrossi.com \
--cc=openembedded-core@lists.openembedded.org \
--cc=raj.khem@gmail.com \
--cc=richard.purdie@linuxfoundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox