[PATCH] kselftest/arm64: Add coresight test
Jeremy Szu
jszu at nvidia.com
Fri Jul 19 03:21:54 PDT 2024
James Clark 於 7/17/24 10:48 PM 寫道:
>
>
> On 16/07/2024 3:06 am, Jeremy Szu wrote:
>> Hi James,
>>
>> Thank you for your reply.
>>
>> James Clark 於 7/12/24 5:01 PM 寫道:
>>>
>>>
>>> On 11/07/2024 7:03 pm, Catalin Marinas wrote:
>>>> On Wed, Jul 10, 2024 at 02:27:32PM +0800, Jeremy Szu wrote:
>>>>> Add a script to test the coresight functionalities by performing the
>>>>> perf test 'coresight'.
>>>>>
>>>>> The script checks the prerequisites and launches a bundle of
>>>>> Coresight-related tests with a 180-second timeout.
>>>>>
>>>
>>> Hi Jeremy,
>>>
>>> On the whole I'm not sure running the Perf tests under kself tests is
>>> a good fit. We're already running all the Perf tests in various CIs,
>>> so this is going to duplicate effort. Especially with setup and
>>> parsing of the results output.
>>>
>>> There is also no clean line between what's a kernel issue and whats a
>>> Perf issue when these fail.
>>>
>>> And thirdly why only run the Coresight tests? Most of the Perf tests
>>> test some part of the kernel, so if we were going to do this I think
>>> it would make sense to make some kind of proper harness and run them
>>> all. I have some recollection that someone said it might be something
>>> we could do, but I can't remember the discussion.
>>
>> The idea I'm trying to pursue is to use arm64 kselftest to run as many
>> test cases as possible for ARM SoCs across different designs and
>> distros. I believe it could provide an alert if there is an issue,
>> whether it originates from userspace or kernel, similar to how perf is
>> used in other categories.
>>
>> I'm not sure if all perf tests could be counted in soc
>> (selftests/arm64) category such as some tests may target to storage,
>> memory or devices. I
>
> Could we not put the Perf tests in .../selftests/perf.sh, then it
> doesn't really matter which subsystem they're targeting and we can run
> all the Perf tests?
>
The .../sefltests/ seems for the kselftest framework only, not sure if
having a new .../selftests/perf will make more sense?
>> could replace 'arm64/coresight' with 'arm64/perf' if it makes more
>> sense. I believe it could help users verify functionality more
>> conveniently.
>>
>>>
>>> Ignoring the main issue above I've left some comments about this
>>> patch inline below:
>>>
>>>>> Signed-off-by: Jeremy Szu <jszu at nvidia.com>
>>>>
>>>> I have not idea how to test coresight, so adding Suzuki as well.
>>>>
>>>>> ---
>>>>> tools/testing/selftests/arm64/Makefile | 2 +-
>>>>> .../selftests/arm64/coresight/Makefile | 5 +++
>>>>> .../selftests/arm64/coresight/coresight.sh | 40
>>>>> +++++++++++++++++++
>>>>> .../selftests/arm64/coresight/settings | 1 +
>>>>> 4 files changed, 47 insertions(+), 1 deletion(-)
>>>>> create mode 100644 tools/testing/selftests/arm64/coresight/Makefile
>>>>> create mode 100755
>>>>> tools/testing/selftests/arm64/coresight/coresight.sh
>>>>> create mode 100644 tools/testing/selftests/arm64/coresight/settings
>>>>>
>>>>> diff --git a/tools/testing/selftests/arm64/Makefile
>>>>> b/tools/testing/selftests/arm64/Makefile
>>>>> index 28b93cab8c0dd..2b788d7bab22d 100644
>>>>> --- a/tools/testing/selftests/arm64/Makefile
>>>>> +++ b/tools/testing/selftests/arm64/Makefile
>>>>> @@ -4,7 +4,7 @@
>>>>> ARCH ?= $(shell uname -m 2>/dev/null || echo not)
>>>>> ifneq (,$(filter $(ARCH),aarch64 arm64))
>>>>> -ARM64_SUBTARGETS ?= tags signal pauth fp mte bti abi
>>>>> +ARM64_SUBTARGETS ?= tags signal pauth fp mte bti abi coresight
>>>>> else
>>>>> ARM64_SUBTARGETS :=
>>>>> endif
>>>>> diff --git a/tools/testing/selftests/arm64/coresight/Makefile
>>>>> b/tools/testing/selftests/arm64/coresight/Makefile
>>>>> new file mode 100644
>>>>> index 0000000000000..1cc8c1f2a997e
>>>>> --- /dev/null
>>>>> +++ b/tools/testing/selftests/arm64/coresight/Makefile
>>>>> @@ -0,0 +1,5 @@
>>>>> +# SPDX-License-Identifier: GPL-2.0
>>>>> +
>>>>> +TEST_PROGS := coresight.sh
>>>>> +
>>>>> +include ../../lib.mk
>>>>> diff --git a/tools/testing/selftests/arm64/coresight/coresight.sh
>>>>> b/tools/testing/selftests/arm64/coresight/coresight.sh
>>>>> new file mode 100755
>>>>> index 0000000000000..e550957cf593b
>>>>> --- /dev/null
>>>>> +++ b/tools/testing/selftests/arm64/coresight/coresight.sh
>>>>> @@ -0,0 +1,40 @@
>>>>> +#!/bin/bash
>>>>> +# SPDX-License-Identifier: GPL-2.0
>>>>> +
>>>>> +skip() {
>>>>> + echo "SKIP: $1"
>>>>> + exit 4
>>>>> +}
>>>>> +
>>>>> +fail() {
>>>>> + echo "FAIL: $1"
>>>>> + exit 255
>>>>> +}
>>>>> +
>>>>> +is_coresight_supported() {
>>>>> + if [ -d "/sys/bus/coresight/devices" ]; then
>>>>> + return 0
>>>>> + fi
>>>>> + return 255
>>>>> +}
>>>
>>> The Perf coresight tests already have a skip mechanism built in so
>>> can we rely on that instead of duplicating it here? There are also
>>> other scenarios for skipping like Perf not linked with OpenCSD which
>>> aren't covered here.
>>>
>>
>> Will it return the different error code to indicate if it's failed to
>> be executed or the coresight is not supported?
>>
>
> I think the exit code is only used for more serious errors. For things
> like missing tests, SKIP and FAIL it still exits with 0 but you have to
> grep for the strings. Actually for a missing test it prints nothing and
> exits 0.
> >>>>> +
>>>>> +if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
>>>>> + [ "$(id -u)" -ne 0 ] && \
>>>>> + skip "this test must be run as root."
>>>>> + which perf >/dev/null 2>&1 || \
>>>>> + skip "perf is not installed."
>>>>> + perf test list 2>&1 | grep -qi 'coresight' || \
>>>>> + skip "perf doesn't support testing coresight."
>>>
>>> Can this be an error instead? The coresight tests were added in 5.10
>>> and I don't think new kselftest needs to support such old kernels.
>>> This skip risks turning an error with installing the tests into a
>>> silent failure.
>>>
>>> Also as far as I know a lot of distros will refuse to open Perf
>>> unless it matches the kernel version if it was installed from the
>>> package manager, so we don't need to worry about old versions.
>>>
>>
>> The idea to skip it here is because I thought either a distro (custom)
>> kernel doesn't enable the kconfig or the distro built the perf with
>> CORESIGHT=0.
>>
>> I could make it as an error and put it after "is_coresight_support" if
>> it makes more sense.
>>
>
> But the Coresight test already checks these things, which is my point.
> You can grep for "SKIP" which it will print for any case where the
> coresight test can't be run due to some missing config.
>
Oh, I guess you mean to rely on something like the `perf list cs_etm |
grep -q cs_etm || exit 2`. Yes, that makes more sense.
>>>>> + is_coresight_supported || \
>>>>> + skip "coresight is not supported."
>>>>> +
>>>>> + cmd_output=$(perf test -vv 'coresight' 2>&1)
>>>>> + perf_ret=$?
>>>>> +
>>>>> + if [ $perf_ret -ne 0 ]; then
>>>>> + fail "perf command returns non-zero."
>>>>> + elif [[ $cmd_output == *"FAILED!"* ]]; then
>>>>> + echo $cmd_output
>>>
>>> It's probably helpful to print cmd_output in both failure cases.
>>>
>>
>> ok, will do.
>>
>>>>> + fail "perf test 'arm coresight' test failed!"
I think I should remove the `is_coresight_supported` there and checks
the output as a "else" to see if the test is PASS or SKIP. Does it make
sense to you?
>>>>> + fi
>>>>> +fi
>>>>> diff --git a/tools/testing/selftests/arm64/coresight/settings
>>>>> b/tools/testing/selftests/arm64/coresight/settings
>>>>> new file mode 100644
>>>>> index 0000000000000..a953c96aa16e1
>>>>> --- /dev/null
>>>>> +++ b/tools/testing/selftests/arm64/coresight/settings
>>>>> @@ -0,0 +1 @@
>>>>> +timeout=180
>>>
>>> I timed 331 seconds on n1sdp, and probably even longer on Juno.
>>>
>>> It doesn't need to run for this long and it's an issue with the
>>> tests, but currently that's how long it takes so the timeout needs to
>>> be longer.
>>>
>>
>> ok, will extend it to 600.
>>
>>>>> --
>>>>> 2.34.1
>>>>
More information about the linux-arm-kernel
mailing list