-
Notifications
You must be signed in to change notification settings - Fork 67
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
Benchmark synthesis #24
Comments
We made progress on this issue on branch |
I will research on this and update here shortly |
i am working on it. |
@mcopik Can i get some guidance to this issue? |
@octonawish-akcodes Hi! The overall idea is to synthetically create Python/JS functions that perform CPU computations, memory accesses, and I/O accesses. Given a simple configuration, it should generate a function that performs selected actions with a specified frequency and intensity, e.g., calling some well-established CPU benchmark (like matrix-matrix multiplication), using our interface to make storage calls, etc. The next step will be to make these functions more varied, e.g., with different loop complexity. |
Can you also provide me with some resources and target files for the start? |
@octonawish-akcodes I'd look in what can be reused from the prior PR: https://github.com/spcl/serverless-benchmarks/pull/59/files I wouldn't try to merge new updates into it as it's quite difficult. Instead, I'd cherry-pick some of the files you find useful. |
Hello @mcopik, Thank you for outlining the specific benchmarks you're interested in: computation in FLOPS/instructions, memory allocation, storage read/write, and disk read/write. I've reviewed our current benchmark suite, and here is what I found:
Could you please provide more details on the specific improvements or additional metrics you're looking to incorporate? Currently I have a few ideas but I would be appreciate if you have any additional sources I can look into |
@MinhThieu145 I think the best way forward would be to add a generator that accepts a simple config - CPU ops, memory ops, storage ops - and synthesizes a single Python function out of the components you just described. Do you think it's feasible? I'd like to hear about other ideas you might have here :) |
@octonawish-akcodes Yes, please feel free to reuse the code snippets. @octonawish-akcodes @MinhThieu145 Since you are both interested in the issue, it might be beneficial to coordinate. |
Hi @mcopik , I'm leaning towards writing functions that are similar to the current, pre-written one, rather than creating a dynamic generator. From my POV,
With the pre-written functions, here are sth that can be dynamic that I think would be helpful
This way, it can make the pre-written more dynamic. Looking forward to your feedback and any further ideas. |
I totally agree with the idea of using the functions we already have. Right now, I'm trying out some different kinds of functions for the new serverless-benchmark issue mentioned here: SEBS New Serverless Benchmarks. But really, the main idea is the same as before. I'm all for making the most of what we've got and seeing how we can adapt those functions to fit our new needs. Let's keep in touch about how the testing goes! |
@MinhThieu145 Yes, we should reuse those functions. What I meant by the generator is that we should glue together the functions that already exist in the PR, and synthesize functions that combine different behaviors, e.g., a function that does compute, then some I/O accesses, etc. It should be reproducible - if user specifies the same config, they should receive exactly the same function and observe the same behavior :) |
Thank you for your input, @mcopik. I've been exploring how functions work together and found a really helpful paper, ServerlessBench: ServerlessBench Paper This paper dives deep into how serverless functions interact, which is just what we need for our project. Based on this and our existing setup, here's what I'm thinking: Improving Our BenchmarksWe have four experiments in our toolkit right now: Current Experiments
These areas could really enhance how we measure and understand our benchmarks. Bringing in Function FlowsServerlessBench outlines two ways to orchestrate functions:
Ideas for Our Benchmarks
Thinking About AWS Tools
I'm actively developing these concepts and would greatly value your insights, particularly regarding the use of Step Functions and ECR. If you have any additional resources or suggestions, please feel free to share. I’m eager to hear your perspective and incorporate your feedback into our ongoing work |
@MinhThieu145 Thanks - yes, I know the paper, and it complements our Middleware paper in some aspects. We already have communication performance benchmarks (unmerged branch using FMI benchmarks), and the invocation-overhead benchmark covers startup latency. Regarding the stateless execution and resource efficiency, I'm happy to hear proposals in this aspect. Workflows - we have a branch with results from a paper in submission, and I hope we will be able to merge it soon :) It supports Step Functions, Durable Functions, and Google Cloud Workflows. I don't think we have a workflow covering typical website use cases, but adding something like this could be a good idea; there are also similar ideas for website-based workflows in #140. ECR and containers - this is a feature we definitely need, but we should also support it on other platforms where possible (Azure also supports this). |
@mcopik So to have a small recap we need the following type of computation:
Since most of these are already implemented we could add support for the config which lets you select how many loops you want for the MMM for example or more fine grained control. Any suggestions? As for your suggestion to have a single config file, when you say CPU ops you mean the number of FLOP we make, memory ops the amount of data we store and use on RAM and storage ops the number of bytes we read and write from disk? |
@entiolliko @octonawish-akcodes @MinhThieu145 Linear algebra as a replacement for CPU is a good idea; we can use LAPACK for that. It can be quite flexible. I'd put GPU as the next feature, which is a different category. Yes, this is what I mean by it. I think the ideal result would be to have a single serverless function that does specified configuration for computations (which can, of course, be composed of many local functions). |
We need the following:
The text was updated successfully, but these errors were encountered: