-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbenchmark
More file actions
executable file
·97 lines (83 loc) · 3 KB
/
benchmark
File metadata and controls
executable file
·97 lines (83 loc) · 3 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
#!/bin/bash
FUNCTION_NAME="cloudless-lambda-os-only-lab-function"
FUNCTION_NAME="cloudless-lambda-os-only-lab-function-optimized"
# FUNCTION_NAME="cloudless-lambda-os-only-lab-image"
INVOKE_SCRIPT="invoke"
report () {
local SINCE
local FUNCTION_NAME
SINCE=${1:-"1m"}
FUNCTION_NAME="${2:-$FUNCTION_NAME}"
echo "Fetching logs for function: $FUNCTION_NAME since $SINCE" >&2
aws logs tail \
--since "$SINCE" \
--format short "/aws/lambda/$FUNCTION_NAME" \
| grep REPORT
}
init_data () {
local SINCE="${1:-1m}"
local FUNCTION_NAME="${2:-$FUNCTION_NAME}"
local DATA="${3:-$(report "$SINCE" "$FUNCTION_NAME")}"
echo "$DATA" \
| grep -o -E 'Init Duration: (.+) ms' \
| cut -d' ' -f 3
}
init_stats () {
local SINCE="${1:-1m}"
local FUNCTION_NAME="${2:-$FUNCTION_NAME}"
local DATA="${3:-$(report "$SINCE" "$FUNCTION_NAME")}"
local INIT
INIT=$(mktemp)
# echo "$DATA"
echo "$DATA" \
| grep -o -E 'Init Duration: (.+) ms' \
| cut -d' ' -f 3 \
> "$INIT"
# echo "$INIT"
init_count=$(wc -l "$INIT" | awk '{ print $1 }') && \
init_total=$(paste -s -d + "$INIT" | bc) && \
init_average=$(echo "scale=2; $init_total/$init_count" | bc)
jq -n --arg init_count "$init_count" \
--arg init_total "$init_total" \
--arg init_average "$init_average" '
{
"init_count": '"$init_count"',
"init_total_ms": '"$init_total"',
"init_average_ms": '"$init_average"'
}'
}
# Invoke with changing env var
benchmark () {
local FUNCTION_NAME="${1:-$FUNCTION_NAME}"
local SINCE
SINCE=$(date -u +%Y-%m-%dT%H:%M:%SZ)
# for i in {1..50}; do
# aws lambda update-function-configuration \
# --function-name "$FUNCTION_NAME" \
# --environment "Variables={BENCH_RUN=$i}" 1>/dev/null 2>/dev/stdout
# sleep 3 # wait for config to propagate
# aws lambda invoke --function-name "$FUNCTION_NAME" /dev/stdout 1>/dev/null 2>/dev/stdout
# done
# echo "$INVOKE_SCRIPT"
if [ "$FUNCTION_NAME" == "cloudless-lambda-os-only-lab-function-optimized" ];
then
FUNCTION_ALIAS="cloudless-lambda-os-only-lab-function-optimized"
FUNCTION_NAME="cloudless-lambda-os-only-lab-function"
else
FUNCTION_ALIAS="$FUNCTION_NAME"
fi
aws lambda update-function-configuration \
--function-name "$FUNCTION_NAME" \
--environment "Variables={BENCH_RUN=$SINCE}" 1>/dev/null 2>/dev/stdout
echo "Waiting 3s for config to propagate..."
sleep 3 # wait for config to propagate
echo "Invoking function $FUNCTION_NAME concurrently..."
export FUNCTION_NAME
seq 1 120 | parallel -j 60 "$INVOKE_SCRIPT"
# aws lambda invoke --function-name "$FUNCTION_NAME" /dev/stdout 1>/dev/null 2>/dev/stdout
echo "Waiting 30s for logs to propagate..."
sleep 10
# echo "Since: $SINCE"
echo "Init stats since $SINCE :"
init_stats "$SINCE" | tee "data/$FUNCTION_ALIAS-init-stats.json"
}