blob: 4900fe1eaf996ec035cc5853b26e6f1c5b0f5060 [file] [log] [blame]
Manuel Pégourié-Gonnard4d5cc112014-11-25 12:21:48 +01001#!/bin/sh
2
3# Measure memory usage of a minimal client using a small configuration
Manuel Pégourié-Gonnardf166c542014-12-01 11:30:56 +01004# Currently hardwired to ccm-psk and suite-b, may be expanded later
5#
6# Use different build options for measuring executable size and memory usage,
7# since for memory we want debug information.
Manuel Pégourié-Gonnard4d5cc112014-11-25 12:21:48 +01008
9set -eu
10
11CONFIG_H='include/polarssl/config.h'
Manuel Pégourié-Gonnardc5b849b2014-12-01 12:15:47 +010012
Manuel Pégourié-Gonnard4d5cc112014-11-25 12:21:48 +010013CLIENT='mini_client'
14
Manuel Pégourié-Gonnardc5b849b2014-12-01 12:15:47 +010015CFLAGS_EXEC=-fno-asynchronous-unwind-tables
16CFLAGS_MEM=-g3
17
Manuel Pégourié-Gonnard4d5cc112014-11-25 12:21:48 +010018if [ -r $CONFIG_H ]; then :; else
19 echo "$CONFIG_H not found" >&2
20 exit 1
21fi
22
Manuel Pégourié-Gonnardf166c542014-12-01 11:30:56 +010023if grep -i cmake Makefile >/dev/null; then
24 echo "Not compatible with CMake" >&2
25 exit 1
26fi
27
28if git status | grep -F $CONFIG_H >/dev/null 2>&1; then
29 echo "config.h not clean" >&2
30 exit 1
31fi
32
Manuel Pégourié-Gonnardc5b849b2014-12-01 12:15:47 +010033# make measurements with one configuration
34# usage: do_config <name> <unset-list> <server-args>
35do_config()
36{
37 NAME=$1
38 UNSET_LIST=$2
39 SERVER_ARGS=$3
40
41 echo ""
42 echo "config-$NAME:"
43 cp configs/config-$NAME.h $CONFIG_H
44
45 for FLAG in $UNSET_LIST; do
46 scripts/config.pl unset $FLAG
47 done
48
49 printf " Executable size... "
50
51 make clean
52 CFLAGS=$CFLAGS_EXEC make OFLAGS=-Os lib >/dev/null 2>&1
53 cd programs
54 CFLAGS=$CFLAGS_EXEC make OFLAGS=-Os ssl/$CLIENT >/dev/null
55 strip ssl/$CLIENT
56 stat -f '%z' ssl/$CLIENT
57 cd ..
58
59 printf " Peak ram usage... "
60
61 make clean
62 CFLAGS=$CFLAGS_MEM make OFLAGS=-Os lib >/dev/null 2>&1
63 cd programs
64 CFLAGS=$CFLAGS_MEM make OFLAGS=-Os ssl/$CLIENT >/dev/null
65 cd ..
66
67 ./ssl_server2 $SERVER_ARGS >/dev/null &
68 SRV_PID=$!
69 sleep 1;
70
71 if valgrind --tool=massif --stacks=yes programs/ssl/$CLIENT >/dev/null 2>&1
72 then
73 FAILED=0
74 else
75 echo "client failed" >&2
76 FAILED=1
77 fi
78
79 kill $SRV_PID
80 wait $SRV_PID
81
82 scripts/massif_max.pl massif.out.*
83 mv massif.out.* massif-$NAME.$$
84}
85
Manuel Pégourié-Gonnardf166c542014-12-01 11:30:56 +010086# preparation
87
Manuel Pégourié-Gonnard4d5cc112014-11-25 12:21:48 +010088CONFIG_BAK=${CONFIG_H}.bak
89cp $CONFIG_H $CONFIG_BAK
90
Manuel Pégourié-Gonnardf166c542014-12-01 11:30:56 +010091rm -f massif.out.*
92
93printf "building server... "
94
95make clean
96make lib >/dev/null 2>&1
97(cd programs && make ssl/ssl_server2) >/dev/null
98cp programs/ssl/ssl_server2 .
99
100echo "done"
101
Manuel Pégourié-Gonnardc5b849b2014-12-01 12:15:47 +0100102# actual measurements
Manuel Pégourié-Gonnardf166c542014-12-01 11:30:56 +0100103
Manuel Pégourié-Gonnardc5b849b2014-12-01 12:15:47 +0100104do_config "ccm-psk-tls1_2" \
105 "" \
106 "psk=000102030405060708090A0B0C0D0E0F"
Manuel Pégourié-Gonnard4d5cc112014-11-25 12:21:48 +0100107
Manuel Pégourié-Gonnardc5b849b2014-12-01 12:15:47 +0100108do_config "suite-b" \
109 "POLARSSL_BASE64_C POLARSSL_PEM_PARSE_C POLARSSL_CERTS_C" \
110 ""
Manuel Pégourié-Gonnardf166c542014-12-01 11:30:56 +0100111
112# cleanup
113
Manuel Pégourié-Gonnard4d5cc112014-11-25 12:21:48 +0100114mv $CONFIG_BAK $CONFIG_H
Manuel Pégourié-Gonnardf166c542014-12-01 11:30:56 +0100115make clean
116rm ssl_server2
Manuel Pégourié-Gonnard4d5cc112014-11-25 12:21:48 +0100117
118exit $FAILED