summaryrefslogtreecommitdiff
path: root/common/scripts/mmtests.sh
blob: eb5ac34cff19f0d9d812aadcebfe9bc3f6df3e37 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/bin/sh
#
# mmtests test case for Linux Linaro Ubuntu.
#
# Copyright (C) 2012 - 2014, 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.
#
# Author: Chase Qi <chase.qi@linaro.org>
#         Milosz Wasilewski <milosz.wasilewski@linaro.org>
#         Naresh Kamboju <naresh.kamboju@linaro.org>
#

set -x
TESTS=$1
KernelVersion=`uname -r`
DIR=`pwd`

# Download tests directly, rather than use the customized mirror.
sed -i '/WEBROOT/s/^/#/' $DIR/shellpacks/common-config.sh

# Calculate the mean, min and max of data stored in a file
min_max_mean(){
    eval `awk '{if(min=="") {min=max=$1}; if($1>max) {max=$1}; if($1< min) {min=$1}; total+=$1; count+=1} \
         END {print "mean="total/count, "min="min, "max="max}' $1`
}

# Result parser
result_parser(){
    local TEST_ID=$1
    case $TEST_ID in
        # dd bench
        dd|dd-tmpfs|ddsync)
            if [ -z "`grep copied $DIR/work/log/loopdd-$KernelVersion/noprofile/mmtests.log`" ]; then
                lava-test-case $TEST_ID --result fail
            else
                dd_units=`grep copied $DIR/work/log/loopdd-$KernelVersion/noprofile/mmtests.log | tail -1 | awk '{print $9}'`
                # Get the min, max and mean scores of the 30 iterations
                grep copied $DIR/work/log/loopdd-$KernelVersion/noprofile/mmtests.log | awk '{print $8}' > $DIR/$TEST_ID-data.txt
                min_max_mean $DIR/$TEST_ID-data.txt
                lava-test-case $TEST_ID-min --result pass --measurement $min --units $dd_units
                lava-test-case $TEST_ID-max --result pass --measurement $max --units $dd_units
                lava-test-case $TEST_ID-mean --result pass --measurement $mean --units $dd_units
            fi
            if [ "$TEST_ID" = "dd-tmpfs" ]; then
                umount $DIR/work/testdisk
            fi
            ;;
        # Measure the latency in the Linux network stack between kernel and user space.
        ku-latency)
            if [ -z "`grep "Average.*us" $DIR/work/log/ku_latency-$KernelVersion/noprofile/ku-latency.log`" ]; then
                lava-test-case $TEST_ID --result fail
            else
               # Use the final total average value as measurement
               ku_total_average=`grep "Total Average.*us" $DIR/work/log/ku_latency-$KernelVersion/noprofile/ku-latency.log \
                                | tail -1 | awk '{print $6}'`
               # Use the final rolling average value as measurement
               ku_rolling_average=`grep "Rolling Average.*us" $DIR/work/log/ku_latency-$KernelVersion/noprofile/ku-latency.log \
                                  | tail -1 | awk '{print $6}'`
               lava-test-case $TEST_ID-total-average --result pass --measurement $ku_total_average --units us
               lava-test-case $TEST_ID-rolling-average --result pass --measurement $ku_rolling_average --units us
            fi
            ;;
        # Measure the performance of various system and library calls.
        libmicro)
            if [ -z "`grep Running $DIR/work/log/libmicro-$KernelVersion/noprofile/mmtests.log`" ]; then
                lava-test-case $TEST_ID --result fail
            else
                for i in `ls $DIR/work/log/libmicro-$KernelVersion/noprofile/memset*`; do
                    # Get test name and usecs/call value in the 3th line of each test log.
                    libmicro_test_name=`sed -n 3p $i | awk '{print $1}'`
                    libmicro_test_result=`sed -n 3p $i | awk '{print $4}'`
                    lava-test-case $TEST_ID-$libmicro_test_name --result pass --measurement $libmicro_test_result --units usecs/call
                done
            fi
            ;;
        # vm scalability test, measure spread of dd performance
        vmscale)
            if [ -z "`grep copied $DIR/work/log/vmscale-$KernelVersion/noprofile/lru-file-ddspread.log`" ]; then
                lava-test-case $TEST_ID --result fail
            else
                vmscale_units=`grep copied $DIR/work/log/vmscale-$KernelVersion/noprofile/lru-file-ddspread.log | tail -1 | awk '{print $9}'`
                # Get the min, max and mean scores of all iterations, the number of iterations equal to the number of processors.
                grep copied $DIR/work/log/vmscale-$KernelVersion/noprofile/lru-file-ddspread.log | awk '{print $8}' > $DIR/$TEST_ID-data.txt
                min_max_mean $DIR/$TEST_ID-data.txt
                lava-test-case $TEST_ID-ddspread-min --result pass --measurement $min --units $vmscale_units
                lava-test-case $TEST_ID-ddspread-max --result pass --measurement $max --units $vmscale_units
                lava-test-case $TEST_ID-ddspread-mean --result pass --measurement $mean --units $vmscale_units
            fi
            ;;
        # Time how long it takes to allocate a large buffer
        timedalloc)
            if [ -z "`grep elapsed $DIR/work/log/timedalloc-$KernelVersion/noprofile/time`" ]; then
                lava-test-case $TEST_ID --result fail
            else
                # Total number of CPU-seconds used by the system on behalf of the process (in kernel mode), in seconds.
                timedalloc_kernel="`grep elapsed $DIR/work/log/timedalloc-$KernelVersion/noprofile/time | awk '{print substr($2, 1, 4)}'`"
                # Total number of CPU-seconds that the process used directly (in user mode), in seconds.
                timedalloc_user="`grep elapsed $DIR/work/log/timedalloc-$KernelVersion/noprofile/time | awk '{print substr($1, 1, 4)}'`"
                lava-test-case $TEST_ID-kernel-mode --result pass --measurement $timedalloc_kernel --units seconds
                lava-test-case $TEST_ID-user-mode --result pass --measurement $timedalloc_user --units seconds
            fi
            ;;
    esac
}

# Run tests
for SUB_TEST in $TESTS; do
    # Clean up and check disk space.
    rm -rf $DIR/work/testdisk/tmp
    df -h

    # Run test by configuration.
    $DIR/run-mmtests.sh --no-monitor --config $DIR/configs/config-global-dhp__$SUB_TEST $KernelVersion
    if [ $? -ne 0 ]; then
        lava-test-case $SUB_TEST --result fail
    else
        result_parser $SUB_TEST
    fi
done