Add test which verifies capacity calculation on arm architecture platforms.
Since there isn't yet a similar calculation done for arm64 platforms, this architecture isn't supported by this test (at least as of now).
Signed-off-by: Larry Bassel larry.bassel@linaro.org --- cputopology/cputopology_04.sh | 137 +++++++++++++++++++++++++++++++++++++++++ cputopology/cputopology_04.txt | 1 + 2 files changed, 138 insertions(+) create mode 100755 cputopology/cputopology_04.sh create mode 100644 cputopology/cputopology_04.txt
diff --git a/cputopology/cputopology_04.sh b/cputopology/cputopology_04.sh new file mode 100755 index 0000000..26f611c --- /dev/null +++ b/cputopology/cputopology_04.sh @@ -0,0 +1,137 @@ +#!/bin/bash +# +# 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... + +source ../include/functions.sh + +calc_freq() +{ + byte1=$1 + byte2=$2 + byte3=$3 + byte4=$4 + freq=$((byte1*0x1000000+byte2*0x10000+byte3*0x100+byte4)) +} + +set_eff() { + type=$1 + + case $type in + arm,cortex-a15) eff=3891 ;; + arm,cortex-a7) eff=2048 ;; + * ) eff=1024 ;; + esac +} + +calc_mid_capacity() +{ + dt_cpus=$(ls /sys/firmware/devicetree/base/cpus | grep "cpu@[0-9].*") + min_capacity=$((0xffffffff)) + max_capacity=0 + sched_capacity_shift=10 + + for dt_cpu in $dt_cpus; do + if [ ! -f /sys/firmware/devicetree/base/cpus/$dt_cpu/clock-frequency ]; then + log_skip "no clock frequency file present" + return + fi + if [ ! -f /sys/firmware/devicetree/base/cpus/$dt_cpu/compatible ]; then + log_skip "no compatible file present" + return + fi + filename=/sys/firmware/devicetree/base/cpus/$dt_cpu/clock-frequency + echo "clock frequency file: $filename" + bytes=$(od -t u1 -A n $filename) + calc_freq $bytes + echo "clock frequency: $freq" + cpu_type=$(cat /sys/firmware/devicetree/base/cpus/$dt_cpu/compatible) + echo "cpu type: $cpu_type" + set_eff $cpu_type + echo "efficiency: $eff" + capacity=$((($freq>>20)*$eff)) + echo "capacity: $capacity" + if [ $capacity -gt $max_capacity ]; then + max_capacity=$capacity + fi + if [ $capacity -lt $min_capacity ]; then + min_capacity=$capacity + fi + if [ $(((4 * $max_capacity))) -lt $(((3 * ($max_capacity + $min_capacity)))) ]; then + middle_capacity=$((($min_capacity + $max_capacity)>>($sched_capacity_shift+1))) + else + middle_capacity=$(((($max_capacity / 3)>>($sched_capacity_shift-1))+1)) + fi + echo "min capacity: $min_capacity max: $max_capacity middle: $middle_capacity" + done +} + +cpu_num=0 + +verify_cpu_capacity() +{ + for dt_cpu in $dt_cpus; do + if [ ! -f /sys/firmware/devicetree/base/cpus/$dt_cpu/clock-frequency ]; then + log_skip "no clock frequency file present" + return + fi + if [ ! -f /sys/firmware/devicetree/base/cpus/$dt_cpu/compatible ]; then + log_skip "no compatible file present" + return + fi + filename=/sys/firmware/devicetree/base/cpus/$dt_cpu/clock-frequency + echo "clock frequency file: $filename" + bytes=$(od -t u1 -A n $filename) + calc_freq $bytes + echo "frequency: $freq" + cpu_type=$(cat /sys/firmware/devicetree/base/cpus/$dt_cpu/compatible) + echo "cpu type: $cpu_type" + set_eff $cpu_type + echo "efficiency: $eff" + capacity=$((($freq>>20)*$eff/$middle_capacity)) + expected_capacity_string=$(dmesg | grep "CPU$cpu_num: update cpu_capacity") + expected_capacity=${expected_capacity_string##*cpu_capacity} + echo "cpu num: $cpu_num capacity $capacity expected capacity $expected_capacity" + check "expected capacity for cpu$cpu_num equal to computed capacity" "test $expected_capacity -eq $capacity" + + cpu_num=$((cpu_num+1)) + done +} + +verify_capacity() +{ + if ! [ -d /sys/firmware/devicetree/base/cpus ]; then + log_skip "no cpus directory present" + return + fi + + calc_mid_capacity + dt_cpus=$(ls -1 /sys/firmware/devicetree/base/cpus | egrep "cpu@.{1,2}$") + verify_cpu_capacity + dt_cpus=$(ls -1 /sys/firmware/devicetree/base/cpus | egrep "cpu@.{3,4}$") + verify_cpu_capacity +} + +verify_capacity || exit 1 +test_status_show diff --git a/cputopology/cputopology_04.txt b/cputopology/cputopology_04.txt new file mode 100644 index 0000000..36647db --- /dev/null +++ b/cputopology/cputopology_04.txt @@ -0,0 +1 @@ +test capacity calculation
Larry,
Could you also please attach the output of the script on your test platform?
Regards, Amit
On Mon, Mar 9, 2015 at 3:55 AM, Larry Bassel larry.bassel@linaro.org wrote:
Add test which verifies capacity calculation on arm architecture platforms.
Since there isn't yet a similar calculation done for arm64 platforms, this architecture isn't supported by this test (at least as of now).
Signed-off-by: Larry Bassel larry.bassel@linaro.org
cputopology/cputopology_04.sh | 137 +++++++++++++++++++++++++++++++++++++++++ cputopology/cputopology_04.txt | 1 + 2 files changed, 138 insertions(+) create mode 100755 cputopology/cputopology_04.sh create mode 100644 cputopology/cputopology_04.txt
diff --git a/cputopology/cputopology_04.sh b/cputopology/cputopology_04.sh new file mode 100755 index 0000000..26f611c --- /dev/null +++ b/cputopology/cputopology_04.sh @@ -0,0 +1,137 @@ +#!/bin/bash +# +# 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...
+source ../include/functions.sh
+calc_freq() +{
- byte1=$1
- byte2=$2
- byte3=$3
- byte4=$4
- freq=$((byte1*0x1000000+byte2*0x10000+byte3*0x100+byte4))
+}
+set_eff() {
- type=$1
- case $type in
arm,cortex-a15) eff=3891 ;;
arm,cortex-a7) eff=2048 ;;
* ) eff=1024 ;;
- esac
+}
+calc_mid_capacity() +{
- dt_cpus=$(ls /sys/firmware/devicetree/base/cpus | grep "cpu@[0-9].*")
- min_capacity=$((0xffffffff))
- max_capacity=0
- sched_capacity_shift=10
- for dt_cpu in $dt_cpus; do
if [ ! -f /sys/firmware/devicetree/base/cpus/$dt_cpu/clock-frequency ]; then
log_skip "no clock frequency file present"
return
fi
if [ ! -f /sys/firmware/devicetree/base/cpus/$dt_cpu/compatible ]; then
log_skip "no compatible file present"
return
fi
filename=/sys/firmware/devicetree/base/cpus/$dt_cpu/clock-frequency
echo "clock frequency file: $filename"
bytes=$(od -t u1 -A n $filename)
calc_freq $bytes
echo "clock frequency: $freq"
cpu_type=$(cat /sys/firmware/devicetree/base/cpus/$dt_cpu/compatible)
echo "cpu type: $cpu_type"
set_eff $cpu_type
echo "efficiency: $eff"
capacity=$((($freq>>20)*$eff))
echo "capacity: $capacity"
if [ $capacity -gt $max_capacity ]; then
max_capacity=$capacity
fi
if [ $capacity -lt $min_capacity ]; then
min_capacity=$capacity
fi
if [ $(((4 * $max_capacity))) -lt $(((3 * ($max_capacity + $min_capacity)))) ]; then
middle_capacity=$((($min_capacity + $max_capacity)>>($sched_capacity_shift+1)))
else
middle_capacity=$(((($max_capacity / 3)>>($sched_capacity_shift-1))+1))
fi
echo "min capacity: $min_capacity max: $max_capacity middle: $middle_capacity"
- done
+}
+cpu_num=0
+verify_cpu_capacity() +{
- for dt_cpu in $dt_cpus; do
if [ ! -f /sys/firmware/devicetree/base/cpus/$dt_cpu/clock-frequency ]; then
log_skip "no clock frequency file present"
return
fi
if [ ! -f /sys/firmware/devicetree/base/cpus/$dt_cpu/compatible ]; then
log_skip "no compatible file present"
return
fi
filename=/sys/firmware/devicetree/base/cpus/$dt_cpu/clock-frequency
echo "clock frequency file: $filename"
bytes=$(od -t u1 -A n $filename)
calc_freq $bytes
echo "frequency: $freq"
cpu_type=$(cat /sys/firmware/devicetree/base/cpus/$dt_cpu/compatible)
echo "cpu type: $cpu_type"
set_eff $cpu_type
echo "efficiency: $eff"
capacity=$((($freq>>20)*$eff/$middle_capacity))
expected_capacity_string=$(dmesg | grep "CPU$cpu_num: update cpu_capacity")
expected_capacity=${expected_capacity_string##*cpu_capacity}
echo "cpu num: $cpu_num capacity $capacity expected capacity $expected_capacity"
check "expected capacity for cpu$cpu_num equal to computed capacity" "test $expected_capacity -eq $capacity"
cpu_num=$((cpu_num+1))
- done
+}
+verify_capacity() +{
- if ! [ -d /sys/firmware/devicetree/base/cpus ]; then
log_skip "no cpus directory present"
return
- fi
- calc_mid_capacity
- dt_cpus=$(ls -1 /sys/firmware/devicetree/base/cpus | egrep "cpu@.{1,2}$")
- verify_cpu_capacity
- dt_cpus=$(ls -1 /sys/firmware/devicetree/base/cpus | egrep "cpu@.{3,4}$")
- verify_cpu_capacity
+}
+verify_capacity || exit 1 +test_status_show diff --git a/cputopology/cputopology_04.txt b/cputopology/cputopology_04.txt new file mode 100644 index 0000000..36647db --- /dev/null +++ b/cputopology/cputopology_04.txt @@ -0,0 +1 @@
+test capacity calculation
1.8.3.2
On 24 Mar 15 12:10, Amit Kucheria wrote:
Larry,
Could you also please attach the output of the script on your test platform?
It is attached (there are still debugging printfs in it).
Regards, Amit
Larry
On Mon, Mar 9, 2015 at 3:55 AM, Larry Bassel larry.bassel@linaro.org wrote:
Add test which verifies capacity calculation on arm architecture platforms.
Since there isn't yet a similar calculation done for arm64 platforms, this architecture isn't supported by this test (at least as of now).
Signed-off-by: Larry Bassel larry.bassel@linaro.org
cputopology/cputopology_04.sh | 137 +++++++++++++++++++++++++++++++++++++++++ cputopology/cputopology_04.txt | 1 + 2 files changed, 138 insertions(+) create mode 100755 cputopology/cputopology_04.sh create mode 100644 cputopology/cputopology_04.txt
diff --git a/cputopology/cputopology_04.sh b/cputopology/cputopology_04.sh new file mode 100755 index 0000000..26f611c --- /dev/null +++ b/cputopology/cputopology_04.sh @@ -0,0 +1,137 @@ +#!/bin/bash +# +# 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...
+source ../include/functions.sh
+calc_freq() +{
- byte1=$1
- byte2=$2
- byte3=$3
- byte4=$4
- freq=$((byte1*0x1000000+byte2*0x10000+byte3*0x100+byte4))
+}
+set_eff() {
- type=$1
- case $type in
arm,cortex-a15) eff=3891 ;;
arm,cortex-a7) eff=2048 ;;
* ) eff=1024 ;;
- esac
+}
+calc_mid_capacity() +{
- dt_cpus=$(ls /sys/firmware/devicetree/base/cpus | grep "cpu@[0-9].*")
- min_capacity=$((0xffffffff))
- max_capacity=0
- sched_capacity_shift=10
- for dt_cpu in $dt_cpus; do
if [ ! -f /sys/firmware/devicetree/base/cpus/$dt_cpu/clock-frequency ]; then
log_skip "no clock frequency file present"
return
fi
if [ ! -f /sys/firmware/devicetree/base/cpus/$dt_cpu/compatible ]; then
log_skip "no compatible file present"
return
fi
filename=/sys/firmware/devicetree/base/cpus/$dt_cpu/clock-frequency
echo "clock frequency file: $filename"
bytes=$(od -t u1 -A n $filename)
calc_freq $bytes
echo "clock frequency: $freq"
cpu_type=$(cat /sys/firmware/devicetree/base/cpus/$dt_cpu/compatible)
echo "cpu type: $cpu_type"
set_eff $cpu_type
echo "efficiency: $eff"
capacity=$((($freq>>20)*$eff))
echo "capacity: $capacity"
if [ $capacity -gt $max_capacity ]; then
max_capacity=$capacity
fi
if [ $capacity -lt $min_capacity ]; then
min_capacity=$capacity
fi
if [ $(((4 * $max_capacity))) -lt $(((3 * ($max_capacity + $min_capacity)))) ]; then
middle_capacity=$((($min_capacity + $max_capacity)>>($sched_capacity_shift+1)))
else
middle_capacity=$(((($max_capacity / 3)>>($sched_capacity_shift-1))+1))
fi
echo "min capacity: $min_capacity max: $max_capacity middle: $middle_capacity"
- done
+}
+cpu_num=0
+verify_cpu_capacity() +{
- for dt_cpu in $dt_cpus; do
if [ ! -f /sys/firmware/devicetree/base/cpus/$dt_cpu/clock-frequency ]; then
log_skip "no clock frequency file present"
return
fi
if [ ! -f /sys/firmware/devicetree/base/cpus/$dt_cpu/compatible ]; then
log_skip "no compatible file present"
return
fi
filename=/sys/firmware/devicetree/base/cpus/$dt_cpu/clock-frequency
echo "clock frequency file: $filename"
bytes=$(od -t u1 -A n $filename)
calc_freq $bytes
echo "frequency: $freq"
cpu_type=$(cat /sys/firmware/devicetree/base/cpus/$dt_cpu/compatible)
echo "cpu type: $cpu_type"
set_eff $cpu_type
echo "efficiency: $eff"
capacity=$((($freq>>20)*$eff/$middle_capacity))
expected_capacity_string=$(dmesg | grep "CPU$cpu_num: update cpu_capacity")
expected_capacity=${expected_capacity_string##*cpu_capacity}
echo "cpu num: $cpu_num capacity $capacity expected capacity $expected_capacity"
check "expected capacity for cpu$cpu_num equal to computed capacity" "test $expected_capacity -eq $capacity"
cpu_num=$((cpu_num+1))
- done
+}
+verify_capacity() +{
- if ! [ -d /sys/firmware/devicetree/base/cpus ]; then
log_skip "no cpus directory present"
return
- fi
- calc_mid_capacity
- dt_cpus=$(ls -1 /sys/firmware/devicetree/base/cpus | egrep "cpu@.{1,2}$")
- verify_cpu_capacity
- dt_cpus=$(ls -1 /sys/firmware/devicetree/base/cpus | egrep "cpu@.{3,4}$")
- verify_cpu_capacity
+}
+verify_capacity || exit 1 +test_status_show diff --git a/cputopology/cputopology_04.txt b/cputopology/cputopology_04.txt new file mode 100644 index 0000000..36647db --- /dev/null +++ b/cputopology/cputopology_04.txt @@ -0,0 +1 @@
+test capacity calculation
1.8.3.2
Gentle ping and friendly reminder that I need someone to ack Larry's cpu capacity script before I can merge it :)
On 24 March 2015 at 08:12, Larry Bassel larry.bassel@linaro.org wrote:
On 24 Mar 15 12:10, Amit Kucheria wrote:
Larry,
Could you also please attach the output of the script on your test platform?
It is attached (there are still debugging printfs in it).
Regards, Amit
Larry
On Mon, Mar 9, 2015 at 3:55 AM, Larry Bassel larry.bassel@linaro.org wrote:
Add test which verifies capacity calculation on arm architecture platforms.
Since there isn't yet a similar calculation done for arm64 platforms, this architecture isn't supported by this test (at least as of now).
Signed-off-by: Larry Bassel larry.bassel@linaro.org
cputopology/cputopology_04.sh | 137 +++++++++++++++++++++++++++++++++++++++++ cputopology/cputopology_04.txt | 1 + 2 files changed, 138 insertions(+) create mode 100755 cputopology/cputopology_04.sh create mode 100644 cputopology/cputopology_04.txt
diff --git a/cputopology/cputopology_04.sh b/cputopology/cputopology_04.sh new file mode 100755 index 0000000..26f611c --- /dev/null +++ b/cputopology/cputopology_04.sh @@ -0,0 +1,137 @@ +#!/bin/bash +# +# 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...
+source ../include/functions.sh
+calc_freq() +{
- byte1=$1
- byte2=$2
- byte3=$3
- byte4=$4
- freq=$((byte1*0x1000000+byte2*0x10000+byte3*0x100+byte4))
+}
+set_eff() {
- type=$1
- case $type in
arm,cortex-a15) eff=3891 ;;
arm,cortex-a7) eff=2048 ;;
* ) eff=1024 ;;
- esac
+}
+calc_mid_capacity() +{
- dt_cpus=$(ls /sys/firmware/devicetree/base/cpus | grep "cpu@[0-9].*")
- min_capacity=$((0xffffffff))
- max_capacity=0
- sched_capacity_shift=10
- for dt_cpu in $dt_cpus; do
if [ ! -f /sys/firmware/devicetree/base/cpus/$dt_cpu/clock-frequency ]; then
log_skip "no clock frequency file present"
return
fi
if [ ! -f /sys/firmware/devicetree/base/cpus/$dt_cpu/compatible ]; then
log_skip "no compatible file present"
return
fi
filename=/sys/firmware/devicetree/base/cpus/$dt_cpu/clock-frequency
echo "clock frequency file: $filename"
bytes=$(od -t u1 -A n $filename)
calc_freq $bytes
echo "clock frequency: $freq"
cpu_type=$(cat /sys/firmware/devicetree/base/cpus/$dt_cpu/compatible)
echo "cpu type: $cpu_type"
set_eff $cpu_type
echo "efficiency: $eff"
capacity=$((($freq>>20)*$eff))
echo "capacity: $capacity"
if [ $capacity -gt $max_capacity ]; then
max_capacity=$capacity
fi
if [ $capacity -lt $min_capacity ]; then
min_capacity=$capacity
fi
if [ $(((4 * $max_capacity))) -lt $(((3 * ($max_capacity + $min_capacity)))) ]; then
middle_capacity=$((($min_capacity + $max_capacity)>>($sched_capacity_shift+1)))
else
middle_capacity=$(((($max_capacity / 3)>>($sched_capacity_shift-1))+1))
fi
echo "min capacity: $min_capacity max: $max_capacity middle: $middle_capacity"
- done
+}
+cpu_num=0
+verify_cpu_capacity() +{
- for dt_cpu in $dt_cpus; do
if [ ! -f /sys/firmware/devicetree/base/cpus/$dt_cpu/clock-frequency ]; then
log_skip "no clock frequency file present"
return
fi
if [ ! -f /sys/firmware/devicetree/base/cpus/$dt_cpu/compatible ]; then
log_skip "no compatible file present"
return
fi
filename=/sys/firmware/devicetree/base/cpus/$dt_cpu/clock-frequency
echo "clock frequency file: $filename"
bytes=$(od -t u1 -A n $filename)
calc_freq $bytes
echo "frequency: $freq"
cpu_type=$(cat /sys/firmware/devicetree/base/cpus/$dt_cpu/compatible)
echo "cpu type: $cpu_type"
set_eff $cpu_type
echo "efficiency: $eff"
capacity=$((($freq>>20)*$eff/$middle_capacity))
expected_capacity_string=$(dmesg | grep "CPU$cpu_num: update cpu_capacity")
expected_capacity=${expected_capacity_string##*cpu_capacity}
echo "cpu num: $cpu_num capacity $capacity expected capacity $expected_capacity"
check "expected capacity for cpu$cpu_num equal to computed capacity" "test $expected_capacity -eq $capacity"
cpu_num=$((cpu_num+1))
- done
+}
+verify_capacity() +{
- if ! [ -d /sys/firmware/devicetree/base/cpus ]; then
log_skip "no cpus directory present"
return
- fi
- calc_mid_capacity
- dt_cpus=$(ls -1 /sys/firmware/devicetree/base/cpus | egrep "cpu@.{1,2}$")
- verify_cpu_capacity
- dt_cpus=$(ls -1 /sys/firmware/devicetree/base/cpus | egrep "cpu@.{3,4}$")
- verify_cpu_capacity
+}
+verify_capacity || exit 1 +test_status_show diff --git a/cputopology/cputopology_04.txt b/cputopology/cputopology_04.txt new file mode 100644 index 0000000..36647db --- /dev/null +++ b/cputopology/cputopology_04.txt @@ -0,0 +1 @@
+test capacity calculation
1.8.3.2
On 1 April 2015 at 17:41, Lisa Nguyen lisa.nguyen@linaro.org wrote:
Gentle ping and friendly reminder that I need someone to ack Larry's cpu capacity script before I can merge it :)
I'm not sure that the beg of the output file which displays the steps to compute capacity is really necessary (min, max middle value). We are only interested in final result: cpu num: X capacity YYYY expected capacity ZZZZ cputopology_04.0: checking expected capacity for cpuX equal to computed capacity... Ok
Apart from that it's ok for me
On 24 March 2015 at 08:12, Larry Bassel larry.bassel@linaro.org wrote:
On 24 Mar 15 12:10, Amit Kucheria wrote:
Larry,
Could you also please attach the output of the script on your test platform?
It is attached (there are still debugging printfs in it).
Regards, Amit
Larry
On Mon, Mar 9, 2015 at 3:55 AM, Larry Bassel larry.bassel@linaro.org wrote:
Add test which verifies capacity calculation on arm architecture platforms.
Since there isn't yet a similar calculation done for arm64 platforms, this architecture isn't supported by this test (at least as of now).
Signed-off-by: Larry Bassel larry.bassel@linaro.org
cputopology/cputopology_04.sh | 137 +++++++++++++++++++++++++++++++++++++++++ cputopology/cputopology_04.txt | 1 + 2 files changed, 138 insertions(+) create mode 100755 cputopology/cputopology_04.sh create mode 100644 cputopology/cputopology_04.txt
diff --git a/cputopology/cputopology_04.sh b/cputopology/cputopology_04.sh new file mode 100755 index 0000000..26f611c --- /dev/null +++ b/cputopology/cputopology_04.sh @@ -0,0 +1,137 @@ +#!/bin/bash +# +# 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...
+source ../include/functions.sh
+calc_freq() +{
- byte1=$1
- byte2=$2
- byte3=$3
- byte4=$4
- freq=$((byte1*0x1000000+byte2*0x10000+byte3*0x100+byte4))
+}
+set_eff() {
- type=$1
- case $type in
arm,cortex-a15) eff=3891 ;;
arm,cortex-a7) eff=2048 ;;
* ) eff=1024 ;;
- esac
+}
+calc_mid_capacity() +{
- dt_cpus=$(ls /sys/firmware/devicetree/base/cpus | grep "cpu@[0-9].*")
- min_capacity=$((0xffffffff))
- max_capacity=0
- sched_capacity_shift=10
- for dt_cpu in $dt_cpus; do
if [ ! -f /sys/firmware/devicetree/base/cpus/$dt_cpu/clock-frequency ]; then
log_skip "no clock frequency file present"
return
fi
if [ ! -f /sys/firmware/devicetree/base/cpus/$dt_cpu/compatible ]; then
log_skip "no compatible file present"
return
fi
filename=/sys/firmware/devicetree/base/cpus/$dt_cpu/clock-frequency
echo "clock frequency file: $filename"
bytes=$(od -t u1 -A n $filename)
calc_freq $bytes
echo "clock frequency: $freq"
cpu_type=$(cat /sys/firmware/devicetree/base/cpus/$dt_cpu/compatible)
echo "cpu type: $cpu_type"
set_eff $cpu_type
echo "efficiency: $eff"
capacity=$((($freq>>20)*$eff))
echo "capacity: $capacity"
if [ $capacity -gt $max_capacity ]; then
max_capacity=$capacity
fi
if [ $capacity -lt $min_capacity ]; then
min_capacity=$capacity
fi
if [ $(((4 * $max_capacity))) -lt $(((3 * ($max_capacity + $min_capacity)))) ]; then
middle_capacity=$((($min_capacity + $max_capacity)>>($sched_capacity_shift+1)))
else
middle_capacity=$(((($max_capacity / 3)>>($sched_capacity_shift-1))+1))
fi
echo "min capacity: $min_capacity max: $max_capacity middle: $middle_capacity"
- done
+}
+cpu_num=0
+verify_cpu_capacity() +{
- for dt_cpu in $dt_cpus; do
if [ ! -f /sys/firmware/devicetree/base/cpus/$dt_cpu/clock-frequency ]; then
log_skip "no clock frequency file present"
return
fi
if [ ! -f /sys/firmware/devicetree/base/cpus/$dt_cpu/compatible ]; then
log_skip "no compatible file present"
return
fi
filename=/sys/firmware/devicetree/base/cpus/$dt_cpu/clock-frequency
echo "clock frequency file: $filename"
bytes=$(od -t u1 -A n $filename)
calc_freq $bytes
echo "frequency: $freq"
cpu_type=$(cat /sys/firmware/devicetree/base/cpus/$dt_cpu/compatible)
echo "cpu type: $cpu_type"
set_eff $cpu_type
echo "efficiency: $eff"
capacity=$((($freq>>20)*$eff/$middle_capacity))
expected_capacity_string=$(dmesg | grep "CPU$cpu_num: update cpu_capacity")
expected_capacity=${expected_capacity_string##*cpu_capacity}
echo "cpu num: $cpu_num capacity $capacity expected capacity $expected_capacity"
check "expected capacity for cpu$cpu_num equal to computed capacity" "test $expected_capacity -eq $capacity"
cpu_num=$((cpu_num+1))
- done
+}
+verify_capacity() +{
- if ! [ -d /sys/firmware/devicetree/base/cpus ]; then
log_skip "no cpus directory present"
return
- fi
- calc_mid_capacity
- dt_cpus=$(ls -1 /sys/firmware/devicetree/base/cpus | egrep "cpu@.{1,2}$")
- verify_cpu_capacity
- dt_cpus=$(ls -1 /sys/firmware/devicetree/base/cpus | egrep "cpu@.{3,4}$")
- verify_cpu_capacity
+}
+verify_capacity || exit 1 +test_status_show diff --git a/cputopology/cputopology_04.txt b/cputopology/cputopology_04.txt new file mode 100644 index 0000000..36647db --- /dev/null +++ b/cputopology/cputopology_04.txt @@ -0,0 +1 @@
+test capacity calculation
1.8.3.2
On 01 Apr 15 18:20, Vincent Guittot wrote:
On 1 April 2015 at 17:41, Lisa Nguyen lisa.nguyen@linaro.org wrote:
Gentle ping and friendly reminder that I need someone to ack Larry's cpu capacity script before I can merge it :)
I'm not sure that the beg of the output file which displays the steps to compute capacity is really necessary (min, max middle value). We are only interested in final result: cpu num: X capacity YYYY expected capacity ZZZZ cputopology_04.0: checking expected capacity for cpuX equal to computed capacity... Ok
Agreed, I'll submit a v3 with the extra printfs removed. I left them in so that if there were problems on platforms Lisa (or anyone else) tested for me, it would be easier for me to debug, and also so reviewers could see the intermediate calculations if they wanted to.
Apart from that it's ok for me
Thanks.
Larry