Skip to content

Add hyperlight-unikraft (hluk) runtimes - #30

Open
danbugs wants to merge 4 commits into
mainfrom
hluk-runtimes
Open

danbugs wants to merge 4 commits into
mainfrom
hluk-runtimes

Conversation

@danbugs

@danbugs danbugs commented Sep 26, 2026 •

Copy link
Copy Markdown

Adds seven hyperlight-unikraft (hluk) runtimes to the benchmark — hluk-dummy, -quickjs, -node, -python, -dotnet-jit, -wasmtime-dummy and -wasmtime-qjs — on KVM and MSHV, pinned to hyperlight-unikraft 0.16.0 and its published rootfs images. Each serves the handler as a guest function call in a Unikraft guest; Renew, Restore and Reuse work from one base snapshot per server process.

  • server: hluk handler and hluk/hluk-mshv features, a dummy driver, a response check that tolerates JSON spacing; a KVM-only build keeps hyperlight's lazy scratch reset.
  • scripts: build-harness fetches the rootfs images (pinned by manifest digest) and builds the dummy driver as a musl static-pie and the two server flavors; CI, the just recipes and local runs take the new runtimes.
  • ci: each platform's prepare job builds the servers once and measurement jobs download them, instead of fifty jobs compiling their own.
  • site: a Hyperlight Unikraft group; 75 configurations instead of 54.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

The unresolved driver path, image pinning, and version consistency findings block approval.

Review effort: Lite
Findings: 1 High severity · 1 Medium severity

Open (2)
What changed in this PR

Adds seven Hyperlight Unikraft runtimes across KVM/MSHV, including guest images, lifecycle handling, CI integration, and dashboard support.

Changes:

  • Adds HLUK handlers, features, lifecycle strategies, and a dummy driver.
  • Fetches rootfs images and builds KVM/MSHV server variants.
  • Expands benchmark configuration, CI, local execution, and tests.
  • Updates catalog metadata, documentation, and dashboard presentation.

Outstanding findings in scripts/build-harness.ts:

  • Critical (2 votes): The dummy driver is installed under /usr/local/bin, but the loader requires /usr/bin/hl_dummydriver.
  • Moderate (2 votes): Mutable manifest tags do not provide reproducible image pinning.
  • Moderate (1 vote): HLUK_VERSION can diverge from the pinned host crate and driver version.
File Description
tool-versions.sh Pins the HLUK release.
src/​style.css Adds hexagonal runtime markers.
src/​mock-data.ts Extends synthetic measurements.
src/​main.ts Adds HLUK dashboard grouping and colors.
shared/​catalog.ts Registers HLUK runtimes and platform flavors.
scripts/​publication.test.ts Updates configuration counts.
scripts/​configure-ci.ts Selects platform-specific server flavors.
scripts/​build-harness.ts Fetches images, builds servers, and packages drivers.
scripts/​benchmark.ts Uses the selected server flavor.
scripts/​benchmark-local.ts Supports HLUK runtime selection.
README.md Documents HLUK benchmarks.
docs/​README.md Updates runtime and CI documentation.
crates/​server/​src/​main.rs Adds HLUK dispatch and response validation.
crates/​server/​src/​handlers/​mod.rs Registers conditional handlers.
crates/​server/​src/​handlers/​hluk.rs Implements HLUK lifecycle handling.
crates/​server/​src/​handlers/​config.rs Defines HLUK artifact paths.
crates/​server/​Cargo.toml Adds HLUK features and dependencies.
crates/​observer/​Cargo.toml Adjusts hypervisor features.
crates/​hluk-dummy/​hl_fc.h Adds FlatBuffer call parsing.
crates/​hluk-dummy/​hl_dummydriver.c Implements the dummy guest driver.
crates/​hluk-dummy/​hl_driver.h Adds shared driver support.
Cargo.lock Locks HLUK dependencies.
.github/​workflows/​benchmark.yml Publishes HLUK rootfs artifacts.
Files not reviewed (1)
  • src/style.css: Generated file

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread scripts/build-harness.ts
Comment thread scripts/build-harness.ts Outdated

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🔵 Needs a closer look

The documented just run-server path does not select HLUK server artifacts, and the change requires human review.

Review effort: Lite
Findings: None

Resolved since last review (2)
Files not reviewed (1)
  • src/style.css: Generated file

hluk-dummy, hluk-quickjs, hluk-node, hluk-python, hluk-dotnet-jit,
hluk-wasmtime-dummy and hluk-wasmtime-qjs serve the handler as a guest
function call in a Unikraft guest, pinned to hyperlight-unikraft 0.16.0.
One base snapshot per process: Renew starts a sandbox from it, Restore
defines the handler, calls it and restores, Reuse defines it once.  The
hluk and hluk-mshv features build the KVM and MSHV servers; the observer
drops mshv3 so a KVM-only build keeps hyperlight's lazy scratch reset.
The response check falls back to parsing JSON, since runtimes space it
differently.

Signed-off-by: danbugs <danilochiarlone@gmail.com>
build-harness fetches the hluk rootfs images, pinned by manifest digest
in tool-versions.sh next to HLUK_VERSION (which must match the server's
crate), builds the dummy driver's as a musl static-pie, as
hyperlight-unikraft builds its own drivers, and builds the hluk-kvm and
hluk-mshv servers.  The catalog, CI, the just recipes and local runs
take the new runtimes, as does the mock data; benchmark-local takes a
comma-separated list.

Signed-off-by: danbugs <danilochiarlone@gmail.com>
The prepare job builds each platform's servers and uploads them with
build-info.json and oha; measurement jobs download them instead of
setting up Rust and compiling their own flavor.  Fifty release builds on
the self-hosted runners were the slowest and heaviest part of a
measurement job, and runners were dropping mid-build.

Signed-off-by: danbugs <danilochiarlone@gmail.com>
A Hyperlight Unikraft group with its own marker; the default selection
keeps distinct colours.

Signed-off-by: danbugs <danilochiarlone@gmail.com>

This branch was successfully deployed

1 active deployment
github-pages — de13f2da Deployed Sep 28, 2026 by danbugs via deploy #366
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants