[LTP] [PATCH] cpuset_regression_test: Fix for already existing cpusets
Joerg Vehlow
lkml@jv-coder.de
Mon Nov 16 12:58:29 CET 2020
Hi,
a ping for this patch? Is something like that (workaround environment
issues) not wanted in ltp?
Greets
Jörg
On 11/15/2019 11:10 AM, Joerg Vehlow wrote:
> From: Joerg Vehlow <joerg.vehlow@aox-tech.de>
>
> If there are already cpusets defined on the system, that use cpu 0-1,
> the test fails, because it tries to exclusively use cpu 0-1 for the
> testcase.
>
> The fix sets the cpuset for all cgroups to 0 and disables exclusive
> cpu usage for the duration of the test and restores it on cleanup.
> For the test only cpu 1 is set as exclusive. This is enough to
> trigger the bug this regression test was designed for.
> This was tested by reverting the commit mentioned in the testcase.
>
> Signed-off-by: Joerg Vehlow <joerg.vehlow@aox-tech.de>
> ---
> .../cpuset/cpuset_regression_test.sh | 58 +++++++++++++++++--
> 1 file changed, 54 insertions(+), 4 deletions(-)
>
> diff --git a/testcases/kernel/controllers/cpuset/cpuset_regression_test.sh b/testcases/kernel/controllers/cpuset/cpuset_regression_test.sh
> index dccfd91cd..ed5e30f2a 100755
> --- a/testcases/kernel/controllers/cpuset/cpuset_regression_test.sh
> +++ b/testcases/kernel/controllers/cpuset/cpuset_regression_test.sh
> @@ -26,6 +26,49 @@ TCID=cpuset_regression_test
> TST_TOTAL=1
> . test.sh
>
> +# cpuset_backup_and_update <backup_dir> <what> <value>
> +# Create backup of the values of a specific file (<what>)
> +# in all cpuset groups and set the value to <value>
> +# The backup is written to <backup_dir> in the same structure
> +# as in the cpuset filesystem
> +cpuset_backup_and_update()
> +{
> + local backup_dir=$1
> + local what=$2
> + local value=$3
> + local old_dir=$(pwd)
> +
> + cd ${root_cpuset_dir}
> + find . -mindepth 2 -name ${what} -print0 |
> + while IFS= read -r -d '' file; do
> + tst_resm TINFO "Backup ${file} ($(cat "${file}"))"
> + mkdir -p "$(dirname "${backup_dir}/${file}")"
> + cat "${file}" > "${backup_dir}/${file}"
> + echo "${value}" > "${file}"
> + done
> +
> + cd ${old_dir}
> +}
> +
> +# cpuset_restore <backup_dir> <what>
> +# Restores the value of a file (<what>) in all cpuset
> +# groups from the backup created by cpuset_backup_and_update
> +cpuset_restore()
> +{
> + local backup_dir=$1
> + local what=$2
> + local old_dir=$(pwd)
> +
> + cd ${backup_dir}
> + find . -mindepth 2 -name ${what} -print0 |
> + while IFS= read -r -d '' file; do
> + tst_resm TINFO "Restore ${file} ($(cat "${file}"))"
> + cat "${file}" > "${root_cpuset_dir}/${file}"
> + done
> +
> + cd ${old_dir}
> +}
> +
> setup()
> {
> tst_require_root
> @@ -69,6 +112,10 @@ setup()
> "do not exist."
> fi
>
> + mkdir cpuset_backup
> + cpuset_backup_and_update "$(pwd)/cpuset_backup" ${cpu_exclusive} 0
> + cpuset_backup_and_update "$(pwd)/cpuset_backup" cpuset.cpus 0
> +
> cpu_exclusive_value=$(cat ${root_cpuset_dir}/${cpu_exclusive})
> if [ "${cpu_exclusive_value}" != "1" ];then
> echo 1 > ${root_cpuset_dir}/${cpu_exclusive}
> @@ -86,6 +133,9 @@ cleanup()
> rmdir ${root_cpuset_dir}/testdir
> fi
>
> + cpuset_restore "$(pwd)/cpuset_backup" cpuset.cpus
> + cpuset_restore "$(pwd)/cpuset_backup" ${cpu_exclusive}
> +
> if [ "$cpu_exclusive_value" != 1 ]; then
> # Need to flush, or may be output:
> # "write error: Device or resource busy"
> @@ -129,15 +179,15 @@ cpuset_test()
> fi
>
> # ${cpus} is empty at the begin, that maybe make the system *crash*.
> - echo 0-1 > ${root_cpuset_dir}/testdir/${cpus}
> + echo 1 > ${root_cpuset_dir}/testdir/${cpus}
> if [ $? -ne 0 ]; then
> - tst_brkm TFAIL "'echo 0-1 >" \
> + tst_brkm TFAIL "'echo 1 >" \
> "${root_cpuset_dir}/testdir/${cpus}' failed"
> fi
>
> local cpus_value=$(cat ${root_cpuset_dir}/testdir/${cpus})
> - if [ "${cpus_value}" != "0-1" ]; then
> - tst_brkm TFAIL "${cpus} is '${cpus_value}', expected '0-1'"
> + if [ "${cpus_value}" != "1" ]; then
> + tst_brkm TFAIL "${cpus} is '${cpus_value}', expected '1'"
> fi
>
> tst_resm TPASS "Bug is not reproduced"
More information about the ltp
mailing list