Lambda Power Tuning: Una comparativa entre arquitecturas x86_64 y arm64
Desde su aparicin, la herramienta de Lambda Power Tuning, al menos desde mi perspectiva es menos usada de lo que podra haber imaginado; sin embargo, entre las nuevas funcionalidades y mejoras que constantemente van agregando desde la comunidad y la discusin dentro de los equipos de desarrollo sobre migrar sus lambdas a una arquitectura de arm64, podra ser interesante reflotar esta herramienta y sacarle todo el jugo posible!
Lambda Power Tuning:
Pero qu es Lambda Power Tuning?, en definicin de un artculo de AWS podemos encontrar esta definicin que abarca todo lo que podemos aprovechar de la herramienta:
AWS Lambda Power Tuning es una herramienta de cdigo abierto que puede ayudarte a visualizar y ajustar con precisin la configuracin de memoria/potencia de las funciones Lambda. Se ejecuta en tu cuenta de AWS, impulsada por AWS Step Functions, y admite mltiples estrategias de optimizacin.
Es importante destacar que Lambda Power Tuning es una herramienta open sources y se puede colaborar, usar y probar bajo los trminos de la licencia Apache 2.0. A continuacin el Link del repositorio de GitHub.
Lambda Power Tuning es desde lo tcnico un stack de CloudFormation. El despliegue del Stack se realiza con CDK y est disponible para los distintos lenguajes que soporta CKD.
La manera como funciona es, se despliega un Stack donde la herramienta centrar es una Step-function que controla la ejecucin secuencial o en paralelo de las opciones de memoria que configuremos en los parmetros de la ejecucin y sobre las que queremos comparar.
Desplegando el Stack:
Siguiendo la documentacin de como desplegar el Stack vamos paso a paso:
Verificar que tenemos configuradas las credenciales para AWS
Si eres muy nuevo por aqu, dejo un Gits de como configurar AWS cli.
$ aws sts get-caller-identity#{# "UserId": "XXXXXXXXXXX",# "Account": "XXXXXXXXXXX",# "Arn": "arn:aws:iam::XXXXXXXXXXX:root"#}
Registrarnos en el ECR para poder gestionar las imgenes.
Es necesario hacer login con el repositorio de ECR para que permita la descarga de las imgenes que utilizara AWS SAM, ms informacin en este link.
$ aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
Descargar repositorio
Clonamos el repositorio, como hemos comentado, el CKD est disponible para distintos lenguajes de programacin.
$ git clone https://github.com/alexcasalboni/aws-lambda-power-tuning.git
Sam Build
Compilando el Stack antes del Deploy
$ cd ./aws-lambda-power-tuning$ sam build -u
Desplegar, en el modo guiado donde hay que llenar todos los parmetros que pide, la mayora por default para las primeras pruebas estn bien los valores por defecto.
$ sam deploy -g # version = 0.1# [default.deploy.parameters]# stack_name = "olcortesb-test-lambda-power-tuning"# resolve_s3 = true# s3_prefix = "olcortesb-test-lambda-power-tuning"# region = "eu-central-1"# confirm_changeset = true# capabilities = "CAPABILITY_IAM"# disable_rollback = true# parameter_overrides = "PowerValues=\"128,256,512,1024,1536,3008\" visualizationURL=\"https://lambda-power-tuning.show/\" lambdaResource=\"*\" totalExecutionTimeout=\"300\" permissionsBoundary=\"\" payloadS3Bucket=\"\" payloadS3Key=\"*\" layerSdkName=\"\" logGroupRetentionInDays=\"7\" securityGroupIds=\"\" subnetIds=\"\" stateMachineNamePrefix=\"powerTuningStateMachine\""# image_repositories = []
Las lambdas
Para la prueba utilizaremos dos lambas con el mismo cdigo, una lambda sobre arquitectura x86_64 y otra sobre arm64.
El cdigo que ejecutara cada lambda se trata de una funcin que calcula la serie fe Fibonacci para un valor de posicin n de manera recursiva.
import jsondef fibonacci(n): if n < 2: return n else: # fn = fn-1 + fn-2 return fibonacci(n-1) + fibonacci(n-2)def lambda_handler(event, context): return { 'statusCode': 200, 'body': fibonacci(event['value']) }
Ejecutamos las pruebas
Para ejecutar las pruebas nos vamos a las step funcin donde encontraremos la Step Function desplegada.
Para cada lambda preparamos un body con la informacin de la lambda sobre el que se ejecutar la prueba "lambdaARN" y el body "payload" que deber recibir cada pruebas
Lambda con arquitectura X86_64
{ "input": { "lambdaARN": "arn:aws:lambda:eu-central-1:{ACCOUNT-NUMBER}:function:fibonacci-x86_64", "powerValues": [ 128, 256, 512, 1024, 2048, 3008 ], "num": 10, "payload": { "value": 8, "weight": 10 }, "parallelInvocation": true, "strategy": "cost" }, "inputDetails": { "truncated": false }, "roleArn": "arn:aws:iam::{ACCOUNT-NUMBER}:role/lambda-power-tuning-statemachineRole-QW8Kjjb44WgL"}
Lambda con aerquitectura arm64
{ "input": { "lambdaARN": "arn:aws:lambda:eu-central-1:{ACCOUNT-NUMBER}:function:fibonacci-arm64", "powerValues": [ 128, 256, 512, 1024, 2048, 3008 ], "num": 10, "payload": { "value": 8, "weight": 10 }, "parallelInvocation": true, "strategy": "cost" }, "inputDetails": { "truncated": false }, "roleArn": "arn:aws:iam::{ACCOUNT-NUMBER}:role/lambda-power-tuning-statemachineRole-QW8Kjjb44WgL"}
Resultados
Lambda X86_64
Como salida de la ejecucin, cada prueba arroba una respuesta como la siguiente:
{ "output": { "power": 128, "cost": 4.2e-9, "duration": 1.6050000000000002, "stateMachine": { "executionCost": 0.0006, "lambdaCost": 0.0000023604000000000003, "visualization": "https://lambda-power-tuning.show/{your-id}" } }, "outputDetails": { "truncated": false }}
El parmetro visualizacin es una URL que llevara a una grfica como la que se muestra a continuacin.
Lambda arm64
Conclusiones
El rendimiento del procesador x86 es mucho ms estable funcin de la memoria que el del ARM
Si bien el rendimiento del procesador x86 es mucho ms estable despus de los 512MB el procesador ARM aumenta la eficiencia significativamente y llega a igualarlo.
El punto de equilibrio del procesador ARM es mucho ms econmico y eficiente que el procesador X86_64 por encima de los 512 MB
Sera interesante realizar esta prueba para cada carga de trabajo que se tenga pensado optimizar con el cdigo de cada lambda siempre que permita ser ejecutado en un procesador ARM.
La herramienta de Lambda Power Tuning es una herramienta que no debe faltar en nuestros diseos y desarrollos de arquitecturas Serverless basadas en lambda, ofrece una versatilidad en validar nuestro diseo y un ajuste fino del hardware que necesitamos para una ejecucin eficiente.
Referencias
https://github.com/alexcasalboni/aws-lambda-power-tuning
https://docs.aws.amazon.com/AmazonECR/latest/public/public-registry-auth.html
Artículo original: Lambda Power Tuning: Una comparativa entre arquitecturas x86_64 y arm64