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