Add test which checks and prints scheduler domain flags.
Signed-off-by: Larry Bassel larry.bassel@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.bassel@linaro.org +# + +# URL : https://wiki.linaro.org/WorkingGroups/PowerManagement/Resources/TestSuite/Pm... + +. ../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
Add test which checks and prints scheduler domain flags.
Signed-off-by: Larry Bassel larry.bassel@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.bassel@linaro.org +# + +# URL : https://wiki.linaro.org/WorkingGroups/PowerManagement/Resources/TestSuite/Pm... + +. ../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
On 3 March 2015 at 13:02, Larry Bassel larry.bassel@linaro.org wrote:
Add test which checks and prints scheduler domain flags.
Signed-off-by: Larry Bassel larry.bassel@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.bassel@linaro.org +#
+# URL : https://wiki.linaro.org/WorkingGroups/PowerManagement/Resources/TestSuite/Pm...
+. ../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.
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.
On 10 Mar 15 12:30, Lisa Nguyen wrote:
On 3 March 2015 at 13:02, Larry Bassel larry.bassel@linaro.org wrote:
Add test which checks and prints scheduler domain flags.
Signed-off-by: Larry Bassel larry.bassel@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.bassel@linaro.org +#
+# URL : https://wiki.linaro.org/WorkingGroups/PowerManagement/Resources/TestSuite/Pm...
+. ../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
On Wed, Mar 11, 2015 at 1:08 AM, Larry Bassel larry.bassel@linaro.org wrote:
On 10 Mar 15 12:30, Lisa Nguyen wrote:
On 3 March 2015 at 13:02, Larry Bassel larry.bassel@linaro.org wrote:
Add test which checks and prints scheduler domain flags.
Signed-off-by: Larry Bassel larry.bassel@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.bassel@linaro.org +#
+# URL : https://wiki.linaro.org/WorkingGroups/PowerManagement/Resources/TestSuite/Pm...
+. ../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.
On 24 March 2015 at 07:34, Amit Kucheria amit.kucheria@linaro.org wrote:
On Wed, Mar 11, 2015 at 1:08 AM, Larry Bassel larry.bassel@linaro.org wrote:
On 10 Mar 15 12:30, Lisa Nguyen wrote:
On 3 March 2015 at 13:02, Larry Bassel larry.bassel@linaro.org wrote:
Add test which checks and prints scheduler domain flags.
Signed-off-by: Larry Bassel larry.bassel@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.bassel@linaro.org +#
+# URL : https://wiki.linaro.org/WorkingGroups/PowerManagement/Resources/TestSuite/Pm...
+. ../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?
It's present only with debug config
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.
We are interested in the 3 flags that are tested by the script: share capacity,share resources and share power domain These flags reflect the soc topology
Vincent
On Tue, Mar 24, 2015 at 1:58 PM, Vincent Guittot vincent.guittot@linaro.org wrote:
On 24 March 2015 at 07:34, Amit Kucheria amit.kucheria@linaro.org wrote:
On Wed, Mar 11, 2015 at 1:08 AM, Larry Bassel larry.bassel@linaro.org wrote:
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?
It's present only with debug config
Larry, this fact should be documented in the test description with the name of the config option.
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.
We are interested in the 3 flags that are tested by the script: share capacity,share resources and share power domain These flags reflect the soc topology
On 3 March 2015 at 22:02, Larry Bassel larry.bassel@linaro.org wrote:
Add test which checks and prints scheduler domain flags.
Signed-off-by: Larry Bassel larry.bassel@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.bassel@linaro.org +#
+# URL : https://wiki.linaro.org/WorkingGroups/PowerManagement/Resources/TestSuite/Pm...
+. ../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
Hi Larry,
You can add my Ack-by
Vincent
-- 1.9.1
Applied with Vincent's ack:
http://git.linaro.org/power/pm-qa.git/commit/04211670ed04645fe44e1244aa79965...
Thanks! :)
On 1 April 2015 at 00:23, Vincent Guittot vincent.guittot@linaro.org wrote:
On 3 March 2015 at 22:02, Larry Bassel larry.bassel@linaro.org wrote:
Add test which checks and prints scheduler domain flags.
Signed-off-by: Larry Bassel larry.bassel@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.bassel@linaro.org +#
+# URL : https://wiki.linaro.org/WorkingGroups/PowerManagement/Resources/TestSuite/Pm...
+. ../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
Hi Larry,
You can add my Ack-by
Vincent
-- 1.9.1