feat: add storage and OCI lifecycle latency benchmark#1
Conversation
- Implemented environment capture functionality to gather system information. - Added types and validation for manifest files, including runtimes and experiments. - Created orchestrator to manage trial execution and results collection. - Introduced runtime adapter interface and a fake implementation for testing. - Developed plan generation from manifest data to facilitate trial execution. - Added a minimal C workload for benchmarking lifecycle latency. - Created a Jupyter notebook for investigating experiment results.
…update in analysis methodology.
- This includes a custom linux kernel image made copatible with fio - Added custom cli adaptor for runcs bench
- remove unnecessary debug logs - remove unused collector code
cmainas
left a comment
There was a problem hiding this comment.
Hello @jim-junior ,
thank you for the PR. We can easily merge this as a base, however we do not need to have release CI for the time being. Also, I have a few questions:
- How do we trigger the generation of the results based on the notebooks?
- Is the
main.pyapp used / related to notebooks?
and some more generic comments:
- Would it be possible to add in the README how to use the current version? Maybe this one will also clarify the notebooks question.
cmainas
left a comment
There was a problem hiding this comment.
Hello @jim-junior ,
thank you for the changes, just one more comment.
There was a problem hiding this comment.
I think this file still needs to get cleaned up.
There was a problem hiding this comment.
Hello @cmainas
Unfortunately if you want to run the notebooks locally, that file will be required, it is used by the package manager uv to resolve dependencies required in the project., However. I can delete it and update the readme.md to ensure that the notebooks are only run in Google colab(which is a cloud workspace that allows running of notebooks in the cloud)
The pyproject.toml in python serves the same purpose that as go.mod in go projects.
Should I still head on to delete it and opt for colab?
There was a problem hiding this comment.
I see, then we should keep it. Actually, we should not rely to external services, so we should definitely keep it. My bad.
|
I have also added the table for what evaluations the PR supports above in the description and you had requested in urunc-dev/urunc#759 (reply in thread) |
Great, there is one more request. All commits must be signed-off. Feel free to clean up a bit the commits (squashing some of them) too. |
This is the initial PR for submiting deliverables for Phase 2 — Midterm milestone of urunc-dev/urunc#759 thats adds the following:
Current Evaluation Suite Support
The table below summarizes the benchmark areas, metrics, and supporting tools currently implemented in this phase of the evaluation suite.
containerdeventsfioHarness Skeleton
The harness skeleton is a Go cli program. It works by taking in a
experiment.ymlmanifest file, it validates it against the schema, generates an execution plan and then executes the benchmarks based. It also accompanies multiple helper commands ad demonstrated below.The experiment manifest is defined as follows in the example below(note that memory and CPU are not included)
OCI Lifecycle latency benchmark
For OCI lifecycle latency, the approach used for measuring is as follows. We listen to containerd runtime tasks for the rutimes
runc,kataandurunc. For gVisor(runsc) we are running therunsccli command with a bundle and other required arguments then measuring the execution time it takes, This is becauserunscdoes not abide by the Runtime v2 spec.Aditionaly for
urunc, when measuring thestartOCI command, we ignore the/tasks/startevent because as mentioned in the previous weekly sync it publishes this task earlier than when the container starts. To solve this, we created a minimal C program that starts and exits immediately with0code. Its code is inworkloads/minimal-c/main.cStorage Benchmark
As for storage, we built custom images with
fioincluded in them.For runtimes
kata,runcandrunsc, we are using the image docker.io/jimjuniorb/fio:0.1As for
uruncwe are using the docker.io/jimjuniorb/fio-urunc:0.4 image.For
urunc, the kernel included in the image harbor.nbfc.io/nubificus/urunc/linux-kernel-qemu:v6.14 was misssing certain system calls that fio depends on, this required me to build a custom kernel that would be used in this benchmark. To do this i adjusted the kernel config @cmainas used at https://gist.github.com/cmainas/223e1525496dd2c8e08dbf8bab41df80 and added support forshmgetsyscall by enabling theCONFIG_SYSVIPCand its dependencies. The final kernel build config file can be found inworkloads/fio-kernel/.configAnalysis Notebooks
For result analysis, i opted to use Jupyter notebooks. I find them simpler and more powerful to use for analysis. Currently there are only two notebooks,
fio_runtime_analysis.ipynb(for storage) andoci_lifecycle_latency_analysis.ipynblocated in thenotebooksdirectory.For now the benchmark results(which are stored in a
run.jsonfile) should be copied and put in the same directory as the notebooks when doing analysis.These notebooks generate reports and easy to read graphs.
Sample results
LLM usage
Used LLMs mainly to assist on the process/pipeline of how to build a custom linux kernel
Checklist