Message ID | 20220706073622.672135-1-li.meng@amd.com |
---|---|
Headers | show |
Series | Add tbench/gitsource new test cases for amd-pstate-ut | expand |
On Wed, Jul 06, 2022 at 03:36:22PM +0800, Meng, Li (Jassmine) wrote: > Introduce tbench and gitsource test cases design and implementation. > Monitor cpus changes about performance and power consumption etc. > > Signed-off-by: Meng Li <li.meng@amd.com> > --- > Documentation/admin-guide/pm/amd-pstate.rst | 124 +++++++++++++++++--- > 1 file changed, 106 insertions(+), 18 deletions(-) > > diff --git a/Documentation/admin-guide/pm/amd-pstate.rst b/Documentation/admin-guide/pm/amd-pstate.rst > index 8f3d30c5a0d8..48fb488e000e 100644 > --- a/Documentation/admin-guide/pm/amd-pstate.rst > +++ b/Documentation/admin-guide/pm/amd-pstate.rst > @@ -409,37 +409,53 @@ Unit Tests for amd-pstate > > 1. Test case decriptions > > + 1). basic tests > + > + Test prerequisite and basic functions for the ``amd-pstate`` driver. > + > +---------+--------------------------------+------------------------------------------------------------------------------------+ > | Index | Functions | Description | > +=========+================================+====================================================================================+ > - | 0 | amd_pstate_ut_acpi_cpc_valid || Check whether the _CPC object is present in SBIOS. | > + | 1 | amd_pstate_ut_acpi_cpc_valid || Check whether the _CPC object is present in SBIOS. | > | | || | > | | || The detail refer to `Processor Support <processor_support_>`_. | > +---------+--------------------------------+------------------------------------------------------------------------------------+ > - | 1 | amd_pstate_ut_check_enabled || Check whether AMD P-State is enabled. | > + | 2 | amd_pstate_ut_check_enabled || Check whether AMD P-State is enabled. | > | | || | > | | || AMD P-States and ACPI hardware P-States always can be supported in one processor. | > | | | But AMD P-States has the higher priority and if it is enabled with | > | | | :c:macro:`MSR_AMD_CPPC_ENABLE` or ``cppc_set_enable``, it will respond to the | > | | | request from AMD P-States. | > +---------+--------------------------------+------------------------------------------------------------------------------------+ > - | 2 | amd_pstate_ut_check_perf || Check if the each performance values are reasonable. | > + | 3 | amd_pstate_ut_check_perf || Check if the each performance values are reasonable. | > | | || highest_perf >= nominal_perf > lowest_nonlinear_perf > lowest_perf > 0. | > +---------+--------------------------------+------------------------------------------------------------------------------------+ > - | 3 | amd_pstate_ut_check_freq || Check if the each frequency values and max freq when set support boost mode | > + | 4 | amd_pstate_ut_check_freq || Check if the each frequency values and max freq when set support boost mode | > | | | are reasonable. | > | | || max_freq >= nominal_freq > lowest_nonlinear_freq > min_freq > 0 | > | | || If boost is not active but supported, this maximum frequency will be larger than | > | | | the one in ``cpuinfo``. | > +---------+--------------------------------+------------------------------------------------------------------------------------+ > > + 2). Tbench test > + > + Testing and monitor the cpu changes when running tbench benchmark under the specified governor. Test and monior ... > + These changes include desire performance, frequency, load, performance, energy etc. > + The specified governor is ondemand or schedutil. > + > + 3). Gitsource test > + > + Testing and monitor the cpu changes when running gitsource benchmark under the specified governor. > + These changes include desire performance, frequency, load, time, energy etc. > + The specified governor is ondemand or schedutil. Test and monior ... > + > #. How to execute the tests > > We use test module in the kselftest frameworks to implement it. > We create amd-pstate-ut module and tie it into kselftest.(for > details refer to Linux Kernel Selftests [4]_). > > - 1. Build > + a. Build Why do you update the 1 -> a here? > > + open the :c:macro:`CONFIG_X86_AMD_PSTATE` configuration option. > + set the :c:macro:`CONFIG_X86_AMD_PSTATE_UT` configuration option to M. > @@ -449,23 +465,95 @@ Unit Tests for amd-pstate > $ cd linux > $ make -C tools/testing/selftests > > + + make perf :: > + > + $ cd tools/perf/ > + $ make > + > + > #. Installation & Steps :: > > $ make -C tools/testing/selftests install INSTALL_PATH=~/kselftest > + $ cp tools/perf/perf ~/kselftest/amd-pstate/ > $ sudo ./kselftest/run_kselftest.sh -c amd-pstate > - TAP version 13 > - 1..1 > - # selftests: amd-pstate: amd-pstate-ut.sh > - # amd-pstate-ut: ok > - ok 1 selftests: amd-pstate: amd-pstate-ut.sh > - > - #. Results :: > - > - $ dmesg | grep "amd_pstate_ut" | tee log.txt > - [12977.570663] amd_pstate_ut: 1 amd_pstate_ut_acpi_cpc_valid success! > - [12977.570673] amd_pstate_ut: 2 amd_pstate_ut_check_enabled success! > - [12977.571207] amd_pstate_ut: 3 amd_pstate_ut_check_perf success! > - [12977.571212] amd_pstate_ut: 4 amd_pstate_ut_check_freq success! > + > + #. Specified test case :: > + > + $ cd ~/kselftest/amd-pstate > + $ sudo ./run.sh -t basic > + $ sudo ./run.sh -t tbench > + $ sudo ./run.sh -t gitsource > + $ ./run.sh --help > + ./run.sh: illegal option -- - > + Usage: ./run.sh [OPTION...] > + [-h <help>] > + [-o <output-file-for-dump>] > + [-t <all: All testing, > + basic: Basic testing, > + tbench: Test tbench, > + gitsource: Test gitsource.>] > + [-i <tbench time limit>] > + [-p <tbench process number>] > + [-l <loop times for tbench/gitsource] > + [-n <amd tracer interval] > + > + 4). Results 4) -> #.? We would like to align all the number format in the paragraph like below: 1. 1) 2) 3) 2. 1) 2) ... Thanks, Ray > + > + + basic > + > + When you finish test, you will get the following log info :: > + > + $ dmesg | grep "amd_pstate_ut" | tee log.txt > + [12977.570663] amd_pstate_ut: 1 amd_pstate_ut_acpi_cpc_valid success! > + [12977.570673] amd_pstate_ut: 2 amd_pstate_ut_check_enabled success! > + [12977.571207] amd_pstate_ut: 3 amd_pstate_ut_check_perf success! > + [12977.571212] amd_pstate_ut: 4 amd_pstate_ut_check_freq success! > + > + + tbench > + > + When you finish test, you will get selftest.tbench.csv and selftest.tbench.result files form amd-pstate. > + Open selftest.tbench.csv : > + > + +-----------+---------+----------+---------+----------+-------------------+----------------+-----------+ > + + Governor | Round | Des-perf | Freq | Load | Performance(MB/s) | Energy(Joules) | PPW(MB/J) | > + +===========+=========+==========+=========+==========+===================+================+===========+ > + + ondemand | 1 | 203.244 | 3.2225 | 87.5064 | 35368.2 | 6626.1 | 101.4164 | > + +-----------+---------+----------+---------+----------+-------------------+----------------+-----------+ > + + ondemand | 2 | 205.861 | 3.24948 | 88.9281 | 34795.7 | 6547.06 | 100.9794 | > + +-----------+---------+----------+---------+----------+-------------------+----------------+-----------+ > + + ondemand | Average | 204.553 | 3.23599 | 88.2173 | 35081.9 | 6586.58 | 101.1991 | > + +-----------+---------+----------+---------+----------+-------------------+----------------+-----------+ > + + | | | | | | | | > + +-----------+---------+----------+---------+----------+-------------------+----------------+-----------+ > + + schedutil | 1 | 253.735 | 3.26755 | 96.6481 | 34653.9 | 6622.85 | 99.4170 | > + +-----------+---------+----------+---------+----------+-------------------+----------------+-----------+ > + + schedutil | 2 | 254.654 | 3.44086 | 92.3564 | 31707.8 | 6573.67 | 91.6456 | > + +-----------+---------+----------+---------+----------+-------------------+----------------+-----------+ > + + schedutil | Average | 254.195 | 3.3542 | 94.5023 | 33180.8 | 6598.26 | 95.5456 | > + +-----------+---------+----------+---------+----------+-------------------+----------------+-----------+ > + > + + gitsource > + > + When you finish test, you will get selftest.gitsource.csv and selftest.gitsource.result files form amd-pstate. > + Open selftest.gitsource.csv : > + > + +-----------+---------+----------+----------+----------+----------+----------------+----------+ > + + Governor | Round | Des-perf | Freq | Load | Times(s) | Energy(Joules) | PPW(s/J) | > + +===========+=========+==========+==========+==========+==========+================+==========+ > + + ondemand | 1 | 29.7305 | 1.13025 | 8.49585 | 341.61 | 6811.02 | 0.0501 | > + +-----------+---------+----------+----------+----------+----------+----------------+----------+ > + + ondemand | 2 | 28.0523 | 1.33848 | 8.16496 | 339.21 | 6999.84 | 0.0484 | > + +-----------+---------+----------+----------+----------+----------+----------------+----------+ > + + ondemand | Average | 28.8914 | 1.23436 | 8.33041 | 340.41 | 6905.43 | 0.0492 | > + +-----------+---------+----------+----------+----------+----------+----------------+----------+ > + + | | | | | | | | > + +-----------+---------+----------+----------+----------+----------+----------------+----------+ > + + schedutil | 1 | 29.6971 | 0.834149 | 9.57879 | 278.15 | 5992.26 | 0.0464 | > + +-----------+---------+----------+----------+----------+----------+----------------+----------+ > + + schedutil | 2 | 31.6573 | 0.99686 | 8.60513 | 280.28 | 5772.59 | 0.0485 | > + +-----------+---------+----------+----------+----------+----------+----------------+----------+ > + + schedutil | Average | 30.6772 | 0.915504 | 9.09196 | 279.215 | 5882.43 | 0.0474 | > + +-----------+---------+----------+----------+----------+----------+----------------+----------+ > > Reference > =========== > -- > 2.25.1 >
On Wed, Jul 06, 2022 at 03:36:19PM +0800, Meng, Li (Jassmine) wrote: > Modify amd-pstate-ut.sh to basic.sh. > The purpose of this modification is to facilitate the subsequent > addition of gitsource, tbench and other tests. > > Signed-off-by: Meng Li <li.meng@amd.com> Since amd-pstate-ut.sh is separated by three scripts below, could you please describe how to use them in the commit log? Thanks, Ray > --- > tools/testing/selftests/amd-pstate/Makefile | 3 +- > .../selftests/amd-pstate/amd-pstate-ut.sh | 55 -------- > tools/testing/selftests/amd-pstate/basic.sh | 38 +++++ > tools/testing/selftests/amd-pstate/main.sh | 131 ++++++++++++++++++ > tools/testing/selftests/amd-pstate/run.sh | 15 ++ > 5 files changed, 186 insertions(+), 56 deletions(-) > delete mode 100755 tools/testing/selftests/amd-pstate/amd-pstate-ut.sh > create mode 100755 tools/testing/selftests/amd-pstate/basic.sh > create mode 100755 tools/testing/selftests/amd-pstate/main.sh > create mode 100755 tools/testing/selftests/amd-pstate/run.sh > > diff --git a/tools/testing/selftests/amd-pstate/Makefile b/tools/testing/selftests/amd-pstate/Makefile > index 199867f44b32..167ab51ec290 100644 > --- a/tools/testing/selftests/amd-pstate/Makefile > +++ b/tools/testing/selftests/amd-pstate/Makefile > @@ -4,6 +4,7 @@ > # No binaries, but make sure arg-less "make" doesn't trigger "run_tests" > all: > > -TEST_PROGS := amd-pstate-ut.sh > +TEST_PROGS := run.sh > +TEST_FILES := main.sh basic.sh > > include ../lib.mk > diff --git a/tools/testing/selftests/amd-pstate/amd-pstate-ut.sh b/tools/testing/selftests/amd-pstate/amd-pstate-ut.sh > deleted file mode 100755 > index 273364650285..000000000000 > --- a/tools/testing/selftests/amd-pstate/amd-pstate-ut.sh > +++ /dev/null > @@ -1,55 +0,0 @@ > -#!/bin/sh > -# SPDX-License-Identifier: GPL-2.0 > - > -# amd-pstate-ut is a test module for testing the amd-pstate driver. > -# It can only run on x86 architectures and current cpufreq driver > -# must be amd-pstate. > -# (1) It can help all users to verify their processor support > -# (SBIOS/Firmware or Hardware). > -# (2) Kernel can have a basic function test to avoid the kernel > -# regression during the update. > -# (3) We can introduce more functional or performance tests to align > -# the result together, it will benefit power and performance scale optimization. > - > -# Kselftest framework requirement - SKIP code is 4. > -ksft_skip=4 > - > -# amd-pstate-ut only run on x86/x86_64 AMD systems. > -ARCH=$(uname -m 2>/dev/null | sed -e 's/i.86/x86/' -e 's/x86_64/x86/') > -VENDOR=$(cat /proc/cpuinfo | grep -m 1 'vendor_id' | awk '{print $NF}') > - > -if ! echo "$ARCH" | grep -q x86; then > - echo "$0 # Skipped: Test can only run on x86 architectures." > - exit $ksft_skip > -fi > - > -if ! echo "$VENDOR" | grep -iq amd; then > - echo "$0 # Skipped: Test can only run on AMD CPU." > - echo "$0 # Current cpu vendor is $VENDOR." > - exit $ksft_skip > -fi > - > -scaling_driver=$(cat /sys/devices/system/cpu/cpufreq/policy0/scaling_driver) > -if [ "$scaling_driver" != "amd-pstate" ]; then > - echo "$0 # Skipped: Test can only run on amd-pstate driver." > - echo "$0 # Current cpufreq scaling drvier is $scaling_driver." > - exit $ksft_skip > -fi > - > -msg="Skip all tests:" > -if [ ! -w /dev ]; then > - echo $msg please run this as root >&2 > - exit $ksft_skip > -fi > - > -if ! /sbin/modprobe -q -n amd-pstate-ut; then > - echo "amd-pstate-ut: module amd-pstate-ut is not found [SKIP]" > - exit $ksft_skip > -fi > -if /sbin/modprobe -q amd-pstate-ut; then > - /sbin/modprobe -q -r amd-pstate-ut > - echo "amd-pstate-ut: ok" > -else > - echo "amd-pstate-ut: [FAIL]" > - exit 1 > -fi > diff --git a/tools/testing/selftests/amd-pstate/basic.sh b/tools/testing/selftests/amd-pstate/basic.sh > new file mode 100755 > index 000000000000..e4c43193e4a3 > --- /dev/null > +++ b/tools/testing/selftests/amd-pstate/basic.sh > @@ -0,0 +1,38 @@ > +#!/bin/sh > +# SPDX-License-Identifier: GPL-2.0 > + > +# amd-pstate-ut is a test module for testing the amd-pstate driver. > +# It can only run on x86 architectures and current cpufreq driver > +# must be amd-pstate. > +# (1) It can help all users to verify their processor support > +# (SBIOS/Firmware or Hardware). > +# (2) Kernel can have a basic function test to avoid the kernel > +# regression during the update. > +# (3) We can introduce more functional or performance tests to align > +# the result together, it will benefit power and performance scale optimization. > + > +# protect against multiple inclusion > +if [ $FILE_BASIC ]; then > + return 0 > +else > + FILE_BASIC=DONE > +fi > + > +amd_pstate_basic() > +{ > + printf "\n---------------------------------------------\n" > + printf "*** Running AMD P-state ut ***" > + printf "\n---------------------------------------------\n" > + > + if ! /sbin/modprobe -q -n amd-pstate-ut; then > + echo "amd-pstate-ut: module amd-pstate-ut is not found [SKIP]" > + exit $ksft_skip > + fi > + if /sbin/modprobe -q amd-pstate-ut; then > + /sbin/modprobe -q -r amd-pstate-ut > + echo "amd-pstate-basic: ok" > + else > + echo "amd-pstate-basic: [FAIL]" > + exit 1 > + fi > +} > diff --git a/tools/testing/selftests/amd-pstate/main.sh b/tools/testing/selftests/amd-pstate/main.sh > new file mode 100755 > index 000000000000..1c28b5d7b4c5 > --- /dev/null > +++ b/tools/testing/selftests/amd-pstate/main.sh > @@ -0,0 +1,131 @@ > +#!/bin/bash > +# SPDX-License-Identifier: GPL-2.0 > + > +# protect against multiple inclusion > +if [ $FILE_MAIN ]; then > + return 0 > +else > + FILE_MAIN=DONE > +fi > + > +source basic.sh > + > +# amd-pstate-ut only run on x86/x86_64 AMD systems. > +ARCH=$(uname -m 2>/dev/null | sed -e 's/i.86/x86/' -e 's/x86_64/x86/') > +VENDOR=$(cat /proc/cpuinfo | grep -m 1 'vendor_id' | awk '{print $NF}') > + > +FUNC=all > +OUTFILE=selftest > + > +# Kselftest framework requirement - SKIP code is 4. > +ksft_skip=4 > + > +# All amd-pstate tests > +amd_pstate_all() > +{ > + printf "\n=============================================\n" > + printf "***** Running AMD P-state Sanity Tests *****\n" > + printf "=============================================\n\n" > + > + # unit test for amd-pstate kernel driver > + amd_pstate_basic > +} > + > +helpme() > +{ > + printf "Usage: $0 [OPTION...] > + [-h <help>] > + [-o <output-file-for-dump>] > + [-c <all: All testing, > + basic: Basic testing.>] > + \n" > + exit 2 > +} > + > +parse_arguments() > +{ > + while getopts ho:c: arg > + do > + case $arg in > + h) # --help > + helpme > + ;; > + > + c) # --func_type (Function to perform: basic (default: all)) > + FUNC=$OPTARG > + ;; > + > + o) # --output-file (Output file to store dumps) > + OUTFILE=$OPTARG > + ;; > + > + \?) > + helpme > + ;; > + esac > + done > +} > + > +prerequisite() > +{ > + if ! echo "$ARCH" | grep -q x86; then > + echo "$0 # Skipped: Test can only run on x86 architectures." > + exit $ksft_skip > + fi > + > + if ! echo "$VENDOR" | grep -iq amd; then > + echo "$0 # Skipped: Test can only run on AMD CPU." > + echo "$0 # Current cpu vendor is $VENDOR." > + exit $ksft_skip > + fi > + > + scaling_driver=$(cat /sys/devices/system/cpu/cpufreq/policy0/scaling_driver) > + if [ "$scaling_driver" != "amd-pstate" ]; then > + echo "$0 # Skipped: Test can only run on amd-pstate driver." > + echo "$0 # Current cpufreq scaling drvier is $scaling_driver." > + exit $ksft_skip > + fi > + > + msg="Skip all tests:" > + if [ ! -w /dev ]; then > + echo $msg please run this as root >&2 > + exit $ksft_skip > + fi > +} > + > +do_test() > +{ > + case "$FUNC" in > + "all") > + amd_pstate_all > + ;; > + > + "basic") > + amd_pstate_basic > + ;; > + > + *) > + echo "Invalid [-f] function type" > + helpme > + ;; > + esac > +} > + > +# clear dumps > +pre_clear_dumps() > +{ > + case "$FUNC" in > + "all") > + rm -rf $OUTFILE* > + ;; > + > + "basic") > + ;; > + > + esac > +} > + > +post_clear_dumps() > +{ > + rm -rf $OUTFILE.log > +} > diff --git a/tools/testing/selftests/amd-pstate/run.sh b/tools/testing/selftests/amd-pstate/run.sh > new file mode 100755 > index 000000000000..247e80bfee44 > --- /dev/null > +++ b/tools/testing/selftests/amd-pstate/run.sh > @@ -0,0 +1,15 @@ > +#!/bin/bash > +# SPDX-License-Identifier: GPL-2.0 > + > +source main.sh > + > +# Parse arguments > +parse_arguments $@ > + > +# Make sure all requirements are met > +prerequisite > + > +# Run requested functions > +pre_clear_dumps > +do_test | tee -a $OUTFILE.log > +post_clear_dumps > -- > 2.25.1 >
On 7/6/22 02:36, Meng Li wrote: > Modify amd-pstate-ut.sh to basic.sh. > The purpose of this modification is to facilitate the subsequent > addition of gitsource, tbench and other tests. > > Signed-off-by: Meng Li <li.meng@amd.com> > --- > tools/testing/selftests/amd-pstate/Makefile | 3 +- > .../selftests/amd-pstate/amd-pstate-ut.sh | 55 -------- > tools/testing/selftests/amd-pstate/basic.sh | 38 +++++ > tools/testing/selftests/amd-pstate/main.sh | 131 ++++++++++++++++++ > tools/testing/selftests/amd-pstate/run.sh | 15 ++ > 5 files changed, 186 insertions(+), 56 deletions(-) > delete mode 100755 tools/testing/selftests/amd-pstate/amd-pstate-ut.sh > create mode 100755 tools/testing/selftests/amd-pstate/basic.sh > create mode 100755 tools/testing/selftests/amd-pstate/main.sh > create mode 100755 tools/testing/selftests/amd-pstate/run.sh > > diff --git a/tools/testing/selftests/amd-pstate/Makefile b/tools/testing/selftests/amd-pstate/Makefile > index 199867f44b32..167ab51ec290 100644 > --- a/tools/testing/selftests/amd-pstate/Makefile > +++ b/tools/testing/selftests/amd-pstate/Makefile > @@ -4,6 +4,7 @@ > # No binaries, but make sure arg-less "make" doesn't trigger "run_tests" > all: > > -TEST_PROGS := amd-pstate-ut.sh > +TEST_PROGS := run.sh > +TEST_FILES := main.sh basic.sh > > include ../lib.mk > diff --git a/tools/testing/selftests/amd-pstate/amd-pstate-ut.sh b/tools/testing/selftests/amd-pstate/amd-pstate-ut.sh > deleted file mode 100755 > index 273364650285..000000000000 > --- a/tools/testing/selftests/amd-pstate/amd-pstate-ut.sh > +++ /dev/null > @@ -1,55 +0,0 @@ > -#!/bin/sh > -# SPDX-License-Identifier: GPL-2.0 > - > -# amd-pstate-ut is a test module for testing the amd-pstate driver. > -# It can only run on x86 architectures and current cpufreq driver > -# must be amd-pstate. > -# (1) It can help all users to verify their processor support > -# (SBIOS/Firmware or Hardware). > -# (2) Kernel can have a basic function test to avoid the kernel > -# regression during the update. > -# (3) We can introduce more functional or performance tests to align > -# the result together, it will benefit power and performance scale optimization. > - > -# Kselftest framework requirement - SKIP code is 4. > -ksft_skip=4 > - > -# amd-pstate-ut only run on x86/x86_64 AMD systems. > -ARCH=$(uname -m 2>/dev/null | sed -e 's/i.86/x86/' -e 's/x86_64/x86/') > -VENDOR=$(cat /proc/cpuinfo | grep -m 1 'vendor_id' | awk '{print $NF}') > - > -if ! echo "$ARCH" | grep -q x86; then > - echo "$0 # Skipped: Test can only run on x86 architectures." > - exit $ksft_skip > -fi > - > -if ! echo "$VENDOR" | grep -iq amd; then > - echo "$0 # Skipped: Test can only run on AMD CPU." > - echo "$0 # Current cpu vendor is $VENDOR." > - exit $ksft_skip > -fi > - > -scaling_driver=$(cat /sys/devices/system/cpu/cpufreq/policy0/scaling_driver) > -if [ "$scaling_driver" != "amd-pstate" ]; then > - echo "$0 # Skipped: Test can only run on amd-pstate driver." > - echo "$0 # Current cpufreq scaling drvier is $scaling_driver." > - exit $ksft_skip > -fi > - > -msg="Skip all tests:" > -if [ ! -w /dev ]; then > - echo $msg please run this as root >&2 > - exit $ksft_skip > -fi > - > -if ! /sbin/modprobe -q -n amd-pstate-ut; then > - echo "amd-pstate-ut: module amd-pstate-ut is not found [SKIP]" > - exit $ksft_skip > -fi > -if /sbin/modprobe -q amd-pstate-ut; then > - /sbin/modprobe -q -r amd-pstate-ut > - echo "amd-pstate-ut: ok" > -else > - echo "amd-pstate-ut: [FAIL]" > - exit 1 > -fi > diff --git a/tools/testing/selftests/amd-pstate/basic.sh b/tools/testing/selftests/amd-pstate/basic.sh > new file mode 100755 > index 000000000000..e4c43193e4a3 > --- /dev/null > +++ b/tools/testing/selftests/amd-pstate/basic.sh > @@ -0,0 +1,38 @@ > +#!/bin/sh > +# SPDX-License-Identifier: GPL-2.0 > + > +# amd-pstate-ut is a test module for testing the amd-pstate driver. > +# It can only run on x86 architectures and current cpufreq driver > +# must be amd-pstate. > +# (1) It can help all users to verify their processor support > +# (SBIOS/Firmware or Hardware). > +# (2) Kernel can have a basic function test to avoid the kernel > +# regression during the update. > +# (3) We can introduce more functional or performance tests to align > +# the result together, it will benefit power and performance scale optimization. > + > +# protect against multiple inclusion > +if [ $FILE_BASIC ]; then > + return 0 > +else > + FILE_BASIC=DONE > +fi > + > +amd_pstate_basic() > +{ > + printf "\n---------------------------------------------\n" > + printf "*** Running AMD P-state ut ***" > + printf "\n---------------------------------------------\n" > + > + if ! /sbin/modprobe -q -n amd-pstate-ut; then > + echo "amd-pstate-ut: module amd-pstate-ut is not found [SKIP]" > + exit $ksft_skip > + fi > + if /sbin/modprobe -q amd-pstate-ut; then > + /sbin/modprobe -q -r amd-pstate-ut > + echo "amd-pstate-basic: ok" > + else > + echo "amd-pstate-basic: [FAIL]" > + exit 1 > + fi > +} > diff --git a/tools/testing/selftests/amd-pstate/main.sh b/tools/testing/selftests/amd-pstate/main.sh > new file mode 100755 > index 000000000000..1c28b5d7b4c5 > --- /dev/null > +++ b/tools/testing/selftests/amd-pstate/main.sh > @@ -0,0 +1,131 @@ > +#!/bin/bash > +# SPDX-License-Identifier: GPL-2.0 > + > +# protect against multiple inclusion > +if [ $FILE_MAIN ]; then > + return 0 > +else > + FILE_MAIN=DONE > +fi > + > +source basic.sh > + > +# amd-pstate-ut only run on x86/x86_64 AMD systems. > +ARCH=$(uname -m 2>/dev/null | sed -e 's/i.86/x86/' -e 's/x86_64/x86/') > +VENDOR=$(cat /proc/cpuinfo | grep -m 1 'vendor_id' | awk '{print $NF}') > + > +FUNC=all > +OUTFILE=selftest > + > +# Kselftest framework requirement - SKIP code is 4. > +ksft_skip=4 > + > +# All amd-pstate tests > +amd_pstate_all() > +{ > + printf "\n=============================================\n" > + printf "***** Running AMD P-state Sanity Tests *****\n" > + printf "=============================================\n\n" > + > + # unit test for amd-pstate kernel driver > + amd_pstate_basic > +} > + > +helpme() > +{ > + printf "Usage: $0 [OPTION...] > + [-h <help>] > + [-o <output-file-for-dump>] > + [-c <all: All testing, > + basic: Basic testing.>] > + \n" > + exit 2 > +} > + > +parse_arguments() > +{ > + while getopts ho:c: arg > + do > + case $arg in > + h) # --help > + helpme > + ;; > + > + c) # --func_type (Function to perform: basic (default: all)) > + FUNC=$OPTARG > + ;; > + > + o) # --output-file (Output file to store dumps) > + OUTFILE=$OPTARG > + ;; > + > + \?) > + helpme > + ;; > + esac > + done > +} > + > +prerequisite() > +{ > + if ! echo "$ARCH" | grep -q x86; then > + echo "$0 # Skipped: Test can only run on x86 architectures." > + exit $ksft_skip > + fi > + > + if ! echo "$VENDOR" | grep -iq amd; then > + echo "$0 # Skipped: Test can only run on AMD CPU." > + echo "$0 # Current cpu vendor is $VENDOR." > + exit $ksft_skip > + fi > + > + scaling_driver=$(cat /sys/devices/system/cpu/cpufreq/policy0/scaling_driver) > + if [ "$scaling_driver" != "amd-pstate" ]; then > + echo "$0 # Skipped: Test can only run on amd-pstate driver." > + echo "$0 # Current cpufreq scaling drvier is $scaling_driver." > + exit $ksft_skip > + fi > + > + msg="Skip all tests:" > + if [ ! -w /dev ]; then > + echo $msg please run this as root >&2 > + exit $ksft_skip > + fi > +} > + > +do_test() > +{ > + case "$FUNC" in > + "all") > + amd_pstate_all > + ;; > + > + "basic") > + amd_pstate_basic > + ;; > + > + *) > + echo "Invalid [-f] function type" > + helpme > + ;; > + esac > +} > + > +# clear dumps > +pre_clear_dumps() > +{ > + case "$FUNC" in > + "all") > + rm -rf $OUTFILE* > + ;; > + > + "basic") > + ;; > + > + esac Small nit. You have two different indentation styles for your case statements, do_test and pre_clear_dumps vs parse_arguments. Would be nice to stick to a single style. > +} > + > +post_clear_dumps() > +{ > + rm -rf $OUTFILE.log > +} > diff --git a/tools/testing/selftests/amd-pstate/run.sh b/tools/testing/selftests/amd-pstate/run.sh > new file mode 100755 > index 000000000000..247e80bfee44 > --- /dev/null > +++ b/tools/testing/selftests/amd-pstate/run.sh > @@ -0,0 +1,15 @@ > +#!/bin/bash > +# SPDX-License-Identifier: GPL-2.0 > + > +source main.sh > + > +# Parse arguments > +parse_arguments $@ > + > +# Make sure all requirements are met > +prerequisite > + > +# Run requested functions > +pre_clear_dumps > +do_test | tee -a $OUTFILE.log > +post_clear_dumps run.sh seems like it's just a wrapper for main.sh, can these two files be merged into a single file? -Nathan