DEV Community

Vadym Kazulkin for AWS Community Builders

Posted on • Edited on

Lambda function with GraalVM Native Image - Part 4 Measuring cold and warm starts using different Lambda memory settings

Introduction

In part 2 of our article series we explored how to develop and deploy pure Lambda function (without using any frameworks like Spring Boot 3) with Custom Runtime containing GraalVM Native Image with GraalVM 21 runtime and in part 3 we measured the performance (cold and warm start times) of the Lambda function with 1024 MB of memory using this approach.

In this article, we'll measure cold and warm starts of the Lambda with different memory settings between 256 and 1536 MB to explore the tradeoff between cost and performance.

Measuring cold and warm starts of Lambda function with Custom Runtime containing GraalVM Native Image with different memory settings

We'll re-use exact the same experiment described in part 3 of this article series, but with different memory settings between 256 and 1536 MB.

Here are the results of the experiment:

Cold (c) and warm (m) start time in ms:

Memory setting c p50 c p75 c p90 c p99 c p99.9 c max w p50 w p75 w p90 w p99 w p99.9 w max
256 MB 822.74 833.50 845.25 923.88 952.96 953.84 4.04 4.59 5.47 18.55 137.10 471.76
512 MB 620.04 621.40 657.70 705.37 727.57 727.97 4.16 4.65 5.46 14.32 64.54 229.29
768 MB 561.63 574.11 589.82 628.15 633.83 634.23 4.23 4.73 5.55 13.01 42.31 203.22
1024 MB 525.77 532.12 542.32 632.56 635.73 636.11 4.16 4.69 5.46 12.30 37.25 211.83
1280 MB 515.37 524.20 539.08 577.57 624.39 624.52 4.23 4.77 5.64 12.80 34.67 126.97
1536 MB 504.16 516.40 528.93 548.86 628.15 628.31 4.26 4.73 5.55 12.70 44.03 105.46

Conclusion

In this article measured cold and warm starts of the pure Lambda function, having the memory setting between 256 and 1536 MB, using a Custom Runtime containing GraalVM Native Image with GraalVM 21 runtime.

We observe that warm start times are very close to each other, also for setting lower memory like 256 or 512 MB, and the difference is mainly visible for the high percentiles (>= p90). The cold start times are quite high for 256 and 512 MB, and starting from 768 MB very decrease only a bit by giving Lambda more memory, without any noticeable difference for memory greater than 1024 MB. Depending on your performance requirements, you can give Lambda less memory than 1024 MB, as we initially gave in the sample application and have a very good price-performance trade-off with 768 MB or even a bit less memory.

At the time of publishing, newer versions also became available (like the GraalVM 23 runtime), so you can make the version changes and recompile the GraalVM Native image following the instructions from part 2 of the series and re-measure the performance.

Update from February 10, 2025: new measurements with GraalVM 23 published in the article Lambda function with GraalVM Native Image - Part 5 Measuring cold and warm starts with GraalVM 23.

Top comments (0)