Re: [Fuego] [PATCH v2] lmbench: Use 'SCRIPTS_PATH' to specify distribution installed binaries path

<[email protected]> Fri, 5 Nov 2021 18:07:58 +0000
Newsgroups dev.linux.lists.fuego
Message-ID <BYAPR13MB250349B7AAD5F59EB7B3863EFD8E9@BYAPR13MB2503.namprd13.prod.outlook.com>
OK - this one I have some suggestions for...

See comments inline below.

> -----Original Message-----
> From: [email protected] <[email protected]>
> 
> From: venkata pyla <[email protected]>
> 
> Use 'SCRIPTS_PATH' variable to specify lmbench scripts directory if the
> lmbench is installed by distribution, and then use get_program_path to
> search the binaries in the 'SCRIPTS_PATH'.
> 
> default 'SCRIPTS_PATH' directory is $BOARD_TESTDIR/fuego.$TESTDIR/scripts
> and can be specify using --dynamic-vars
> 
> $ ftc run-test -b local -t Benchmark.lmbench2 -p ptrca \
>                --dynamic-vars "{'SCRIPTS_PATH':'/usr/lib/lmbench/scripts'}"

I'd prefer it if this was not needed to run the test.  As an optional aid
for a truly bizarre setup, I think this is OK.  But if /usr/lib/lmbench is the
default location for lmbench assets (that is, the default install location),
then I'd rather just auto-detect that the assets are there, rather than requiring
the user to need to specify that path.

On my Ubuntu 20.04 system, the lmbench package puts things all over
the place:
/usr/lib/lmbench/scripts/*
/usr/lib/lmbench/bin/x86_64-linux-gnu/*
/var/lib/lmbench/config
/var/lib/lmbench/results

And, a helper wrapper seems to be at /usr/bin/lmbench-run

Can you tell me where the scripts, bin, config and results directories are
for the lmbench package in your distribution?
In particular, I'm curious if your config or results are under /usr/lib/lmbench
or /var/lib/lmbench.  It appears from this patch, that they are under
/usr/lib/lmbench, as you use paths relative to SCRIPTS_DIR to access them.


Also, just as a note, the following is equivalent syntax for specifying
a dynamic variable (and is a bit easier to read, IMHO):
$ ftc run-test -b local -t Benchmark.lmbench2 -p ptrca \
               --dynamic-vars SCRIPTS_PATH=/usr/lib/lmbench/scripts

(Also, you don't need the 'Benchmark.' prefix on the test name anymore)

> Signed-off-by: venkata pyla <[email protected]>
> ---
>  tests/Benchmark.lmbench2/fuego_test.sh | 21 ++++++++++++---------
>  1 file changed, 12 insertions(+), 9 deletions(-)
> 
> diff --git a/tests/Benchmark.lmbench2/fuego_test.sh b/tests/Benchmark.lmbench2/fuego_test.sh
> index d07606c..02a3b8e 100755
> --- a/tests/Benchmark.lmbench2/fuego_test.sh
> +++ b/tests/Benchmark.lmbench2/fuego_test.sh
> @@ -22,20 +22,23 @@ function test_deploy {
>  }
> 
>  function test_run {
> +   if [ -z "$BENCHMARK_LMBENCH2_SCRIPTS_PATH" ]; then
This conditional is OK, but I'd like to add some more autodetection here, when
BENCHMARK_LMBENCH2_SCRIPTS_PATH is not set.

> +      SCRIPTS_PATH="$BOARD_TESTDIR/fuego.$TESTDIR/scripts"
Can we add something here like this:

            if cmd "test ! -d $SCRIPTS_PATH" ; then
                   SCRIPTS_PATH=/usr/lib/lmbench/scripts
                    if cmd "test ! -d $SCRIPTS_PATH" ; then
                           abort_job "Could not find lmbench scripts directory. Maybe specify SCRIPTS_PATH dynamic variable?"
                    fi
            fi

> +   else
> +      SCRIPTS_PATH="$BENCHMARK_LMBENCH2_SCRIPTS_PATH"
> +   fi
> +
>     # some trickery to get the directory right
>     if [ -n "$PREFIX" ] ; then
>        LMBENCH_OS=`ls ./bin`
You should probably use this instead:
          LMBENCH_OS=$(cmd ls $SCRIPTS_PATH/bin)
The previous command is run in the build directory, but I'm not sure that the
build directory will be correctly populated in your use case.

Just as a side note, I prefer the $() command syntax, over using
backticks, to set shell variables from command output.

>     else
> -      LMBENCH_OS=`ls ./bin`
> -      echo "lmbench_os: $LMBENCH_OS"
> -      echo "curr path: $(pwd)"
> -      LMBENCH_OS=$(scripts/os)
> -      echo "lmbench_os: $LMBENCH_OS"
> +      get_program_path os $SCRIPTS_PATH $BOARD_TESTDIR/fuego.$TESTDIR/scripts/os
> +      LMBENCH_OS=$(safe_cmd "$PROGRAM_OS")
This can be 'cmd' instead of 'safe_cmd'.

safe_cmd should only be used if there's a significant chance of the command exhausting
memory on the target board.  You were perhaps misled by the other uses of 'safe_cmd'
here, some of which should just be 'cmd'.

>     fi
> -   safe_cmd "rm -rf $BOARD_TESTDIR/fuego.$TESTDIR/results"
> -   safe_cmd "cd $BOARD_TESTDIR/fuego.$TESTDIR/scripts; OS=$LMBENCH_OS ./config-run"
> -   safe_cmd "cd $BOARD_TESTDIR/fuego.$TESTDIR/scripts; OS=$LMBENCH_OS ./results"
> -   report "cd $BOARD_TESTDIR/fuego.$TESTDIR/scripts; ./getsummary ../results/$LMBENCH_OS/*.0"
> +   safe_cmd "rm -rf $SCRIPTS_PATH/../results"
This should just be 'cmd'.  (This incorrect usage was there before, but can you fix it in 
a second revision of your patch?)

Also, this assumes the 'results' directory is relative to SCRIPTS_PATH, which
is not true for my Ubuntu (/Debian) package for lmbench.
Please consider using $RESULTS_DIR (see below)

> +   safe_cmd "cd $SCRIPTS_PATH; OS=$LMBENCH_OS ./config-run"
> +   safe_cmd "cd $SCRIPTS_PATH; OS=$LMBENCH_OS ./results"
> +   report "cd $SCRIPTS_PATH; ./getsummary ../results/$LMBENCH_OS/*.0"

This structure assumes that the 'results' directory is underneath the SCRIPTS_PATH.
Can you confirm that this is indeed the case for your test system?

I'm thinking about possibly autodetecting the 'results' directory also, if it's
not found in the fuego  test directory.  This is just to handle a case like the
Ubuntu package, where it puts results under /var/ instead of /usr.

Maybe using something like this:
RESULTS_DIR="$SCRIPTS_PATH/../results"
if cmd "test ! -d $RESULTS_DIR" ; then
    RESULTS_RESULTS=/var/lib/lmbench/results
     if cmd "test ! -d $RESULTS_DIR" ; then
             abort_job "Could not find lmbench results directory. Maybe specify SCRIPTS_PATH dynamic variable?"
     fi
fi

>  }
> 
>  function test_cleanup {
> --
> 2.20.1
> 

I haven't tested any of my suggestions.  Can you please respond to my above questions, and submit
another version of this patch based on my suggestions (or let me know if you have alternative
suggestions or feedback?)

Thanks,
 -- Tim