On 10 Mar 15 12:30, Lisa Nguyen wrote:
> On 3 March 2015 at 13:02, Larry Bassel <larry.bas...@linaro.org> wrote:
> >
> > Add test which checks and prints scheduler domain flags.
> >
> > Signed-off-by: Larry Bassel <larry.bas...@linaro.org>
> > ---
> >  cputopology/cputopology_03.sh  | 109 
> > +++++++++++++++++++++++++++++++++++++++++
> >  cputopology/cputopology_03.txt |   1 +
> >  2 files changed, 110 insertions(+)
> >  create mode 100755 cputopology/cputopology_03.sh
> >  create mode 100644 cputopology/cputopology_03.txt
> >
> > diff --git a/cputopology/cputopology_03.sh b/cputopology/cputopology_03.sh
> > new file mode 100755
> > index 0000000..bfff5de
> > --- /dev/null
> > +++ b/cputopology/cputopology_03.sh
> > @@ -0,0 +1,109 @@
> > +#!/bin/sh
> > +#
> > +# PM-QA validation test suite for the power management on Linux
> > +#
> > +# Copyright (C) 2015, Linaro Limited.
> > +#
> > +# This program is free software; you can redistribute it and/or
> > +# modify it under the terms of the GNU General Public License
> > +# as published by the Free Software Foundation; either version 2
> > +# of the License, or (at your option) any later version.
> > +#
> > +# This program is distributed in the hope that it will be useful,
> > +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> > +# GNU General Public License for more details.
> > +#
> > +# You should have received a copy of the GNU General Public License
> > +# along with this program; if not, write to the Free Software
> > +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  
> > 02110-1301, USA.
> > +#
> > +# Contributors:
> > +#     Larry Bassel <larry.bas...@linaro.org>
> > +#
> > +
> > +# URL : 
> > https://wiki.linaro.org/WorkingGroups/PowerManagement/Resources/TestSuite/PmQaSpecification#cputopology_03
> > +
> > +. ../include/functions.sh
> > +
> > +is_flag_set() {
> > +    flag=$1
> > +    mask=$2
> > +    message=$3
> > +
> > +    value=$(( $flag & $mask ))
> > +
> > +    if [ $value -ne 0 ]; then
> > +       echo "$message set"
> > +    else
> > +       echo "$message not set"
> > +    fi
> > +}
> > +
> > +are_flags_set() {
> > +    val=$1
> > +    domain_num=$2
> > +
> > +    # flag value, flag description
> > +    set -- 0x80  "domain$domain_num share cpu capacity flag" 0x100  
> > "domain$domain_num share power domain flag" 0x200  "domain$domain_num share 
> > cpu package resources flag"
> > +
> > +    if [ $(($# % 2)) -ne 0 ]; then
> > +        echo "WARNING: malformed flag value, description in test"
> > +    fi
> > +
> > +    nflags=$(($# / 2))
> > +    i=1
> > +
> > +    while [ $i -le $nflags ] ; do
> > +       flagval=$((2*i-1))
> > +        eval "var1=\${$flagval}"
> > +       flagstr=$((2*i))
> > +        eval "var2=\${$flagstr}"
> > +        is_flag_set $val "$var1" "$var2"
> > +       i=$(( i + 1))
> > +    done
> > +}
> > +
> > +check_sched_domain_flags() {
> > +
> > +    cpu_num=$1
> > +    domain_num=$2
> > +
> > +    
> > sched_domain_flags=/proc/sys/kernel/sched_domain/$cpu_num/domain$domain_num/flags
> > +    val=$(cat $sched_domain_flags)
> > +
> > +    check "sched_domain_flags (domain $domain_num)" "test \"$val\" != 
> > \"-1\""
> > +    printf "domain$domain_num flag 0x%x\n" $val
> > +
> > +    mask=$((0x7fff))
> > +    unexpected_bits=$((val & ~mask))
> > +
> > +    if [ $unexpected_bits -ne 0 ]; then
> > +        printf "NOTE: unexpected flag bits 0x%x set\n" $unexpected_bits
> > +    fi
> > +
> > +    are_flags_set $val $domain_num
> > +}
> > +
> > +check_all_sched_domain_flags() {
> > +
> > +    sched_domain_0_path=/proc/sys/kernel/sched_domain/cpu0
> > +
> > +    if [ ! -d $sched_domain_0_path ]; then
> > +        log_skip "no sched_domain directory present"
> > +       return
> > +    fi
> > +
> > +    n=0
> > +
> > +    sched_domain_flags_path=/proc/sys/kernel/sched_domain/$1/domain0/flags
> > +
> > +    while [ -e $sched_domain_flags_path ]; do
> > +        check_sched_domain_flags $1 $n
> > +       n=$(( n + 1))
> > +        
> > sched_domain_flags_path=/proc/sys/kernel/sched_domain/$1/domain$n/flags
> > +    done
> > +}
> > +
> > +for_each_cpu check_all_sched_domain_flags 1 || exit 1
> > +test_status_show
> > diff --git a/cputopology/cputopology_03.txt b/cputopology/cputopology_03.txt
> > new file mode 100644
> > index 0000000..e43de69
> > --- /dev/null
> > +++ b/cputopology/cputopology_03.txt
> > @@ -0,0 +1 @@
> > +test that the sched_domain files are present and show the topology related 
> > flags
> > --
> > 1.9.1
> >
> 
> Hi Larry,
> 
> I ran your script on the chromebook2 with mainline v4 quickly, and
> these are the results I get:
> 
> root@linaro-developer:~/pm-qa/cputopology# ./cputopology_03.sh
> cputopology_03.0/cpu0: checking sched_domain_flags (domain 0)...            Ok
> domain0 flag 0x102f
> domain0 share cpu capacity flag not set
> domain0 share power domain flag not set
> domain0 share cpu package resources flag not set
> cputopology_03.0/cpu1: checking sched_domain_flags (domain 0)...            Ok
> domain0 flag 0x102f
> domain0 share cpu capacity flag not set
> domain0 share power domain flag not set
> domain0 share cpu package resources flag not set
> cputopology_03.0/cpu2: checking sched_domain_flags (domain 0)...            Ok
> domain0 flag 0x102f
> domain0 share cpu capacity flag not set
> domain0 share power domain flag not set
> domain0 share cpu package resources flag not set
> cputopology_03.0/cpu3: checking sched_domain_flags (domain 0)...            Ok
> domain0 flag 0x102f
> domain0 share cpu capacity flag not set
> domain0 share power domain flag not set
> domain0 share cpu package resources flag not set
> 
> cputopology_03: pass
> 
> I'm not sure if printing the domain0 flag is still necessary except
> for debugging, but I'll let others comment.

I think someone wanted all flags interpreted, personally
I think this is overkill since the test IMHO should be focused
on flags important to EAS, printing the flag value is a compromise
between nothing and full interpretation.

> 
> One question that I may have forgotten to ask you earlier: How did you
> define a test failure? AFAICT, I get the impression that the test
> "passes" every time, or if it will skip if the sched_domain directory
> doesn't exist. I haven't come across an instance where a subtest
> fails.

Yes, I think the test isn't so much a pass/fail one than an informational
one and the person running the test would need to know if the flag
settings make sense. Do (any of you) have any better ideas here? Perhaps
if the directory doesn't exist it should be a fail (if the EAS patches
creating this directory weren't applied or were not working properly,
the directory would not exist).

Larry

_______________________________________________
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev

Reply via email to