Cameleering

Cameleering / Method

Cameleering

Cameleering · the method

How to measure, so the numbers hold up

What we measure, how we measure it, what counts as a fair baseline, a ten-point check to run before each release, and the one-page report every ledger row links to. Use it on any software, in any language.

No claim without a number.

What to measure

metrichowwhy it matters
Startuptime from process start to the first unit of work being ready (a started context, a listening port answering a request); many runs, report the medianscale to zero, restarts, serverless cold starts
Memory at startupresident set size once ready and idlehow many instances fit on a machine
Peak memory under loadmaximum resident set size during the throughput runwhat you must provision
Throughputcompleted work per second at a fixed concurrency, after a warm-up, with the load generator on a separate machinehow much hardware the job needs
Tail latencyp99 (and p50) from the load generator, at the same load as the throughput runwhat the slowest users wait
CPUCPU time per unit of work, or CPU percentage at a fixed ratethe cost of each request
Sizebinary or image size, compressed and uncompresseddeploy time, storage, attack surface
Dependencies and idle threadscount of third-party packages compiled in; threads alive when idlesupply chain, audit cost, idle overhead

What counts as a fair baseline

Do

  • Compare with the version most people run today, with the exact version, runtime and flags written down.
  • Include the strongest variant of the baseline too, not only the easy one. Cameleer is compared with Apache Camel on the JVM and on Quarkus native.
  • Run both sides on identical machines, swapping roles between them, with the load generator on its own machine.
  • Run each scenario more than once and say how the figures were combined.
  • Round against yourself: your times and memory up, your ratios down.

Don't

  • Compare a tuned build with a default one, or a warm run with a cold one.
  • Quote the best ratio without the worst ("up to 54x" without "4.8x").
  • Leave out the scenarios you lose.
  • Present a target in the same style as a result.
  • Borrow one project's numbers for another.

Headroom: the degraded-fleet test

An outage often brings no new traffic: it is the same traffic on fewer servers, and restarted servers that fall over again when the load returns (headroom, explained). Measure that margin before an incident, with the same harness and baseline rules as above. The full procedure, with what to record and how to read it, is in the degraded-fleet test.

testwhat you dowhat you record
Lose a thirdrun production-shaped load on N servers, then take a third of them out of rotation without changing the loadp99, error rate, CPU and memory on the survivors; the load at which p99 passes your target
Restart under loadrestart one server while the others carry full traffic, and send it its share at oncetime to its first answer, time until its p99 is back within target, and whether it fails its health check again
Connection stormopen many new TLS connections at once, as clients do when they reconnect after a failurehandshakes per second, CPU per handshake, and p99 for requests on connections that were already open
Overloadoffer more load than the fleet can servehow many requests are still answered within target, not only in total; whether load shedding or admission control kicks in

Report it like any other result: both sides, the same hardware, the losses. Our own overload result is a loss: simoom answers as many requests in total as the others but few within 1 ms (the ledger).

The water check: ten questions before each release

Do we know each number, and did any of them get worse? Keep the answers in the repository, where the team sees them.

  1. Cold start time
  2. Memory when idle
  3. Peak memory under load
  4. Binary or image size
  5. Threads alive when idle
  6. p99 latency at the expected load
  7. CPU per request
  8. Number of dependencies
  9. Time a user waits behind a loader or spinner
  10. Is each result written down, with the date and the machine?

The crossing report: one page per ledger row

sectionwhat it holds
Loadthe workload: the routes, requests or queries, and why they are representative
Baselinethe software compared with, exact versions, runtime and flags
Terrainhardware, operating system, kernel, build profile
Waterstartup, idle and peak memory, size, CPU
Distancethroughput and p50/p99 latency
Losseswhere the new version is slower or bigger, and why
Repeat itthe scripts, commands, checksums and raw results
Datewhen it was measured; a result older than 12 months is stale

Cameleer's report in this shape: BENCHMARKS, produced by scripts/cloud-bench from the raw results.

Cameleered or Cameleering: the two labels

"Cameleered"

A project may say it has been cameleered when all of these hold:

  • a before-and-after comparison against a named, current baseline version;
  • both sides on the same hardware;
  • a script anyone can rerun, and the raw results;
  • the losses disclosed;
  • measured within the last 12 months.

"Cameleering"

Work in progress: the baseline may be published and targets set, but nothing is measured yet. A cameleering project shows its targets as targets and no results. A project that has not started is listed as planned, with neither label.

The labels never carry another project's name or trademark, and they say nothing about the projects they are compared with beyond the measured numbers.