feat: add storage and OCI lifecycle latency benchmark#1
Open
jim-junior wants to merge 7 commits into
Open
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This is the initial PR for submiting deliverables for Phase 2 — Midterm milestone of urunc-dev/urunc#759 thats adds the following:
Described in detail below
Harness 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