-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathinvoke_x86_64_arm64_lambdas.py
74 lines (55 loc) · 2.24 KB
/
invoke_x86_64_arm64_lambdas.py
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
import boto3
import json
import base64
import re
import sys
client = boto3.client('lambda')
f= open('./events/event.json')
json_input = json.load(f)
def call_XGBoost_x86_64_Lambda():
response = client.invoke(
FunctionName='<XGBoost_x86_64_Lambda_ARN>',
InvocationType='RequestResponse',
LogType='Tail',
Payload=json.dumps(json_input)
)
return(find_duration(response))
def call_XGBoost_arm64_Lambda():
response = client.invoke(
FunctionName='<XGBoost_arm64_Lambda_ARN>',
InvocationType='RequestResponse',
LogType='Tail',
Payload=json.dumps(json_input)
)
return(find_duration(response))
def find_duration(response):
log_result = base64.b64decode(response['LogResult']).decode('utf-8')
result = re.findall(r'Duration: (\d+\.\d+) ms', log_result)
return (float(result[0]))
# Warm the two Lambda Functions first
print("Warming x86_64 and arm64 Lambda Functions")
call_XGBoost_x86_64_Lambda()
call_XGBoost_arm64_Lambda()
print("Warming x86_64 and arm64 Lambda Functions - Done")
print("Sending events to x86_64 and arm64 Lambda Functions")
counter=1
num_calls=100
total_duration_x86_64=0
total_duration_arm64=0
while counter < num_calls:
duration_x86_64 = call_XGBoost_x86_64_Lambda()
# print(f'call_XGBoost_x86_64_Lambda duration: {duration_x86_64}')
total_duration_x86_64 = total_duration_x86_64 + duration_x86_64
duration_arm64 = call_XGBoost_arm64_Lambda()
# print(f'call_XGBoost_arm64_Lambda duration: {duration_arm64}')
total_duration_arm64 = total_duration_arm64 + duration_arm64
sys.stdout.write(('=' * counter) + ('' * (num_calls - counter)) + ("\r [ %d" % counter + "% ] "))
sys.stdout.flush()
counter = counter + 1
print("\nSending events to x86_64 and arm64 Lambda Functions - Done")
avg_duration_x86_64 = total_duration_x86_64/num_calls
avg_duration_arm64 = total_duration_arm64/num_calls
improvement_percentage= "{:.0%}".format(1 - (avg_duration_arm64 / avg_duration_x86_64))
print('Average duration x86_64: {:.2f} ms'.format(total_duration_x86_64/num_calls))
print('Average duration arm64: {:.2f} ms'.format(total_duration_arm64/num_calls))
print(f'*** Improvement of arm64 (Graviton2) over x86_64: {improvement_percentage} ***')