[LTP] [PATCH] add cpuplugd

Cyril Hrubis chrubis@suse.cz
Mon Apr 15 16:03:07 CEST 2019


Hi!
First of all sorry for a late response.

> ---
>  testcases/commands/cpuplugd/README.md         |  39 +++
>  testcases/commands/cpuplugd/cmm.conf          |  16 +
>  testcases/commands/cpuplugd/cpu.conf          |  14 +
>  testcases/commands/cpuplugd/cpuplugd.conf     |  21 ++
>  testcases/commands/cpuplugd/cpuplugd.sh       | 311 ++++++++++++++++++
>  testcases/commands/cpuplugd/cpuplugd_1.sh     | 197 +++++++++++
>  testcases/commands/cpuplugd/cpuplugdcmm.conf  |  16 +
>  testcases/commands/cpuplugd/cpuplugdtemp.conf |  21 ++
>  8 files changed, 635 insertions(+)
>  create mode 100644 testcases/commands/cpuplugd/README.md
>  create mode 100644 testcases/commands/cpuplugd/cmm.conf
>  create mode 100644 testcases/commands/cpuplugd/cpu.conf
>  create mode 100644 testcases/commands/cpuplugd/cpuplugd.conf
>  create mode 100644 testcases/commands/cpuplugd/cpuplugd.sh
>  create mode 100644 testcases/commands/cpuplugd/cpuplugd_1.sh
>  create mode 100644 testcases/commands/cpuplugd/cpuplugdcmm.conf
>  create mode 100644 testcases/commands/cpuplugd/cpuplugdtemp.conf

Can you please put the conf files into a datafile directory? I explained
that in the previous review.

> diff --git a/testcases/commands/cpuplugd/README.md b/testcases/commands/cpuplugd/README.md
> new file mode 100644
> index 000000000..e72162dfd
> --- /dev/null
> +++ b/testcases/commands/cpuplugd/README.md
> @@ -0,0 +1,39 @@
> +# TOOL_s390_kernel_1
> +
> +cpuplugd: Daemon that manages CPU and memory resources based on a set of rules.  
> +Depending on the workload CPUs can be enabled or disabled.  
> +The amount of memory can be increased or decreased exploiting the Cooperative Memory Management (CMM1) feature.
> +
> +## Getting started
> +
> +The test case contains the following scripts:
> +
> +- **cmm.conf** _configuration file_
> +- **cpu.conf** _configuration file_
> +- **cpuplugd.conf** _configuration file_
> +- **cpuplugd.sh** _verification of cpuplugd tool_
> +- **cpuplugdcmm.conf** _configuration file_
> +- **cpuplugdtemp.conf** _configuration file_
> +- **mon_fsstatd.sh** _mon tool tests_
> +
> +## Prerequisites
> +
> +z/VM guest must be prepared to be populated with SLES guest OS, all scripts must be available on some local server via http to be fetched from zVM guest when ready.
> +
> +## Installation
> +
> +OpenQA deploys SLE onto a z/VM guest automatically.
> +
> +## Running the tests
> +
> +Transfer test case to the target system and run locally:  
> +`./cpuplugd.sh`  
> +`./mon_fsstatd.sh`
> +
> +## Versioning
> +
> +Tested already on SLES12.3.
> +
> +## License
> +
> +The files in this directory are licensed under the "FSF All Permissive License" except if indicated otherwise in the file.

And I asked for the description to be put into a top level commend in
the source code which is convention we use in LTP.

> diff --git a/testcases/commands/cpuplugd/cmm.conf b/testcases/commands/cpuplugd/cmm.conf
> new file mode 100644
> index 000000000..d94a0700d
> --- /dev/null
> +++ b/testcases/commands/cpuplugd/cmm.conf
> @@ -0,0 +1,16 @@
> +# Copyright (C) 2018 IBM Corp.
> +# 
> +# Copying and distribution of this file, with or without modification,
> +# are permitted in any medium without royalty provided the copyright
> +# notice and this notice are preserved.  This file is offered as-is,
> +# without any warranty.
> +
> +
> +UPDATE="1"
> +
> +CMM_MIN="5000"
> +CMM_INC="100"
> +CMM_MAX="20000"
> +
> +MEMPLUG="swaprate < 200"
> +MEMUNPLUG="swaprate > 5000"
> diff --git a/testcases/commands/cpuplugd/cpu.conf b/testcases/commands/cpuplugd/cpu.conf
> new file mode 100644
> index 000000000..167ad6001
> --- /dev/null
> +++ b/testcases/commands/cpuplugd/cpu.conf
> @@ -0,0 +1,14 @@
> +# Copyright (C) 2018 IBM Corp.
> +# 
> +# Copying and distribution of this file, with or without modification,
> +# are permitted in any medium without royalty provided the copyright
> +# notice and this notice are preserved.  This file is offered as-is,
> +# without any warranty.
> +
> +
> +CPU_MIN="1"
> +CPU_MAX="3"
> +UPDATE="1"
> +
> +HOTPLUG="(loadavg > onumcpus + 0.75) & (idle < 10.0)"
> +HOTUNPLUG="(loadavg < onumcpus - 0.25) | (idle > 50)"
> diff --git a/testcases/commands/cpuplugd/cpuplugd.conf b/testcases/commands/cpuplugd/cpuplugd.conf
> new file mode 100644
> index 000000000..dd3190b7d
> --- /dev/null
> +++ b/testcases/commands/cpuplugd/cpuplugd.conf
> @@ -0,0 +1,21 @@
> +# Copyright (C) 2018 IBM Corp.
> +# 
> +# Copying and distribution of this file, with or without modification,
> +# are permitted in any medium without royalty provided the copyright
> +# notice and this notice are preserved.  This file is offered as-is,
> +# without any warranty.
> +
> +
> +CPU_MIN="1"
> +CPU_MAX="3"
> +UPDATE="1"
> +
> +HOTPLUG="(loadavg > onumcpus + 0.75) & (idle < 10.0)"
> +HOTUNPLUG="(loadavg < onumcpus - 0.25) | (idle > 50)"
> +
> +CMM_MIN="0"
> +CMM_INC="10"
> +CMM_MAX="10"
> +
> +MEMPLUG="swaprate < 200"
> +MEMUNPLUG="swaprate > 5000"
> diff --git a/testcases/commands/cpuplugd/cpuplugd.sh b/testcases/commands/cpuplugd/cpuplugd.sh
> new file mode 100644
> index 000000000..2089431f2
> --- /dev/null
> +++ b/testcases/commands/cpuplugd/cpuplugd.sh
> @@ -0,0 +1,311 @@
> +# Copyright (C) 2018 IBM Corp.
> +# 
> +# Copying and distribution of this file, with or without modification,
> +# are permitted in any medium without royalty provided the copyright
> +# notice and this notice are preserved.  This file is offered as-is,
> +# without any warranty.
> +
> +
> +#!/usr/bin/env bash
> +###############################################################################
> +# The following changes were made in order to fix the cpuplugd daemon status
> +# verification and also to perform it before trying to stop the daemon:
> +#
> +# - serviceruns and assert_cpuplugd_not_running functions eliminated;
> +# - stop_cpuplugd function rebuilt;
> +# - assert_cpuplugd_running, assert_cpuplugd_not_running and serviceruns
> +# functions merged into new rebuilt assert_cpuplugd_running function;
> +# - changed all assert_cpuplugd_running function calls to use 2 arguments;
> +# - inserted assert_cpuplugd_running function calls before trying to stop
> +# cpuplugd daemon.
> +#
> +# Changes
> +# -------
> +# 07.03.2018  Corrections for SLES15 (no PID file when
> +#                     running in interactive mode)
> +#
> +###############################################################################

Please do not put changelog into the source code. We track code in git,
there is no point in having comments like these at all.

> +TST_CNT=11
> +TST_TESTFUNC=cpuplugd_test
> +. tst_test.sh
> +
> +number_of_cpus=$(lscpu | grep -wF "CPU(s):" | awk 'FNR == 1 {print $2}')
> +(( SLEEP_X = number_of_cpus * 2 ))
> +
> +# inherit all variables to subprocesses
> +set -a
> +
> +readonly CMM_MOD="$(grep "CONFIG_CMM=" /boot/config-$(uname -r) | cut -d= -f2 | tr '[:upper:]' '[:lower:]')"

This is broken by design, different distributions have the kernel config
in different places. We do have a library call in C that can be used to
query kernel config variables.

I can create an helper in testcases/lib/ and plug that in to the
tst_test.sh so that we can query these from shell too.

> +for f in lib/*.sh; do source $f; done

There is no lib subdirectory added in this patchset.

> +source ./cpuplugd_1.sh || exit 1
> +
> +init_tests

This is not defined anywhere in the test and moreover should be called
in the test setup.

> +cpuplugd_run()
> +{
> +
> +        $1
> +        if [ $? -eq $2 ]; then
> +                tst_res TPASS "'$1' returned '$2'. Test passed"
> +        else
> +                tst_res TFAIL "'$1' did not return '$2'. Test failed"
> +        fi
> +}
> +
> +cpuplugd_test1()
> +{
> +    echo "Cpuplugd version"
> +    cpuplugd=$(cpuplugd -v | head -n 1 | cut -d":" -f2 | cut -d" " -f10)

Are you sure that the output of cpuplugd is stable enough so that we
always get the right value here?

> +    cpuplugd_run "cpuplugd -v" 0 
                                   ^
				   Trailing whitespace.
> +    echo "Cpuplugd version $cpuplugd"

Huh, we are not checking that the version is sane here?

What is the point of this test?

> +}
> +cpuplugd_test2()
> +{
> +    echo "Cpuplugd Help information checking"
> +    echo "Checking for Help information with -h option"
> +    cpuplugd_run "cpuplugd -h" 0
> +    echo "Checking for Help information with --help option"
> +    cpuplugd_run "cpuplugd --help" 0

Hmm, basically we do check that the -h and --help flag cause the binary
to exit with 0, that is not much better than the version check.

> +}
> +#
> +# Run several tests with incomplete/broken configuration.
> +# Correct behavior for the daemon is not to start.
> +#
> +cpuplugd_test3()
> +{
> +    echo "Invalid options checking"
> +    echo "Checking for Invalid option -H"
> +    cpuplugd_run "cpuplugd -H" 1
> +    echo "Checking for Invalid option -1234"
> +    cpuplugd_run "cpuplugd -1234" 1

This is a bit better, checking for correct error exit with invalid
option does make some sense.

> +}
> +
> +cpuplugd_test4()
> +{
> +    echo "Run daemon without UPDATE entry in config"
> +    prepare_incomplete_cpu_test_config UPDATE
> +    cpu_test_with_error_in_cpuplgdtest_conf 1 1
> +}
> +
> +cpuplugd_test5()
> +{
> +    echo "Run Daemon without CPU_MIN entry"
> +    prepare_incomplete_cpu_test_config CPU_MIN
> +    if isVM; then
> +        if [[ "${CMM_MOD}" = "m" || -z "${CMM_MOD}" ]]; then
> +            cpu_test_with_error_in_cpuplgdtest_conf 1 1
> +        elif [[ "${CMM_MOD}" = "y" ]]; then
> +            cpu_test_with_error_in_cpuplgdtest_conf 0 1
> +        fi
> +    else
> +        cpu_test_with_error_in_cpuplgdtest_conf 1 1
> +    fi

This if block is repeated over and overe, can we rather than this have a
function that returns 0 or 1 depending on the CMM_MOD value and pass the
result to the function?

> +}
> +
> +cpuplugd_test6()
> +{
> +    echo "Run Daemon without CPU_MAX entry"
> +    prepare_incomplete_cpu_test_config CPU_MAX
> +    cpu_test_with_error_in_cpuplgdtest_conf 1 1
> +}
> +cpuplugd_test7()
> +{
> +    echo "Run Daemon without HOTPLUG entry"
> +    prepare_incomplete_cpu_test_config HOTPLUG
> +    if isVM; then
> +        if [[ "${CMM_MOD}" = "m" || -z "${CMM_MOD}" ]]; then
> +            cpu_test_with_error_in_cpuplgdtest_conf 1 1
> +        elif [[ "${CMM_MOD}" = "y" ]]; then
> +            cpu_test_with_error_in_cpuplgdtest_conf 0 1
> +        fi
> +    else
> +        cpu_test_with_error_in_cpuplgdtest_conf 1 1
> +    fi
> +}
> +cpuplugd_test8()
> +{
> +    echo "Run Daemon without HOTUNPLUG entry"
> +    prepare_incomplete_cpu_test_config HOTUNPLUG
> +    if isVM; then
> +        if [[ "${CMM_MOD}" = "m" || -z "${CMM_MOD}" ]]; then
> +            cpu_test_with_error_in_cpuplgdtest_conf 1 1
> +        elif [[ "${CMM_MOD}" = "y" ]]; then
> +            cpu_test_with_error_in_cpuplgdtest_conf 0 1
> +        fi
> +    else
> +        cpu_test_with_error_in_cpuplgdtest_conf 1 1
> +    fi
> +}
> +
> +#
> +# Good path test for CPU plugging
> +#
> +# Run daemon with only cpu configuration in configuration file
> +# CPU Hotplug  with  3 Active cpus and CPU_MIN=1 and CPU_MAX=3
> +# Verify that number of CPUs is reduced after daemon is started
> +# and restored after daemon is stopped.
> +#
> +
> +cpuplugd_test9()
> +{
> +	echo  "Run Daemon with only cpu configuration"
> +
> +        assert_cpuplugd_running 1 1
> +
> +        cpusbefore=$(grep "processors" /proc/cpuinfo | cut -d":" -f2)
> +        echo "running daemon with only cpu config" > cpuf
> +        echo "start cpuplugd -V -c cpu.conf -f "
> +        cpuplugd  -V -c cpu.conf -f >> cpuf &
> +        sleep 2
> +
> +        assert_cpuplugd_running 0 1
> +        RC=$?
> +        echo "Let Daemon run for few seconds, so that it does the hotplugging"
> +        sleep ${SLEEP_X}
> +
> +        cpusrunning=$(grep "processors" /proc/cpuinfo | cut -d":" -f2)
> +
> +        if [[ ${RC} -eq 0 ]]; then
> +            stop_cpuplugd
> +        fi
> +
> +        sleep 2
> +        cpusafter=$(grep "processors" /proc/cpuinfo | cut -d":" -f2)
> +        i=0
> +
> +        if (( "$cpusbefore" != "$cpusrunning" )) && (( "$cpusbefore" == "$cpusafter" )); then
> +            i=1
> +        fi

The indentation is broken here, please fix.

> +        assert_warn $i 1  "Verify that number of CPUs before, while and after the daemon runs changes: cpusbefore=$cpusbefore, cpusduring=$cpusrunning, cpusafterter=$cpusafter"

This message is far too long, it should be shorther and to the point.

> +}
> +
> +cpuplugd_test10()
> +{
> +#
> +# Memory Hotplug tests (z/VM only)
> +#
> +   if isVM; then
> +    #
> +    # Run several tests with incomplete/broken configuration.
> +    # Correct behavior for the daemon is not to start.
> +    #
> +
> +        echo "Run Daemon without loading CMM module"
> +            if [[ "${CMM_MOD}" != "m" ]]; then
> +                assert_warn 0 0 "This test is not possible to be performed since CMM was builtin within the kernel and cannot be unloaded."
> +            else
> +                assert_cpuplugd_running 1 0
> +                RC=$?
> +
> +                if [[ ${RC} -eq 0 ]]; then
> +                   stop_cpuplugd
> +                fi
> +
> +                rmmod cmm
> +                lsmod | grep -q cmm
> +                assert_warn $? 1 "Verify that CMM module is not loaded"
> +
> +                cpuplugd -V -c cmm.conf -f >> cmm.log &
> +                echo "Daemon should fail to run as CMM module is not loaded"
> +                sleep 2
> +
> +                assert_cpuplugd_running 1 1
> +                RC=$?
> +
> +                rm -rf cmm.log
> +
> +                if [[ ${RC} -eq 0 ]]; then
> +                    stop_cpuplugd
> +                fi
> +            fi
> +        
> +
> +        echo "Run Daemon without CMM_MIN entry"
> +            prepare_incomplete_cmm_test_config CMM_MIN
> +            cmm_test_with_error_in_cpuplgdtest_conf 1 1
> +        
> +
> +        echo "Run Daemon without CMM_MAX entry"
> +            prepare_incomplete_cmm_test_config CMM_MAX
> +            cmm_test_with_error_in_cpuplgdtest_conf 1 1
> +        
> +
> +        echo "Run Daemon without CMM_INC entry"
> +            prepare_incomplete_cmm_test_config CMM_INC
> +            cmm_test_with_error_in_cpuplgdtest_conf 1 1
> +        
> +
> +        echo "Run Daemon without MEMPLUG entry"
> +            prepare_incomplete_cmm_test_config MEMPLUG
> +            cmm_test_with_error_in_cpuplgdtest_conf 1 1
> +        
> +
> +        echo "Run Daemon without MEMUNPLUG entry"
> +            prepare_incomplete_cmm_test_config MEMUNPLUG
> +            cmm_test_with_error_in_cpuplgdtest_conf 1 1
> +        
> +
> +#
> +# Good path test for CMM plugging
> +#
> +        echo "Run Daemon with only CMM configuration"
> +            if [[ "${CMM_MOD}" = "m" ]]; then
> +                modprobe cmm
> +            fi
> +
> +            echo 1000 > /proc/sys/vm/cmm_pages
> +            sleep 1
> +
> +            cmm_pages_before=$(cat /proc/sys/vm/cmm_pages)
> +            cpusbefore=$(grep "processors" /proc/cpuinfo | cut -d":" -f2)
> +            cpuplugd -V -c cmm.conf -f  >> cmm.log &
> +            sleep 2
> +
> +            assert_cpuplugd_running 0 1
> +            RC=$?
> +            sleep 4
> +
> +            cmm_pages_running=$(cat /proc/sys/vm/cmm_pages)
> +            cpusrunning=$(grep "processors" /proc/cpuinfo | cut -d":" -f2)
> +
> +            if [[ ${RC} -eq 0 ]]; then
> +                stop_cpuplugd
> +            fi
> +
> +            sleep 2
> +
> +            cmm_pages_after=$(cat /proc/sys/vm/cmm_pages)
> +            cpusafter=$(grep "processors" /proc/cpuinfo | cut -d":" -f2)
> +            i=0
> +
> +            if (( "$cmm_pages_before" != "$cmm_pages_running" )) && (( "$cmm_pages_before" == "$cmm_pages_after" )); then
> +                if (( "$cpusbefore" == "$cpusrunning" )) && (( "$cpusbefore" == "$cpusafter" )); then
> +                    i=1
> +                fi
> +            fi
> +
> +            assert_warn $i 1  "Verify that the number of cmm_pages before, while and after the daemon runs changes:                 cmm_pages_before=$cmm_pages_before, cmm_pages_running=$cmm_pages_running, cmm_pages_after=$cmm_pages_after. CPU hotplugging should not happen and cpu configuration should remain constant: cpus_before=$cpusbefore, cpus_during=$cpusrunning, cpus_after=$cpusafter"
> +        
> +    else
> +        # if it is LPAR, Memory Hotplug cannot be done
> +        assert_exec 1 "modprobe vmcp"
> +        echo "This is LPAR. Skip CMM Tests"
> +    fi
> +}
> +
> +cpuplugd_test11()
> +{
> +    echo "Doing the cleanup tasks ..."
> +    cpuplugd_run "service cpuplugd stop" 0
> +    
> +    if [[ "${CMM_MOD}" = "m" ]]; then
> +        cpuplugd_run "rmmod cmm" 0
> +    fi
> +
> +    cpuplugd_run "rm -rf cpuf cmm log cmm.log cpuplugdtest.conf te.tes out.txt.tmp" 0
> +    
> +}
> +
> +tst_run
> diff --git a/testcases/commands/cpuplugd/cpuplugd_1.sh b/testcases/commands/cpuplugd/cpuplugd_1.sh
> new file mode 100644
> index 000000000..32d596377
> --- /dev/null
> +++ b/testcases/commands/cpuplugd/cpuplugd_1.sh
> @@ -0,0 +1,197 @@
> +# Copyright (C) 2018 IBM Corp.
> +# 
> +# Copying and distribution of this file, with or without modification,
> +# are permitted in any medium without royalty provided the copyright
> +# notice and this notice are preserved.  This file is offered as-is,
> +# without any warranty.
> +
> +
> +#!/usr/bin/env bash
> +
> +for f in lib/*.sh; do source $f; done
> +
> +assert_cpuplugd_running() {
> +    local NOT_RUNNING=${1}
> +    local WARN=${2}
> +
> +    if [[ ${NOT_RUNNING} -eq 0 ]]; then
          ^
	  Please use just single brackets, double brackets are
	  non-standard and does not work with many shells.

> +        MESSAGE="cpuplugd is running"
> +    elif [[ ${NOT_RUNNING} -eq 1 ]]; then
> +        MESSAGE="cpuplugd is not running"
> +    fi
> +
> +    ps -e | grep -q cpuplugd
> +    RC=$?
> +
> +    if [[ ${WARN} -eq 1 ]]; then
               ^
	       This is called WARN but makes the test PASS/FAIL, that's
	       wrong it should be called differently.

> +    	if [ ${RC} -eq ${NOT_RUNNING} ]; then
> +        	    tst_res TPASS "${MESSAGE}"
> +	    else
> +        	    tst_res TFAIL "${MESSAGE}"
   ^
   Spaces before tabs. Can you please configure your editor not to leave
   these around?

> +	    fi
> +    fi
> +
> +    return ${RC}
> +}
> +
> +stop_cpuplugd() {
> +    echo "stop cpuplugd"
> +    # With Sles15 there is no PID file for cpuplugd
> +    # when running in the foreground
> +    # if ( isSles15 ); then
> +    #     if [ -e /run/cpuplugd.pid ]; then
> +    #        kill $(cat /run/cpuplugd.pid)
> +    #     else
> +    #        kill $(ps -e | grep -i cpuplugd | awk '{print $1}')
> +    #     fi
> +    # else
> +    #     kill $(cat /var/run/cpuplugd.pid)
> +    # fi
> +    #########################################################
> +    # updated start                                   #
> +    #########################################################

This 'history tracking' comment does not belong to the code.

> +        if [ -e /run/cpuplugd.pid ]; then
> +           kill $(cat /run/cpuplugd.pid)
> +    elif [ -e /var/run/cpuplugd.pid ]; then
> +       kill $(cat /var/run/cpuplugd.pid)
> +        else
> +	   kill $(ps -e | grep -i cpuplugd | awk '{print $1}')
> +        fi

This part has completely broken indentation, please fix.

> +    #########################################################
> +    # updated end                                     #
> +    #########################################################

This part as well.

> +    until ! assert_cpuplugd_running 1 0; do
> +        echo "cpuplugd is still running"

No echo in tests, use tst_res.

> +        sleep 1
> +    done

We do have TST_RETRY_FUNC in the test API, please use that one here
instead.

> +    echo "check cpuplugd is not running"

Here as well, no echo in tests.

> +    if [ $? -eq 0 ]; then
> +            tst_res TPASS "Test passed"
> +    else
> +            tst_res TFAIL "Test failed"
> +    fi
> +
> +}
> +
> +#Function to remove the given entry ($1) from test configuration file
> +prepare_incomplete_cpu_test_config() {
> +    rm -rf cpuplugdtest.conf

Uh, why -r this is not directory at all.

> +    cp cpuplugd.conf cpuplugdtest.conf
> +    sed -e 's/'$1'/#'$1'/' -i cpuplugdtest.conf
> +}
> +
> +prepare_incomplete_cmm_test_config() {
> +    rm -rf cpuplugdtest.conf

Here as well.

> +    cp cpuplugdcmm.conf cpuplugdtest.conf
> +    sed -e 's/'$1'/#'$1'/' -i cpuplugdtest.conf
> +}
> +
> +#run cpuplgd with cpuplugdtest.conf and verify change in number of cpus before/during/after running the daemon
> +cpu_test_with_error_in_cpuplgdtest_conf() {
> +    local NOT_RUNNING=${1}
> +    local WARN=${2}
> +
> +    # cmm must not be loaded so that cpuplugd will only consider the cpu configuration
> +    if [[ "${CMM_MOD}" = "m" ]]; then
> +        rmmod cmm
> +    fi
> +
> +    assert_cpuplugd_running 1 0
> +    RC=$?
> +
> +    if [[ ${RC} -eq 0 ]]; then
> +        stop_cpuplugd
> +    fi
> +
> +    cpusbefore=$(grep "processors" /proc/cpuinfo | cut -d":" -f2)

This is not correct way how to count CPUs, the output of cpuinfo varies
between platforms and we even have tst_getconf _NPROCESSORS_ONLN, that
should work for you, or is there a reason not to use that call?

> +    echo "start cpuplugd -V -c cpuplugdtest.conf -f"

No echo in test, use tst_res

> +    cpuplugd -V -c cpuplugdtest.conf -f >> cpuf &
> +    sleep 2

What you are waiting here for?

Can't we grep the cpuf file in a loop with a small sleep and wait for
some initialization being done that way?

> +    if [[ "${CMM_MOD}" = "m" ]]; then
> +        assert_cpuplugd_running ${NOT_RUNNING} ${WARN} 
                                                         ^
						trailing whitespace
						Please configure your
						editor not to leave
						these around.
> +    else
> +        assert_cpuplugd_running ${NOT_RUNNING} ${WARN}
> +    fi

Is it me or are these two branches identical?

> +    RC=$?
> +
> +    # Wait a little to allow for (undesired) cpu configuration change
> +    sleep ${SLEEP_X}
> +    cpusrunning=$(grep "processors" /proc/cpuinfo | cut -d":" -f2)

Here as well, use tst_getconf.

> +    if [[ ${RC} -eq 0 ]]; then
> +        stop_cpuplugd
> +    fi
> +
> +    cpusafter=$(grep "processors" /proc/cpuinfo | cut -d":" -f2)


Here as well, use tst_getconf.

> +    i=0
> +
> +    if (( "$cpusbefore" == "$cpusrunning" )) && (( "$cpusrunning" == "$cpusafter" )); then
> +        i=1
> +    fi
> +
> +    echo  "Verify that CPU configuration does not change: cpusbefore=$cpusbefore, cpusduring=$cpusrunning, cpusafterter=$cpusafter"

No echo in tests.

> +    if [ $i -eq 1 ]; then
> +            tst_res TPASS "Test passed"
> +    else
> +            tst_res TFAIL "Test failed"
> +    fi

Now these two tst_res messages should actually say if the cpu
configuration was changed or not, not the echo before this if.

> +}

And the comments for prepare_incomplete_cpu_test_config apply to other
tests as well.

> +#run cpuplgd with cpuplugdtest.conf and verify change in number of cmm pagess before/during/after running the daemon
> +cmm_test_with_error_in_cpuplgdtest_conf() {
> +    local NOT_RUNNING=${1}
> +    local WARN=${2}
> +
> +    assert_cpuplugd_running 1 0
> +    RC=$?
> +
> +    if [[ ${RC} -eq 0 ]]; then
> +        stop_cpuplugd
> +    fi
> +
> +    if [[ "${CMM_MOD}" = "m" ]]; then
> +        modprobe cmm
> +    fi
> +
> +    echo 1000 > /proc/sys/vm/cmm_pages
> +    sleep 2

What are you waiting for here?

> +    cmm_pages_before=$(cat /proc/sys/vm/cmm_pages)
> +
> +    echo "start cpuplugd -V -c cpuplugdtest.conf -f"

Here as well, no echo.

> +    cpuplugd -V -c cpuplugdtest.conf -f >> cmm &
> +    sleep 2


Here as well, active waiting. Given that this code is repeated twice it
would make sense to put it into a function.

> +    assert_cpuplugd_running ${NOT_RUNNING} ${WARN}
> +    RC=$?
> +
> +    # Wait a little to allow for (undesired) cpu configuration change
> +    sleep ${SLEEP_X}
> +    cmm_pages_running=$(cat /proc/sys/vm/cmm_pages)
> +
> +    if [[ ${RC} -eq 0 ]]; then
> +        stop_cpuplugd
> +    fi
> +
> +    cmm_pages_after=$(cat /proc/sys/vm/cmm_pages)
> +    i=0
> +
> +    if (( "$cmm_pages_before" == "$cmm_pages_running" )) && (( "$cmm_pages_running" == "$cmm_pages_after" )); then
> +        i=1
> +    fi
> +
> +    echo "Verify that the number of available CMM pages does not change: cmm_pages_before=$cmm_pages_before, cmm_pages_running=$cmm_pages_running, cmm_pages_after=$cmm_pages_after"
> +    if [ ${i} -eq 1 ]; then
> +            tst_res TPASS "Test passed"
> +    else
> +            tst_res TFAIL "Test failed"
> +    fi

Here as well, no echo, print the messages with tst_res.

> +    if [[ "${CMM_MOD}" = "m" ]]; then
> +        rmmod cmm
> +    fi
> +}
> diff --git a/testcases/commands/cpuplugd/cpuplugdcmm.conf b/testcases/commands/cpuplugd/cpuplugdcmm.conf
> new file mode 100644
> index 000000000..8866b2939
> --- /dev/null
> +++ b/testcases/commands/cpuplugd/cpuplugdcmm.conf
> @@ -0,0 +1,16 @@
> +# Copyright (C) 2018 IBM Corp.
> +# 
> +# Copying and distribution of this file, with or without modification,
> +# are permitted in any medium without royalty provided the copyright
> +# notice and this notice are preserved.  This file is offered as-is,
> +# without any warranty.
> +
> +
> +UPDATE="1"
> +
> +CMM_MIN="0"
> +CMM_INC="10"
> +CMM_MAX="10"
> +
> +MEMPLUG="swaprate < 200"
> +MEMUNPLUG="swaprate > 5000"
> diff --git a/testcases/commands/cpuplugd/cpuplugdtemp.conf b/testcases/commands/cpuplugd/cpuplugdtemp.conf
> new file mode 100644
> index 000000000..9c8eafe0b
> --- /dev/null
> +++ b/testcases/commands/cpuplugd/cpuplugdtemp.conf
> @@ -0,0 +1,21 @@
> +# Copyright (C) 2018 IBM Corp.
> +# 
> +# Copying and distribution of this file, with or without modification,
> +# are permitted in any medium without royalty provided the copyright
> +# notice and this notice are preserved.  This file is offered as-is,
> +# without any warranty.
> +
> +
> +CPU_MIN="1"
> +CPU_MAX="3"
> +UPDATE="1"
> +
> +HOTPLUG="(loadavg > onumcpus + 0.75) & (idle < 10.0)"
> +HOTUNPLUG="(loadavg < onumcpus - 0.25) | (idle > 50)"
> +
> +#CMM_MIN="0"
> +CMM_INC="10"
> +CMM_MAX="10"
> +
> +MEMPLUG="swaprate < 200"
> +MEMUNPLUG="swaprate > 5000"
> -- 
> 2.17.2 (Apple Git-113)
> 
> 
> -- 
> Mailing list info: https://lists.linux.it/listinfo/ltp

-- 
Cyril Hrubis
chrubis@suse.cz


More information about the ltp mailing list