One signed binary. Every feature compiled in. Free to run. Install Crowkis →
← back to the Roost
benchmarksJune 16, 2026· 7 min read

Where the milliseconds go: an honest latency profile

A semantic cache hit isn't free — it has to embed your query first. We measured every operation's percentiles so you know exactly what you're paying for, and where the cache engine itself is microsecond-fast.

Marketing says 'sub-millisecond cache.' The truth has an asterisk worth understanding, because it tells you exactly when Crowkis is fast and when it isn't. A plain key-value GET — no embedding, no semantics — returns in about a quarter of a millisecond, a true Redis-class drop-in. A semantic CGET is a different animal: before it can search, it has to turn your query into a vector.

Operation latency, p50 (v0.2.2, CPU-only laptop)ms (p50)
Plain GET (no embed)0.26
CGET hit114.5
CGET miss114.8
CSET (store)118.8

The ~115 ms on every semantic op is the ONNX embedding cost — not the cache engine, which resolves in microseconds.

In plain words: p50 is the median — half of requests are faster. The embedding step dominates every semantic operation, so a hit and a miss cost almost the same: the work is in understanding the query, not in the lookup.

Once you see that the embedding is the cost, the optimization writes itself: don't embed what you've already embedded. Crowkis added a micro-cache that remembers recent embeddings, and for exact-repeat queries — which dominate real agent and chatbot traffic — the embedding step disappears entirely.

Exact-repeat CGET — before and after the embedding micro-cachems
Before (re-embed every time)19.5
After (micro-cache hit)0.16

122× faster on the path that real workloads hit most: the same question, again.

The tail tells the same story honestly. CGET-hit p99 sits at 136 ms — tight, because hits do predictable work. CGET-miss p99 stretches to 347 ms, because a miss occasionally does more work confirming there's nothing to serve. Neither number is a mystery pause; both are the embedding model under load, which is why the micro-cache and, on faster hardware, a GPU embedder move them so dramatically.

We publish the p99, not just the p50. A latency claim that only quotes the median is hiding the number that pages you at 3 a.m.

The practical takeaway: Crowkis is microsecond-fast at being a cache and millisecond-fast at being a semantic one, with the embedding as the dial you can turn — micro-cache for repeats, a stronger embedder host for throughput, or plain KV when you don't need meaning at all. Know which operation you're calling and the latency stops being a surprise.