Repository navigation
Expand file tree
/
Copy pathstatstracer
More file actions
executable file
·123 lines (102 loc) · 3.09 KB
/
Copy pathstatstracer
File metadata and controls
executable file
·123 lines (102 loc) · 3.09 KB
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
#!/bin/bash
# script measurecost(statstracer) <CONTAINER> <UHULL>
if [ -z $1 ]
then
echo "Syntax: $0 <container> [<uhullfile.json>]"
exit 1
fi
#Get container name
CONTAINER=$1
sleep 0.01
#Empty the stats aux file
:> aux
FILE="$CONTAINER-rawresults".csv
:> $FILE
#Get upscaled memory consumption hull file for dynamic memory autotuning, if specified
UHULL=$2
#Obtain max memory usage
##get container's current status
#status="$(docker inspect --format '{{.State.Status}}' $CONTAINER 2>/dev/null)"
oldstatus=x
status=
while [ "$status" = "" ]
do
status="$(docker inspect --format '{{.State.Status}}' $CONTAINER 2>/dev/null)"
if [ "$status" != "$oldstatus" ]
then
echo ":: init-status ($status)"
oldstatus=$status
fi
done
CONTAINERID="$(docker inspect --format '{{.Id}}' $CONTAINER)"
##wait for container to be running
while [ $status != "running" ]
do
sleep 0.001
status="$(docker inspect --format '{{.State.Status}}' $CONTAINER)"
echo ":: run-status ($status)"
if [ $status = "exited" ]
then
echo "Measurement failed prematurily before startup"
rm $FILE
exit 1
fi
done
echo "$(date --date=$(docker inspect --format='{{.State.StartedAt}}' $CONTAINER) +"%T.%3N"),0" >> $FILE
if [ ! -z "$UHULL" ]
then
echo ":: uhull-status (launch)"
./autotuner $CONTAINER $UHULL &
fi
MEMORYLIM="$(cat /sys/fs/cgroup/memory/docker/$CONTAINERID/memory.limit_in_bytes)"
lim=$MEMORYLIM
##loop: while the container is running, get the current memory usage into the aux file
while [ $status != "exited" ]
do
sleep 0.001
##mem="$(docker stats --no-stream --format "{{.MemUsage}}" $CONTAINER)"
dt=$(date +"%T.%3N")
mem="$(cat /sys/fs/cgroup/memory/docker/$CONTAINERID/memory.usage_in_bytes)"
if [ ! -z "$UHULL" ]
then
lim="$(cat /sys/fs/cgroup/memory/docker/$CONTAINERID/memory.limit_in_bytes)"
fi
echo $mem >> aux
status="$(docker inspect --format '{{.State.Status}}' $CONTAINER)"
if [ $status != "exited" ]
then
if [ ! -z "$UHULL" ]
then
echo "$dt,$mem,$lim" >> $FILE
else
echo "$dt,$mem" >> $FILE
fi
fi
done
##sort memory usage file and get the highest value
MEMORY=$(sort -k 1 -h aux | tail -n 1)
rm aux
if [ -z "$MEMORY" ]
then
echo "Measurement failed"
rm $FILE
exit 1
fi
##print found value
echo "Max memory usage: $MEMORY bytes"
#Obtain runtime in ms
START=$(date --date=$(docker inspect --format='{{.State.StartedAt}}' $CONTAINER) +%s%3N)
STOP=$(date --date=$(docker inspect --format='{{.State.FinishedAt}}' $CONTAINER) +%s%3N)
DURATION=$(($STOP-$START))
echo "$(date --date=$(docker inspect --format='{{.State.FinishedAt}}' $CONTAINER) +"%T.%3N"),0" >> $FILE
echo "Container runtime: $DURATION milliseconds"
DOCKERMEMORY="$(cat /sys/fs/cgroup/memory/docker/memory.limit_in_bytes)"
echo "--- old cost calculation"
if [ "$DOCKERMEMORY" -eq "$MEMORYLIM" ]
then
./costcalculator $CONTAINER 1000000 $DURATION $MEMORY
else
./costcalculator $CONTAINER 1000000 $DURATION $MEMORY false $MEMORYLIM
fi
echo "--- new cost calculation"
python3 calculator/costcalculator.py 1000000 $DURATION $MEMORY False