-
Notifications
You must be signed in to change notification settings - Fork 95
Feat/merged benchmarks #280
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
Yes, correct. Oversaw this. Co-authored-by: Mark <mrkswrn@gmail.com>
Implements complete Java runtime infrastructure enabling serverless function benchmarking on AWS Lambda and Azure Functions platforms. Key components: - AWS/Azure function wrappers with cold start tracking and JSON handling - Maven-based build system with shaded JAR packaging - Docker build images for both platforms (Java 17) - Package structure: lib/ for JARs, handler/ for function metadata Benchmarks implemented: - 010.sleep: Basic microbenchmark for testing infrastructure - 110.dynamic-html: Web app with Mustache templating Critical fixes: - Removed Maven quiet mode (-q) causing Docker build failures - Proper dependency scoping (Azure Functions and Jackson must be compiled, not provided) - Platform-specific packaging logic (JAR structure differs from Python/Node.js) Tested and verified working on Azure Functions with Java 17.
…rverless-benchmarks into features/pypy-runtime
fix gcp images to specific runtime versions instead of ubuntu
…rking Tools - Added Rust runtime support (AWS) - Added PyPy support (AWS, Azure, GCP, Local) - Added Java runtime support (AWS, Azure) - Added cross-platform benchmarking scripts - Enhanced plotting and visualization tools - Updated Dockerfiles and system configurations - Removed sensitive credentials from config files
- Deleted `plot_comparison.py` and associated plotting functions. - Removed `run_comparison.sh` and `run_sebs_with_plots.sh` scripts for benchmark execution and plot generation. - Cleaned up the repository by eliminating unused files related to benchmarking and visualization.
- Modified `java_installer.sh` to use `mvn clean package` for more reliable builds. - Updated `Dockerfile.function` to unzip the function JAR and remove the original after extraction.
- Removed unnecessary comment in `pom.xml`. - Updated `entrypoint.sh` to ensure correct ownership of the `/mnt/function` directory. - Modified `benchmark.py` to include Java files in the hash calculation and added logic for handling Java installer script. - Improved error handling and logging for Docker builds, particularly for Rust projects.
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think you need an extra object implementation for this. For "parallel" invocations, AWS Lambda spins up new instances. You can simply check for the marker file's existence in the handler.
| except ImportError as e: | ||
| # Try AWS-style import as fallback | ||
| try: | ||
| from function import function as aws_function_module |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does this ever happen?
| 'results_time': results_time, | ||
| 'result': log_data, | ||
| 'is_cold': is_cold, | ||
| 'is_cold_worker': is_cold_worker, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What is this used for in processing?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Roll back these changes. This is a kind of tutorial file we shouldn't touch.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove this
scripts/cross_platform_benchmark.py
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove this
sebs/benchmark.py
Outdated
| for f in matches: | ||
| dest = os.path.join(output_dir, os.path.basename(f)) | ||
| self.logging.info(f"copy_code: Copying {f} to {dest}") | ||
| shutil.copy2(f, dest) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does this not do the exact same?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes but more logging, had issues with rust
Remove ColdStartTracker and refactor cold start detection in AWS Java handler - Deleted ColdStartTracker class from the Java AWS wrapper. - Integrated cold start detection logic directly into the Handler class. - Updated configuration to reflect changes in runtime language and version. - Removed unused cross-platform benchmarking script to streamline the repository.
This PR consolidates several major feature enhancements into the SeBS framework, significantly expanding runtime support and benchmarking capabilities. It introduces native support for Rust, PyPy, and Java runtimes across multiple cloud platforms, along with comprehensive tooling for cross-platform benchmarking and result visualization.
1. New Runtime Support
benchmarks/wrappers/aws/rust.rust_installer.shand relevant Dockerfiles.010.sleepand110.dynamic-htmlbenchmarks in Rust.docs/rust-support.md.sebscore anddockerfilesto handle PyPy environments.java_installer.shand Maven project structures.2. Platform Enhancements
sebs/gcp/container.py) and ARM64 architecture support.