blob: 3dad2899c78f2a24a77caf22db3bced79722da10 [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
Manuel Pégourié-Gonnarda6b95f02015-09-09 13:47:28 +020055 grep -F SSL_MAX_CONTENT_LEN $CONFIG_H || echo 'SSL_MAX_CONTENT_LEN=16384'
56
Manuel Pégourié-Gonnardc5b849b2014-12-01 12:15:47 +010057 printf " Executable size... "
58
59 make clean
60 CFLAGS=$CFLAGS_EXEC make OFLAGS=-Os lib >/dev/null 2>&1
61 cd programs
62 CFLAGS=$CFLAGS_EXEC make OFLAGS=-Os ssl/$CLIENT >/dev/null
63 strip ssl/$CLIENT
Manuel Pégourié-Gonnard4a7ed712015-03-11 10:26:50 +000064 stat -c '%s' ssl/$CLIENT
Manuel Pégourié-Gonnardc5b849b2014-12-01 12:15:47 +010065 cd ..
66
67 printf " Peak ram usage... "
68
69 make clean
70 CFLAGS=$CFLAGS_MEM make OFLAGS=-Os lib >/dev/null 2>&1
71 cd programs
72 CFLAGS=$CFLAGS_MEM make OFLAGS=-Os ssl/$CLIENT >/dev/null
73 cd ..
74
75 ./ssl_server2 $SERVER_ARGS >/dev/null &
76 SRV_PID=$!
77 sleep 1;
78
79 if valgrind --tool=massif --stacks=yes programs/ssl/$CLIENT >/dev/null 2>&1
80 then
81 FAILED=0
82 else
83 echo "client failed" >&2
84 FAILED=1
85 fi
86
87 kill $SRV_PID
88 wait $SRV_PID
89
90 scripts/massif_max.pl massif.out.*
91 mv massif.out.* massif-$NAME.$$
92}
93
Manuel Pégourié-Gonnardf166c542014-12-01 11:30:56 +010094# preparation
95
Manuel Pégourié-Gonnard4d5cc112014-11-25 12:21:48 +010096CONFIG_BAK=${CONFIG_H}.bak
97cp $CONFIG_H $CONFIG_BAK
98
Manuel Pégourié-Gonnardf166c542014-12-01 11:30:56 +010099rm -f massif.out.*
100
101printf "building server... "
102
103make clean
104make lib >/dev/null 2>&1
105(cd programs && make ssl/ssl_server2) >/dev/null
106cp programs/ssl/ssl_server2 .
107
108echo "done"
109
Manuel Pégourié-Gonnardc5b849b2014-12-01 12:15:47 +0100110# actual measurements
Manuel Pégourié-Gonnardf166c542014-12-01 11:30:56 +0100111
Manuel Pégourié-Gonnardc5b849b2014-12-01 12:15:47 +0100112do_config "ccm-psk-tls1_2" \
113 "" \
114 "psk=000102030405060708090A0B0C0D0E0F"
Manuel Pégourié-Gonnard4d5cc112014-11-25 12:21:48 +0100115
Manuel Pégourié-Gonnardc5b849b2014-12-01 12:15:47 +0100116do_config "suite-b" \
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200117 "MBEDTLS_BASE64_C MBEDTLS_PEM_PARSE_C MBEDTLS_CERTS_C" \
Manuel Pégourié-Gonnardc5b849b2014-12-01 12:15:47 +0100118 ""
Manuel Pégourié-Gonnardf166c542014-12-01 11:30:56 +0100119
120# cleanup
121
Manuel Pégourié-Gonnard4d5cc112014-11-25 12:21:48 +0100122mv $CONFIG_BAK $CONFIG_H
Manuel Pégourié-Gonnardf166c542014-12-01 11:30:56 +0100123make clean
124rm ssl_server2
Manuel Pégourié-Gonnard4d5cc112014-11-25 12:21:48 +0100125
126exit $FAILED