On Wed, Mar 11, 2015 at 1:08 AM, Larry Bassel <larry.bas...@linaro.org> wrote:
> 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).

I think the sched_domain directory is always present. Vincent?

I think the power domain flag is the interesting one for EAS but I'll
defer to Vincent on whether we need to care about the others - e.g. we
in case of cpu capacity we care about the values they're set to.

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

Reply via email to