Replies: 1 comment
|
scaling up does not change kache's job, it just shows which part to tune. kache is really two systems, and keeping them separate is what lets it scale while staying correct.
That split means the scaling work happens on the storage side, where it is safe to be aggressive, and the correctness guarantees never move. Crater-scale runsHuge runs where almost nothing repeats are a stress test for overhead, not for reuse, so they exercise the storage system. kache is built to stay correct and bounded here:
The point: even when the hit rate is naturally low, the cache stays correct, predictable, and bounded. Polyglot projectsThis is already a strength today, not a future plan:
Because cross-language edges key on real artifact content, a changed C header correctly invalidates the Rust crate that depends on it. The languages share storage without ever crossing wires. Real-world edge caseskache's rule is simple: never guess. When a build does something it cannot fully capture, it caches nothing and just runs the compiler, so a tricky build is slow at worst, never wrong. In practice:
This is also why kache is safe to share across a whole CI fleet: it would rather miss than serve a stale result. Blob inclusionLarge embedded inputs (include_bytes!, include_str!, generated assets, vendored binaries) are tracked correctly without bloating the store:
The throughlineCorrectness came first, with solid Rust and C/C++ hybrid support, on purpose. That foundation is exactly what makes the scaling work safe: the aggressive, heuristic parts (admission, tiering, smarter prefetch) all live on the storage side and can grow freely without ever touching the correctness guarantees. |
Uh oh!
There was an error while loading. Please reload this page.
How should Kache behave at larger scales, including Crater-scale runs, polyglot projects, real-world edge cases, and blob inclusion?
All reactions