From 9904f4297a4f129e5274b93c7a8e98ea0aba2a33 Mon Sep 17 00:00:00 2001 From: Daniel Vigovszky Date: Wed, 26 Jun 2024 14:43:36 +0200 Subject: [PATCH] Large memory usage test cases and benchmarks (#619) * Large memory usage test cases and benchmarks * Ignore --- .../tests/guest_languages.rs | 48 +++++++ integration-tests/Cargo.toml | 8 ++ .../src/benchmarks/large_dynamic_memory.rs | 128 ++++++++++++++++++ .../src/benchmarks/large_initial_memory.rs | 128 ++++++++++++++++++ test-components/build-components.sh | 2 +- test-components/c-1.wasm | Bin 60981 -> 60985 bytes test-components/large-dynamic-memory.wasm | Bin 0 -> 76446 bytes test-components/large-dynamic-memory/c_api1.c | 32 +++++ test-components/large-dynamic-memory/c_api1.h | 17 +++ .../c_api1_component_type.o | Bin 0 -> 268 bytes test-components/large-dynamic-memory/main.c | 26 ++++ .../large-dynamic-memory/wit/main.wit | 5 + test-components/large-initial-memory.wasm | Bin 0 -> 76283 bytes test-components/large-initial-memory/c_api1.c | 32 +++++ test-components/large-initial-memory/c_api1.h | 17 +++ .../c_api1_component_type.o | Bin 0 -> 268 bytes test-components/large-initial-memory/main.c | 24 ++++ .../large-initial-memory/wit/main.wit | 5 + 18 files changed, 471 insertions(+), 1 deletion(-) create mode 100644 integration-tests/src/benchmarks/large_dynamic_memory.rs create mode 100644 integration-tests/src/benchmarks/large_initial_memory.rs create mode 100644 test-components/large-dynamic-memory.wasm create mode 100644 test-components/large-dynamic-memory/c_api1.c create mode 100644 test-components/large-dynamic-memory/c_api1.h create mode 100644 test-components/large-dynamic-memory/c_api1_component_type.o create mode 100644 test-components/large-dynamic-memory/main.c create mode 100644 test-components/large-dynamic-memory/wit/main.wit create mode 100644 test-components/large-initial-memory.wasm create mode 100644 test-components/large-initial-memory/c_api1.c create mode 100644 test-components/large-initial-memory/c_api1.h create mode 100644 test-components/large-initial-memory/c_api1_component_type.o create mode 100644 test-components/large-initial-memory/main.c create mode 100644 test-components/large-initial-memory/wit/main.wit diff --git a/golem-worker-executor-base/tests/guest_languages.rs b/golem-worker-executor-base/tests/guest_languages.rs index 10e66a12a8..d6da1a1b04 100644 --- a/golem-worker-executor-base/tests/guest_languages.rs +++ b/golem-worker-executor-base/tests/guest_languages.rs @@ -539,3 +539,51 @@ async fn c_example_2() { check!(first_line == format!("Hello C! {year}")); } + +#[tokio::test] +#[tracing::instrument] +#[ignore] +async fn c_example_3() { + let context = TestContext::new(); + let executor = start(&context).await.unwrap(); + + let component_id = executor.store_component("large-initial-memory").await; + let worker_id = executor + .start_worker(&component_id, "large-initial-memory") + .await; + + executor.log_output(&worker_id).await; + + let result = executor + .invoke_and_await(&worker_id, "run", vec![]) + .await + .unwrap(); + + drop(executor); + + check!(result == vec![Value::U64(536870912)]); +} + +#[tokio::test] +#[tracing::instrument] +#[ignore] +async fn c_example_4() { + let context = TestContext::new(); + let executor = start(&context).await.unwrap(); + + let component_id = executor.store_component("large-dynamic-memory").await; + let worker_id = executor + .start_worker(&component_id, "large-dynamic-memory") + .await; + + executor.log_output(&worker_id).await; + + let result = executor + .invoke_and_await(&worker_id, "run", vec![]) + .await + .unwrap(); + + drop(executor); + + check!(result == vec![Value::U64(0)]); +} diff --git a/integration-tests/Cargo.toml b/integration-tests/Cargo.toml index e9f46d097a..a25799caa9 100644 --- a/integration-tests/Cargo.toml +++ b/integration-tests/Cargo.toml @@ -83,6 +83,14 @@ path = "src/benchmarks/throughput.rs" name = "benchmark_rpc" path = "src/benchmarks/rpc.rs" +[[bin]] +name = "benchmark_large_initial_memory" +path = "src/benchmarks/large_initial_memory.rs" + +[[bin]] +name = "benchmark_large_dynamic_memory" +path = "src/benchmarks/large_dynamic_memory.rs" + [[bin]] name = "benchmark_report" path = "src/benchmarks/report/benchmark_report.rs" diff --git a/integration-tests/src/benchmarks/large_dynamic_memory.rs b/integration-tests/src/benchmarks/large_dynamic_memory.rs new file mode 100644 index 0000000000..bb14d1e9b3 --- /dev/null +++ b/integration-tests/src/benchmarks/large_dynamic_memory.rs @@ -0,0 +1,128 @@ +// Copyright 2024 Golem Cloud +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use std::time::SystemTime; + +use async_trait::async_trait; + +use golem_test_framework::config::{CliParams, TestDependencies}; +use golem_test_framework::dsl::benchmark::{Benchmark, BenchmarkRecorder, RunConfig}; +use golem_test_framework::dsl::TestDsl; +use integration_tests::benchmarks::{ + cleanup_iteration, run_benchmark, setup_benchmark, setup_iteration, BenchmarkContext, + IterationContext, +}; + +struct LargeDynamicMemory { + config: RunConfig, +} + +#[async_trait] +impl Benchmark for LargeDynamicMemory { + type BenchmarkContext = BenchmarkContext; + type IterationContext = IterationContext; + + fn name() -> &'static str { + "large-dynamic-memory" + } + + async fn create_benchmark_context( + params: CliParams, + cluster_size: usize, + ) -> Self::BenchmarkContext { + setup_benchmark(params, cluster_size).await + } + + async fn cleanup(benchmark_context: Self::BenchmarkContext) { + benchmark_context.deps.kill_all() + } + + async fn create(_params: CliParams, config: RunConfig) -> Self { + Self { config } + } + + async fn setup_iteration( + &self, + benchmark_context: &Self::BenchmarkContext, + ) -> Self::IterationContext { + setup_iteration( + benchmark_context, + self.config.clone(), + "large-initial-memory", + false, + ) + .await + } + + async fn warmup( + &self, + benchmark_context: &Self::BenchmarkContext, + context: &Self::IterationContext, + ) { + if let Some(worker_id) = context.worker_ids.first() { + let start = SystemTime::now(); + benchmark_context + .deps + .invoke_and_await(worker_id, "run", vec![]) + .await + .expect("invoke_and_await failed"); + let elapsed = start.elapsed().expect("SystemTime elapsed failed"); + println!("Warmup invocation took {:?}", elapsed); + } + } + + async fn run( + &self, + benchmark_context: &Self::BenchmarkContext, + context: &Self::IterationContext, + recorder: BenchmarkRecorder, + ) { + // Start each worker and invoke `run` - each worker takes an initial 512Mb memory + let mut fibers = Vec::new(); + for (n, worker_id) in context.worker_ids.iter().enumerate() { + let context_clone = benchmark_context.clone(); + let worker_id_clone = worker_id.clone(); + let recorder_clone = recorder.clone(); + let fiber = tokio::task::spawn(async move { + let start = SystemTime::now(); + context_clone + .deps + .invoke_and_await(&worker_id_clone, "run", vec![]) + .await + .expect("invoke_and_await failed"); + let elapsed = start.elapsed().expect("SystemTime elapsed failed"); + recorder_clone.duration(&"invocation".to_string(), elapsed); + recorder_clone.duration(&format!("worker-{n}"), elapsed); + }); + fibers.push(fiber); + } + + for fiber in fibers { + fiber.await.expect("fiber failed"); + } + } + + async fn cleanup_iteration( + &self, + benchmark_context: &Self::BenchmarkContext, + context: Self::IterationContext, + ) { + cleanup_iteration(benchmark_context, context).await + } +} + +#[tokio::main] +async fn main() { + run_benchmark::().await; +} diff --git a/integration-tests/src/benchmarks/large_initial_memory.rs b/integration-tests/src/benchmarks/large_initial_memory.rs new file mode 100644 index 0000000000..6ca1b68444 --- /dev/null +++ b/integration-tests/src/benchmarks/large_initial_memory.rs @@ -0,0 +1,128 @@ +// Copyright 2024 Golem Cloud +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use std::time::SystemTime; + +use async_trait::async_trait; + +use golem_test_framework::config::{CliParams, TestDependencies}; +use golem_test_framework::dsl::benchmark::{Benchmark, BenchmarkRecorder, RunConfig}; +use golem_test_framework::dsl::TestDsl; +use integration_tests::benchmarks::{ + cleanup_iteration, run_benchmark, setup_benchmark, setup_iteration, BenchmarkContext, + IterationContext, +}; + +struct LargeInitialMemory { + config: RunConfig, +} + +#[async_trait] +impl Benchmark for LargeInitialMemory { + type BenchmarkContext = BenchmarkContext; + type IterationContext = IterationContext; + + fn name() -> &'static str { + "large-initial-memory" + } + + async fn create_benchmark_context( + params: CliParams, + cluster_size: usize, + ) -> Self::BenchmarkContext { + setup_benchmark(params, cluster_size).await + } + + async fn cleanup(benchmark_context: Self::BenchmarkContext) { + benchmark_context.deps.kill_all() + } + + async fn create(_params: CliParams, config: RunConfig) -> Self { + Self { config } + } + + async fn setup_iteration( + &self, + benchmark_context: &Self::BenchmarkContext, + ) -> Self::IterationContext { + setup_iteration( + benchmark_context, + self.config.clone(), + "large-initial-memory", + false, + ) + .await + } + + async fn warmup( + &self, + benchmark_context: &Self::BenchmarkContext, + context: &Self::IterationContext, + ) { + if let Some(worker_id) = context.worker_ids.first() { + let start = SystemTime::now(); + benchmark_context + .deps + .invoke_and_await(worker_id, "run", vec![]) + .await + .expect("invoke_and_await failed"); + let elapsed = start.elapsed().expect("SystemTime elapsed failed"); + println!("Warmup invocation took {:?}", elapsed); + } + } + + async fn run( + &self, + benchmark_context: &Self::BenchmarkContext, + context: &Self::IterationContext, + recorder: BenchmarkRecorder, + ) { + // Start each worker and invoke `run` - each worker takes an initial 512Mb memory + let mut fibers = Vec::new(); + for (n, worker_id) in context.worker_ids.iter().enumerate() { + let context_clone = benchmark_context.clone(); + let worker_id_clone = worker_id.clone(); + let recorder_clone = recorder.clone(); + let fiber = tokio::task::spawn(async move { + let start = SystemTime::now(); + context_clone + .deps + .invoke_and_await(&worker_id_clone, "run", vec![]) + .await + .expect("invoke_and_await failed"); + let elapsed = start.elapsed().expect("SystemTime elapsed failed"); + recorder_clone.duration(&"invocation".to_string(), elapsed); + recorder_clone.duration(&format!("worker-{n}"), elapsed); + }); + fibers.push(fiber); + } + + for fiber in fibers { + fiber.await.expect("fiber failed"); + } + } + + async fn cleanup_iteration( + &self, + benchmark_context: &Self::BenchmarkContext, + context: Self::IterationContext, + ) { + cleanup_iteration(benchmark_context, context).await + } +} + +#[tokio::main] +async fn main() { + run_benchmark::().await; +} diff --git a/test-components/build-components.sh b/test-components/build-components.sh index e78330c14d..cf61d044a8 100755 --- a/test-components/build-components.sh +++ b/test-components/build-components.sh @@ -10,7 +10,7 @@ js_test_components=("js-1" "js-2" "js-3" "js-4" "js-echo") java_test_components=("java-1" "java-2") dotnet_test_components=("csharp-1") swift_test_components=("swift-1") -c_test_components=("c-1") +c_test_components=("c-1" "large-initial-memory" "large-dynamic-memory") python_test_components=("python-1" "py-echo") # Optional arguments: diff --git a/test-components/c-1.wasm b/test-components/c-1.wasm index eb6cd63bdc8b4fe16a658ede22056f8f7866cfb7..d605c6ab684381088531f9e5040cf375d156ab21 100644 GIT binary patch delta 135 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

e&$ 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 KE@{(Kp#KGCv2FGM literal 0 HcmV?d00001 diff --git a/test-components/large-dynamic-memory/c_api1.c b/test-components/large-dynamic-memory/c_api1.c new file mode 100644 index 0000000000..4c7d54fd93 --- /dev/null +++ b/test-components/large-dynamic-memory/c_api1.c @@ -0,0 +1,32 @@ +// Generated by `wit-bindgen` 0.26.0. DO NOT EDIT! +#include "c_api1.h" +#include + +// Exported Functions from `c-api1` + + +// Canonical ABI intrinsics + +__attribute__((__weak__, __export_name__("cabi_realloc"))) +void *cabi_realloc(void *ptr, size_t old_size, size_t align, size_t new_size) { + (void) old_size; + if (new_size == 0) return (void*) align; + void *ret = realloc(ptr, new_size); + if (!ret) abort(); + return ret; +} + +// Component Adapters + +__attribute__((__export_name__("run"))) +int64_t __wasm_export_c_api1_run(void) { + uint64_t ret = c_api1_run(); + return (int64_t) (ret); +} + +// Ensure that the *_component_type.o object is linked in + +extern void __component_type_object_force_link_c_api1(void); +void __component_type_object_force_link_c_api1_public_use_in_this_compilation_unit(void) { + __component_type_object_force_link_c_api1(); +} diff --git a/test-components/large-dynamic-memory/c_api1.h b/test-components/large-dynamic-memory/c_api1.h new file mode 100644 index 0000000000..b8bf7d17aa --- /dev/null +++ b/test-components/large-dynamic-memory/c_api1.h @@ -0,0 +1,17 @@ +// Generated by `wit-bindgen` 0.26.0. DO NOT EDIT! +#ifndef __BINDINGS_C_API1_H +#define __BINDINGS_C_API1_H +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +// Exported Functions from `c-api1` +uint64_t c_api1_run(void); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/test-components/large-dynamic-memory/c_api1_component_type.o b/test-components/large-dynamic-memory/c_api1_component_type.o new file mode 100644 index 0000000000000000000000000000000000000000..00a03546d2e5e74732e5c385b1b476b19e772cff GIT binary patch literal 268 zcmY*UK~BRk5S(?a252izAn^jk!6D^<)Sf`%A8xZ*B12;|_&5-gD +#include +#include +#include +#include + +#include "c_api1.h" + +int32_t main(void) { + return 0; +} + +#define PAGE_SIZE 1024*1024 +#define COUNT 512 + +uint64_t c_api1_run(void) { + for (int i = 0; i < COUNT; i++) { + char* DATA = malloc(PAGE_SIZE); + printf("page %d first: %d\n", i, DATA[0]); + printf("page %d last: %d\n", i, DATA[PAGE_SIZE-1]); + + usleep(5); + } + + return 0; +} diff --git a/test-components/large-dynamic-memory/wit/main.wit b/test-components/large-dynamic-memory/wit/main.wit new file mode 100644 index 0000000000..d34cb95849 --- /dev/null +++ b/test-components/large-dynamic-memory/wit/main.wit @@ -0,0 +1,5 @@ +package golem:it; + +world c-api1 { + export run: func() -> u64; +} diff --git a/test-components/large-initial-memory.wasm b/test-components/large-initial-memory.wasm new file mode 100644 index 0000000000000000000000000000000000000000..f08a3f3af2772a1cd75b5326f6db00aa146f222e GIT binary patch literal 76283 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 + +// Exported Functions from `c-api1` + + +// Canonical ABI intrinsics + +__attribute__((__weak__, __export_name__("cabi_realloc"))) +void *cabi_realloc(void *ptr, size_t old_size, size_t align, size_t new_size) { + (void) old_size; + if (new_size == 0) return (void*) align; + void *ret = realloc(ptr, new_size); + if (!ret) abort(); + return ret; +} + +// Component Adapters + +__attribute__((__export_name__("run"))) +int64_t __wasm_export_c_api1_run(void) { + uint64_t ret = c_api1_run(); + return (int64_t) (ret); +} + +// Ensure that the *_component_type.o object is linked in + +extern void __component_type_object_force_link_c_api1(void); +void __component_type_object_force_link_c_api1_public_use_in_this_compilation_unit(void) { + __component_type_object_force_link_c_api1(); +} diff --git a/test-components/large-initial-memory/c_api1.h b/test-components/large-initial-memory/c_api1.h new file mode 100644 index 0000000000..b8bf7d17aa --- /dev/null +++ b/test-components/large-initial-memory/c_api1.h @@ -0,0 +1,17 @@ +// Generated by `wit-bindgen` 0.26.0. DO NOT EDIT! +#ifndef __BINDINGS_C_API1_H +#define __BINDINGS_C_API1_H +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +// Exported Functions from `c-api1` +uint64_t c_api1_run(void); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/test-components/large-initial-memory/c_api1_component_type.o b/test-components/large-initial-memory/c_api1_component_type.o new file mode 100644 index 0000000000000000000000000000000000000000..00a03546d2e5e74732e5c385b1b476b19e772cff GIT binary patch literal 268 zcmY*UK~BRk5S(?a252izAn^jk!6D^<)Sf`%A8xZ*B12;|_&5-gD +#include +#include +#include +#include + +#include "c_api1.h" + +int32_t main(void) { + return 0; +} + +#define DATA_SIZE 536870912 +static char DATA[DATA_SIZE] = {}; + +uint64_t c_api1_run(void) { + printf("DATA: %lu\n", sizeof(DATA)); + printf("first: %d\n", DATA[0]); + printf("last: %d\n", DATA[DATA_SIZE-1]); + + sleep(2); + + return sizeof(DATA); +} diff --git a/test-components/large-initial-memory/wit/main.wit b/test-components/large-initial-memory/wit/main.wit new file mode 100644 index 0000000000..d34cb95849 --- /dev/null +++ b/test-components/large-initial-memory/wit/main.wit @@ -0,0 +1,5 @@ +package golem:it; + +world c-api1 { + export run: func() -> u64; +}