docs: publish a recorded demo and measured numbers on the site - #5
Merged
Merged
Conversation
The README showed one docker line and the site showed none. It now opens with an asciinema recording of docker driving mars: a memory limit read back out of the cgroup mars wrote, PID 1 in its own namespace compared against the host's, and the capability set the container is left holding. Every line reads kernel state rather than trusting the runtime. A numbers section carries binary size, dependency count, start latency and the capability count, from scripts/bench.sh through metrics.json, rendered as a dash when absent. The attack profile is deliberately not in that harness. It needs root and ftrace and a long serial run, scripts/hap-bench.sh owns it, and the table it produces already carries its own method. The numbers section says so, and says plainly that start latency is the least interesting figure on the page because docker and image setup dominate it. Traps: bench.sh honours CARGO_TARGET_DIR. The development VM points it at /var/tmp/mars-target because building on the virtiofs mount is slow, so target/release/mars is not where the binary lands. The demo needs docker on native.cgroupdriver=cgroupfs. On the systemd driver docker delegates cgroup creation over dbus while mars writes cgroupfs directly, and the two disagree about who owns the container's cgroup.
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.
The README showed one
dockerline and the site showed none. This adds arecording of docker driving
mars, and a numbers section the page reads fromJSON at load time instead of carrying by hand.
The recording
site/demo.shproducessite/demo.cast, rendered tosite/demo.gifwithagg.Every line reads kernel state back rather than trusting what the runtime says it
did:
marswroteThe
.castis plain text, so it can be re-rendered at a different size or themewithout re-recording.
The numbers
scripts/bench.shwritessite/metrics.json;site/metrics.jsrenders it, andshows a dash for anything absent. Nothing on the page is a number somebody
remembered.
The attack profile is deliberately not in that harness. It needs root and
ftrace and a long serial run,
scripts/hap-bench.shalready owns it, and thetable it produces carries its own method. The numbers section says so, and says
plainly that start latency is the least interesting figure on the page because
docker and image setup dominate it — which is the whole reason this project
measures horizontal attack profile instead.
Traps worth knowing
bench.shhonoursCARGO_TARGET_DIR. The development VM points it at/var/tmp/mars-targetbecause building on the virtiofs mount is slow, sotarget/release/marsis not where the binary lands.The demo needs docker on
native.cgroupdriver=cgroupfs. On the systemd driverdocker delegates cgroup creation over dbus while
marswrites cgroupfsdirectly, and the two disagree about who owns the container's cgroup.
scripts/install-docker-runtime.shalready sets this and explains why.Regenerating