Re: [kvm-unit-tests PATCH v2 01/18] runtime: Update MAX_SMP probe

Nikos Nikoleris
2024-03-03T21:43:42Z

On 27/02/2024 19:21, Andrew Jones wrote:
> Arm's MAX_SMP probing must have stopped working at some point due to
> QEMU's error message changing, but nobody noticed. Also, the probing
> should work for at least x86 now too, so the comment isn't correct
> anymore either. We could probably just delete this probe thing, but
> in case it could still serve some purpose we can also keep it, but
> updated for later QEMU, and only enabled when a new run_tests.sh
> command line option is provided.
>
> Signed-off-by: Andrew Jones <andrew.jones@linux.dev>

Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>

FWIW, probe_maxsmp doesn't have the expected outcome on MacOS. Not sure
why, but on my MBP (M1 Pro), HVF supports up to 64 vCPUs and machine
'virt-8.2' supports up to 512. Probably, this is another argument why
this should be optional.

Thanks,

Nikos

> ---
> run_tests.sh | 5 ++++-
> scripts/runtime.bash | 19 ++++++++++---------
> 2 files changed, 14 insertions(+), 10 deletions(-)
>
> diff --git a/run_tests.sh b/run_tests.sh
> index abb0ab773362..bb3024ff95b1 100755
> --- a/run_tests.sh
> +++ b/run_tests.sh
> @@ -44,7 +44,7 @@ fi
>
> only_tests=""
> list_tests=""
> -args=$(getopt -u -o ag:htj:vl -l all,group:,help,tap13,parallel:,verbose,list -- $*)
> +args=$(getopt -u -o ag:htj:vl -l all,group:,help,tap13,parallel:,verbose,list,probe-maxsmp -- $*)
> [ $? -ne 0 ] && exit 2;
> set -- $args;
> while [ $# -gt 0 ]; do
> @@ -78,6 +78,9 @@ while [ $# -gt 0 ]; do
> -l | --list)
> list_tests="yes"
> ;;
> + --probe-maxsmp)
> + probe_maxsmp
> + ;;
> --)
> ;;
> *)
> diff --git a/scripts/runtime.bash b/scripts/runtime.bash
> index c73fb0240d12..f2e43bb1ed60 100644
> --- a/scripts/runtime.bash
> +++ b/scripts/runtime.bash
> @@ -200,12 +200,13 @@ function run()
> #
> # Probe for MAX_SMP, in case it's less than the number of host cpus.
> #
> -# This probing currently only works for ARM, as x86 bails on another
> -# error first, so this check is only run for ARM and ARM64. The
> -# parameter expansion takes the last number from the QEMU error
> -# message, which gives the allowable MAX_SMP.
> -if [[ $ARCH == 'arm' || $ARCH == 'arm64' ]] &&
> - smp=$($RUNTIME_arch_run _NO_FILE_4Uhere_ -smp $MAX_SMP |& grep 'exceeds max CPUs'); then
> - smp=${smp##*(}
> - MAX_SMP=${smp:0:-1}
> -fi
> +function probe_maxsmp()
> +{
> + local smp
> +
> + if smp=$($RUNTIME_arch_run _NO_FILE_4Uhere_ -smp $MAX_SMP |& grep 'Invalid SMP CPUs'); then
> + smp=${smp##* }
> + echo "Restricting MAX_SMP from ($MAX_SMP) to the max supported ($smp)" >&2
> + MAX_SMP=$smp
> + fi
> +}