blob: 710ee96e024173867d495afa293c504a6c1f0a55 [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
Manuel Pégourié-Gonnard92471fb2014-12-01 17:56:03 +010044 scripts/config.pl unset POLARSSL_SSL_SRV_C
Manuel Pégourié-Gonnardc5b849b2014-12-01 12:15:47 +010045
46 for FLAG in $UNSET_LIST; do
47 scripts/config.pl unset $FLAG
48 done
49
50 printf " Executable size... "
51
52 make clean
53 CFLAGS=$CFLAGS_EXEC make OFLAGS=-Os lib >/dev/null 2>&1
54 cd programs
55 CFLAGS=$CFLAGS_EXEC make OFLAGS=-Os ssl/$CLIENT >/dev/null
56 strip ssl/$CLIENT
57 stat -f '%z' ssl/$CLIENT
58 cd ..
59
60 printf " Peak ram usage... "
61
62 make clean
63 CFLAGS=$CFLAGS_MEM make OFLAGS=-Os lib >/dev/null 2>&1
64 cd programs
65 CFLAGS=$CFLAGS_MEM make OFLAGS=-Os ssl/$CLIENT >/dev/null
66 cd ..
67
68 ./ssl_server2 $SERVER_ARGS >/dev/null &
69 SRV_PID=$!
70 sleep 1;
71
72 if valgrind --tool=massif --stacks=yes programs/ssl/$CLIENT >/dev/null 2>&1
73 then
74 FAILED=0
75 else
76 echo "client failed" >&2
77 FAILED=1
78 fi
79
80 kill $SRV_PID
81 wait $SRV_PID
82
83 scripts/massif_max.pl massif.out.*
84 mv massif.out.* massif-$NAME.$$
85}
86
Manuel Pégourié-Gonnardf166c542014-12-01 11:30:56 +010087# preparation
88
Manuel Pégourié-Gonnard4d5cc112014-11-25 12:21:48 +010089CONFIG_BAK=${CONFIG_H}.bak
90cp $CONFIG_H $CONFIG_BAK
91
Manuel Pégourié-Gonnardf166c542014-12-01 11:30:56 +010092rm -f massif.out.*
93
94printf "building server... "
95
96make clean
97make lib >/dev/null 2>&1
98(cd programs && make ssl/ssl_server2) >/dev/null
99cp programs/ssl/ssl_server2 .
100
101echo "done"
102
Manuel Pégourié-Gonnardc5b849b2014-12-01 12:15:47 +0100103# actual measurements
Manuel Pégourié-Gonnardf166c542014-12-01 11:30:56 +0100104
Manuel Pégourié-Gonnardc5b849b2014-12-01 12:15:47 +0100105do_config "ccm-psk-tls1_2" \
106 "" \
107 "psk=000102030405060708090A0B0C0D0E0F"
Manuel Pégourié-Gonnard4d5cc112014-11-25 12:21:48 +0100108
Manuel Pégourié-Gonnardc5b849b2014-12-01 12:15:47 +0100109do_config "suite-b" \
110 "POLARSSL_BASE64_C POLARSSL_PEM_PARSE_C POLARSSL_CERTS_C" \
111 ""
Manuel Pégourié-Gonnardf166c542014-12-01 11:30:56 +0100112
113# cleanup
114
Manuel Pégourié-Gonnard4d5cc112014-11-25 12:21:48 +0100115mv $CONFIG_BAK $CONFIG_H
Manuel Pégourié-Gonnardf166c542014-12-01 11:30:56 +0100116make clean
117rm ssl_server2
Manuel Pégourié-Gonnard4d5cc112014-11-25 12:21:48 +0100118
119exit $FAILED