Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
dbe3f5f
Import PyPy/GCP files from features/pypy-runtime
toooadi Jan 5, 2026
4b1f84d
Small fixes
toooadi Jan 5, 2026
c70c2ed
[system] Remove pypy references
mcopik Apr 23, 2026
f62437a
[dev] Linting
mcopik Apr 23, 2026
8a2c2f0
[gcp] Adapt to new container interface
mcopik Apr 23, 2026
524c825
Add GCP Pypy container benchmark files
toooadi Dec 12, 2025
ed50eb2
[gcp] Adjust interface between functions and containers
mcopik Apr 23, 2026
10f360b
[gcp] Adjust containers to the new deployment model
mcopik Apr 23, 2026
5318a05
[gcp] Add enum for the deployment type
mcopik Apr 23, 2026
d9a376e
[gcp] Refactorization of different implementations
mcopik Apr 24, 2026
deffe3e
[gcp] Correct update of function code
mcopik Apr 24, 2026
35308cf
[gcp] Add dedicated deployment config
mcopik Apr 24, 2026
de477c1
[gcp] Make library trigger working again
mcopik Apr 24, 2026
ecaa9ad
[gcp] Support loading config from measuremnets
mcopik Apr 26, 2026
487ace0
[gcp] Update wrapper to return request ID from both container and fun…
mcopik Apr 27, 2026
f2eb1c5
[gcp] Resolve image degists to ensure updates on GCP containers
mcopik Apr 27, 2026
14d75b9
[gcp] Store image URI with the function - current version
mcopik Apr 27, 2026
32a401e
[gcp] Add metric download for both functions and containers
mcopik Apr 27, 2026
54c8e5c
[gcp] GCP also does not support arm64 on containers
mcopik Apr 27, 2026
9c12466
[gcp] Simplify GCP conditional checks on container
mcopik Apr 27, 2026
9044990
[gcp] Disable extra checks
mcopik Apr 27, 2026
6364077
[gcp] Add additional configuration parameters for worker threading
mcopik Apr 27, 2026
f3b590c
[gcp] Add gunicorn as default Python driver and make it configurable
mcopik Apr 27, 2026
4e9987b
[gcp] Revemo debug logging
mcopik Apr 27, 2026
4950ff4
[gcp] Shorten names to fit into limit
mcopik Apr 27, 2026
4b1edee
[gcp] Fix default parameters ofr Python
mcopik Apr 27, 2026
f050e94
[gcp] Remove all name-based checks
mcopik Apr 27, 2026
eb7e1d5
[gcp] Test deletion of containers
mcopik Apr 27, 2026
992ce4e
[gcp] Update Python images
mcopik Apr 27, 2026
1a69439
[gcp] In gen1 functions, update metric download from execution id to …
mcopik Apr 27, 2026
7626a9c
[gcp] Update node.js deployments
mcopik Apr 27, 2026
5bae394
[gcp] Bump Java base image
mcopik Apr 27, 2026
369b937
[gcp] Add base image for Java containers
mcopik Apr 27, 2026
5b82d96
[gcp] Move handling of new request ids from cloud to local
mcopik Apr 27, 2026
3d7c82e
[gcp] Remove duplicated default values
mcopik Apr 27, 2026
637fc53
[gcp] Update configs
mcopik Apr 27, 2026
294b21b
[gcp] Avoid infinite wait
mcopik Apr 27, 2026
bf675c6
[gcp] Few minor fixes
mcopik Apr 27, 2026
de5028c
[dev] Update readme
mcopik Apr 27, 2026
d8f53af
[gcp] Move normalization of request ID to GCP
mcopik Apr 27, 2026
861d476
[gcp] HTTP fixes and single wait for update_config
mcopik Apr 27, 2026
48b4816
[gcp] Update docstrings
mcopik Apr 27, 2026
e2702aa
[gcp] Update docstrings
mcopik Apr 27, 2026
4247f12
[gcp] Add container metrics
mcopik Apr 28, 2026
63e8507
[gcp] Add docs
mcopik Apr 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -242,4 +242,5 @@ However, they can be missing some of the features from the `master` branch.
* [Alexander Schlieper (ETH Zurich)](https://github.com/xSurus) - improved support for Java benchmarks.
* [Laurin Jahns (ETH Zurich)](https://github.com/userlaurin) - support for language variants.
* [Sharayu Rasal](https://github.com/Sharayu1418) - help with function URLs on AWS.
* [Livio D'Agostini](https://github.com/ldzgch) - new implementations of benchmarks in Node.js.
* [Livio D'Agostini (ETH Zurich)](https://github.com/ldzgch) - new implementations of benchmarks in Node.js.
* [toooadi (ETH Zurich)](https://github.com/toooadi) - container support for Google Cloud.
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,17 @@
public class Handler implements HttpFunction {

private static final ObjectMapper MAPPER = new ObjectMapper();
private static final String FUNCTION_EXECUTION_ID_HEADER = "Function-Execution-Id";
private static final String TRACE_CONTEXT_HEADER = "X-Cloud-Trace-Context";

@Override
public void service(HttpRequest request, HttpResponse response)
throws IOException {

Instant beginTs = Instant.now();
String requestId = request.getFirstHeader(TRACE_CONTEXT_HEADER)
.or(() -> request.getFirstHeader(FUNCTION_EXECUTION_ID_HEADER))
.orElse("");

// Normalize request from GCP HTTP format
Map<String, Object> normalized = normalizeRequest(request);
Expand Down Expand Up @@ -51,7 +56,7 @@ public void service(HttpRequest request, HttpResponse response)
body.put("is_cold", ColdStartTracker.isCold());
body.put("container_id", containerId);
body.put("cold_start_var", coldStartVar);
body.put("request_id", request.getFirstHeader("Function-Execution-Id").orElse(""));
body.put("request_id", requestId);

// Write JSON response
response.setContentType("application/json");
Expand Down
3 changes: 2 additions & 1 deletion benchmarks/wrappers/gcp/nodejs/handler.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ if('NOSQL_STORAGE_DATABASE' in process.env) {
exports.handler = async function(req, res) {
var begin = Date.now()/1000;
var start = process.hrtime();
var requestId = req.headers["x-cloud-trace-context"] || req.headers["function-execution-id"];
var func = require('./function/function')
var ret = func.handler(req.body);
return ret.then(
Expand All @@ -32,7 +33,7 @@ exports.handler = async function(req, res) {
results_time: 0,
result: result,
is_cold: is_cold,
request_id: req.headers["function-execution-id"]
request_id: requestId
});
},
(error) => {
Expand Down
4 changes: 1 addition & 3 deletions benchmarks/wrappers/gcp/python/handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,9 @@
os.environ['NOSQL_STORAGE_DATABASE']
)


def handler(req):
income_timestamp = datetime.datetime.now().timestamp()
req_id = req.headers.get('Function-Execution-Id')

req_id = req.headers.get('X-Cloud-Trace-Context') or req.headers.get('Function-Execution-Id')

req_json = req.get_json()
req_json['request-id'] = req_id
Expand Down
9 changes: 9 additions & 0 deletions benchmarks/wrappers/gcp/python/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from distutils.core import setup
from glob import glob

setup(
name='function',
packages=['function'],
package_dir={'function': '.'},
package_data={'function': glob('**', recursive=True)},
)
29 changes: 28 additions & 1 deletion configs/cpp.json
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,34 @@
"gcp": {
"region": "europe-west1",
"project_name": "",
"credentials": ""
"credentials": "",
"configuration": {
"function-gen1": {
"min-instances": 0,
"max-instances": 20
},
"function-gen2": {
"vcpus": 1,
"gcp-concurrency": 80,
"worker-concurrency": 1,
"worker-threads": 8,
"min-instances": 0,
"max-instances": 20,
"cpu-boost": false,
"cpu-throttle": true
},
"container": {
"environment": "gen2",
"vcpus": 1,
"gcp-concurrency": 80,
"worker-concurrency": 1,
"worker-threads": 8,
"min-instances": 0,
"max-instances": 20,
"cpu-boost": false,
"cpu-throttle": true
}
}
},
"local": {
"storage": {
Expand Down
29 changes: 28 additions & 1 deletion configs/java.json
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,34 @@
"gcp": {
"region": "europe-west1",
"project_name": "",
"credentials": ""
"credentials": "",
"configuration": {
"function-gen1": {
"min-instances": 0,
"max-instances": 20
},
"function-gen2": {
"vcpus": 1,
"gcp-concurrency": 80,
"worker-concurrency": 1,
"worker-threads": 8,
"min-instances": 0,
"max-instances": 20,
"cpu-boost": false,
"cpu-throttle": true
},
"container": {
"environment": "gen2",
"vcpus": 1,
"gcp-concurrency": 80,
"worker-concurrency": 1,
"worker-threads": 8,
"min-instances": 0,
"max-instances": 20,
"cpu-boost": false,
"cpu-throttle": true
}
}
},
"local": {
"storage": {
Expand Down
29 changes: 28 additions & 1 deletion configs/nodejs.json
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,34 @@
"gcp": {
"region": "europe-west1",
"project_name": "",
"credentials": ""
"credentials": "",
"configuration": {
"function-gen1": {
"min-instances": 0,
"max-instances": 20
},
"function-gen2": {
"vcpus": 1,
"gcp-concurrency": 80,
"worker-concurrency": 1,
"worker-threads": 8,
"min-instances": 0,
"max-instances": 20,
"cpu-boost": false,
"cpu-throttle": true
},
"container": {
"environment": "gen2",
"vcpus": 1,
"gcp-concurrency": 80,
"worker-concurrency": 1,
"worker-threads": 8,
"min-instances": 0,
"max-instances": 20,
"cpu-boost": false,
"cpu-throttle": true
}
}
},
"local": {
"storage": {
Expand Down
29 changes: 28 additions & 1 deletion configs/python.json
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,34 @@
"gcp": {
"region": "europe-west1",
"project_name": "",
"credentials": ""
"credentials": "",
"configuration": {
"function-gen1": {
"min-instances": 0,
"max-instances": 20
},
"function-gen2": {
"vcpus": 1,
"gcp-concurrency": 80,
"worker-concurrency": 1,
"worker-threads": 8,
"min-instances": 0,
"max-instances": 20,
"cpu-boost": false,
"cpu-throttle": true
},
"container": {
"environment": "gen2",
"vcpus": 1,
"gcp-concurrency": 80,
"worker-concurrency": 1,
"worker-threads": 8,
"min-instances": 0,
"max-instances": 20,
"cpu-boost": false,
"cpu-throttle": true
}
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
},
"local": {
"storage": {
Expand Down
68 changes: 47 additions & 21 deletions configs/systems.json
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,12 @@
}
}
},
"architecture": ["x64"],
"deployments": ["package"]
"architecture": [
"x64"
],
"deployments": [
"package"
]
},
"aws": {
"languages": {
Expand Down Expand Up @@ -176,8 +180,14 @@
}
}
},
"architecture": ["x64", "arm64"],
"deployments": ["package", "container"]
"architecture": [
"x64",
"arm64"
],
"deployments": [
"package",
"container"
]
},
"azure": {
"languages": {
Expand Down Expand Up @@ -262,17 +272,21 @@
"username": "docker_user"
}
},
"architecture": ["x64"],
"deployments": ["package"]
"architecture": [
"x64"
],
"deployments": [
"package"
]
},
"gcp": {
"languages": {
"python": {
"base_images": {
"x64": {
"3.10": "ubuntu:22.04",
"3.11": "ubuntu:22.04",
"3.12": "ubuntu:22.04"
"3.10": "us-central1-docker.pkg.dev/serverless-runtimes/google-22/runtimes/python310@sha256:88ac475abc994f60c6d156e2fcce443396e581fc984e154b5f8608e3298a7d18",
"3.11": "us-central1-docker.pkg.dev/serverless-runtimes/google-22/runtimes/python311@sha256:3c346ccf7b0de6c3df6cda05378e96532de1cfb82aaf1e823dc1cc0ca674f61c",
"3.12": "us-central1-docker.pkg.dev/serverless-runtimes/google-22/runtimes/python312@sha256:5aa81b77d8361b4b82e3d59f08c834ffb354ccbb7ddf4eff8bb22ce26dee477f"
}
},
"images": [
Expand All @@ -283,24 +297,26 @@
"files": [
"handler.py",
"storage.py",
"nosql.py"
"nosql.py",
"setup.py"
],
"packages": [],
"module_packages": {
"storage": [
"google-cloud-storage"
"google-cloud-storage==3.10.1"
],
"nosql": [
"google-cloud-datastore"
"google-cloud-datastore==2.24.0"
]
}
}
},
"nodejs": {
"base_images": {
"x64": {
"18": "ubuntu:22.04",
"20": "ubuntu:22.04"
"20": "us-central1-docker.pkg.dev/serverless-runtimes/google-22/runtimes/nodejs20@sha256:504eb1f482bb62a9c3524bfebada43db93105d7fe6447dc7c96a9f4423e79908",
"22": "us-central1-docker.pkg.dev/serverless-runtimes/google-22/runtimes/nodejs22@sha256:56a74d24510c0f4d0da44e13226a150821a84440ddfbf89b52ea620ca729db07",
"24": "us-central1-docker.pkg.dev/serverless-runtimes/google-24/runtimes/nodejs24@sha256:8309735602e6228412ba362959f63eebcac9fe5e9a114eb1e63b7febef13030c"
}
},
"images": [
Expand All @@ -314,8 +330,8 @@
"nosql.js"
],
"packages": {
"@google-cloud/datastore": "^9.1.0",
"@google-cloud/storage": "^4.0.0",
"@google-cloud/datastore": "9.1.0",
"@google-cloud/storage": "4.0.0",
"uuid": "3.4.0"
}
}
Expand All @@ -324,7 +340,7 @@
"base_images": {
"x64": {
"11": "us-central1-docker.pkg.dev/serverless-runtimes/google-18-full/runtimes/java11:deprecated-public-image-java11_20260217_11_0_RC00",
"17": "us-central1-docker.pkg.dev/serverless-runtimes/google-22-full/runtimes/java17:java17_20260215_17_0_RC00"
"17": "us-central1-docker.pkg.dev/serverless-runtimes/google-22/runtimes/java17:java17_20260405_17_0_RC00"
}
},
"images": [
Expand All @@ -348,8 +364,14 @@
"username": "docker_user"
}
},
"architecture": ["x64"],
"deployments": ["package"]
"architecture": [
"x64",
"arm64"
],
"deployments": [
"package",
"container"
]
},
"openwhisk": {
"languages": {
Expand Down Expand Up @@ -430,7 +452,11 @@
}
}
},
"architecture": ["x64"],
"deployments": ["container"]
"architecture": [
"x64"
],
"deployments": [
"container"
]
}
}
Loading