blob: 0738e7de264305219801f728422bd0e7f1785353 [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
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +000011CONFIG_H='include/mbedtls/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é-Gonnard47e02142015-03-18 16:52:20 +000015CFLAGS_EXEC='-fno-asynchronous-unwind-tables -Wl,--gc-section -ffunction-sections -fdata-sections'
Manuel Pégourié-Gonnardc5b849b2014-12-01 12:15:47 +010016CFLAGS_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
Manuel Pégourié-Gonnard4a7ed712015-03-11 10:26:50 +000028if [ $( uname ) != Linux ]; then
29 echo "Only work on Linux" >&2
30 exit 1
31fi
32
Manuel Pégourié-Gonnardf166c542014-12-01 11:30:56 +010033if git status | grep -F $CONFIG_H >/dev/null 2>&1; then
34 echo "config.h not clean" >&2
35 exit 1
36fi
37
Manuel Pégourié-Gonnardc5b849b2014-12-01 12:15:47 +010038# make measurements with one configuration
39# usage: do_config <name> <unset-list> <server-args>
40do_config()
41{
42 NAME=$1
43 UNSET_LIST=$2
44 SERVER_ARGS=$3
45
46 echo ""
47 echo "config-$NAME:"
48 cp configs/config-$NAME.h $CONFIG_H
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020049 scripts/config.pl unset MBEDTLS_SSL_SRV_C
Manuel Pégourié-Gonnardc5b849b2014-12-01 12:15:47 +010050
51 for FLAG in $UNSET_LIST; do
52 scripts/config.pl unset $FLAG
53 done
54
55 printf " Executable size... "
56
57 make clean
58 CFLAGS=$CFLAGS_EXEC make OFLAGS=-Os lib >/dev/null 2>&1
59 cd programs
60 CFLAGS=$CFLAGS_EXEC make OFLAGS=-Os ssl/$CLIENT >/dev/null
61 strip ssl/$CLIENT
Manuel Pégourié-Gonnard4a7ed712015-03-11 10:26:50 +000062 stat -c '%s' ssl/$CLIENT
Manuel Pégourié-Gonnardc5b849b2014-12-01 12:15:47 +010063 cd ..
64
65 printf " Peak ram usage... "
66
67 make clean
68 CFLAGS=$CFLAGS_MEM make OFLAGS=-Os lib >/dev/null 2>&1
69 cd programs
70 CFLAGS=$CFLAGS_MEM make OFLAGS=-Os ssl/$CLIENT >/dev/null
71 cd ..
72
73 ./ssl_server2 $SERVER_ARGS >/dev/null &
74 SRV_PID=$!
75 sleep 1;
76
77 if valgrind --tool=massif --stacks=yes programs/ssl/$CLIENT >/dev/null 2>&1
78 then
79 FAILED=0
80 else
81 echo "client failed" >&2
82 FAILED=1
83 fi
84
85 kill $SRV_PID
86 wait $SRV_PID
87
88 scripts/massif_max.pl massif.out.*
89 mv massif.out.* massif-$NAME.$$
90}
91
Manuel Pégourié-Gonnardf166c542014-12-01 11:30:56 +010092# preparation
93
Manuel Pégourié-Gonnard4d5cc112014-11-25 12:21:48 +010094CONFIG_BAK=${CONFIG_H}.bak
95cp $CONFIG_H $CONFIG_BAK
96
Manuel Pégourié-Gonnardf166c542014-12-01 11:30:56 +010097rm -f massif.out.*
98
99printf "building server... "
100
101make clean
102make lib >/dev/null 2>&1
103(cd programs && make ssl/ssl_server2) >/dev/null
104cp programs/ssl/ssl_server2 .
105
106echo "done"
107
Manuel Pégourié-Gonnardc5b849b2014-12-01 12:15:47 +0100108# actual measurements
Manuel Pégourié-Gonnardf166c542014-12-01 11:30:56 +0100109
Manuel Pégourié-Gonnardc5b849b2014-12-01 12:15:47 +0100110do_config "ccm-psk-tls1_2" \
111 "" \
112 "psk=000102030405060708090A0B0C0D0E0F"
Manuel Pégourié-Gonnard4d5cc112014-11-25 12:21:48 +0100113
Manuel Pégourié-Gonnardc5b849b2014-12-01 12:15:47 +0100114do_config "suite-b" \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200115 "MBEDTLS_BASE64_C MBEDTLS_PEM_PARSE_C MBEDTLS_CERTS_C" \
Manuel Pégourié-Gonnardc5b849b2014-12-01 12:15:47 +0100116 ""
Manuel Pégourié-Gonnardf166c542014-12-01 11:30:56 +0100117
118# cleanup
119
Manuel Pégourié-Gonnard4d5cc112014-11-25 12:21:48 +0100120mv $CONFIG_BAK $CONFIG_H
Manuel Pégourié-Gonnardf166c542014-12-01 11:30:56 +0100121make clean
122rm ssl_server2
Manuel Pégourié-Gonnard4d5cc112014-11-25 12:21:48 +0100123
124exit $FAILED