feat(buildkit-bench): three daemons that differ only in storage class #432
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/buildkit-bench-daemons"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
buildkit-32k,buildkit-128k,buildkit-1min namespacebuildkit-bench, onzfs-nvme-32k/-128k/-1m. Same image digest, buildkitd.toml, resources, 30Gi cache, TLS chain and scheduling — generated from one template so they cannot drift, andtests/buildkit-bench.shnormalises each daemon-s document set and diffs the three. Anything differing beyond the name and the class fails.That guard is the point: a daemon that quietly picked up a different parallelism or cache size would still build, still produce a number, and the number would be attributable to nothing.
What it can and cannot answer
Recorded in the manifest header rather than discovered later. These three classes are not a clean recordsize experiment — their parent datasets differ in more than recordsize:
zfs-nvme-32ktank/databaseszfs-nvme-128ktank/ephemeralzfs-nvme-1mtank/bulkSo a difference is attributable to the class, not the block size alone — 32k in particular also pays for synchronous writes. That is the right question to ask first, because the class is what a cache would actually be placed on. If the answer turns out to hinge on recordsize rather than durability policy, then a matched-property family earns its place — the opposite order from the
zfs-buildkit-*classes this repo just removed for duplicating what already existed.Isolation
They carry the production daemon-s cluster-wide one-per-node anti-affinity, so a benchmark never lands on a host already running builds. They use their own CA: BuildKit authorises by CA, not CN, so sharing the production ClusterIssuer would let a benchmark client certificate open the production daemon.
Fenced by a separate CiliumClusterwideNetworkPolicy rather than by widening
buildkitd-restrict, whose selector is an AND of twoInsets — adding this namespace and these three names there widens it by the whole cross product. This namespace holds nothing but benchmark daemons, so selecting the namespace alone is exact.miniois denied here though the production daemon needs it: a benchmark builds one Containerfile and pushes nothing.Method deliberately not encoded. Run them one at a time with the cache pruned between runs; three daemons building at once contend for ARC and the same NVMe.
Guard verified against seven mutations, each detected.
https://claude.ai/code/session_01KZoQin34jeyt6nDGqvJA76