> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aiaxoniq.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Performance and overhead

> What drives zero-code agent overhead, how to measure it on your own hardware, and why no headline figure is published.

Overhead is dominated by your traffic, not by a fixed property of the agent —
which is why this page tells you how to measure it rather than quoting a
number at you.

<Warning>
  **Availability.** The zero-code agent is an early-access distribution. It is
  installable, upgradable and tested, and it is **not yet an integrated part of
  the product**: there is no dashboard page for it, no in-product installer and
  no self-service download. Ask your account contact for access.

  Its telemetry, once flowing, is ordinary OTLP and needs nothing special —
  it appears in Services, Traces and Metrics exactly like SDK telemetry does.
  That is the design rather than a shortcut.
</Warning>

## No published figure, and why

<Warning>
  **We do not publish an overhead percentage.**

  The benchmark tool exists and works. On the host it has been run against,
  probes did not attach — because that host's `perf_event_paranoid` setting
  prevented it — so the only numbers available describe an idle process doing
  no instrumentation at all.

  The tool detects this and **declines to present numbers** rather than
  reporting a flattering figure that means nothing. Publishing "under 1%" on
  that basis would be a number with no measurement behind it, and you would
  reasonably plan capacity against it.

  A representative measurement is a known gap. Until it exists, the honest
  answer is: **measure it on your hardware, with your traffic.**
</Warning>

This is deliberately the only page in this section without a table of numbers.
Every vendor in this category publishes one; not all of them measured it.

## What drives overhead

Overhead is not a single property of the agent — it is dominated by what your
traffic looks like. In rough order of impact:

<AccordionGroup>
  <Accordion title="Request rate through instrumented processes" icon="gauge">
    The probe cost is per observed request. A host serving 50,000 requests per
    second pays 50,000 times whatever one costs; an idle host pays nothing.
    This is the term that dominates every other one.
  </Accordion>

  <Accordion title="Number of instrumented processes" icon="microchip">
    Discovery and attachment are per process. A node running 200 containers
    attaches far more probes than one running three.
  </Accordion>

  <Accordion title="Route cardinality" icon="tags">
    Distinct route patterns drive the size of in-memory aggregation state.
    Explicit route patterns reduce this as well as reducing your ingest bill —
    see [Troubleshooting](/zero-code/troubleshooting#metric-cardinality-explosion).
  </Accordion>

  <Accordion title="Profile" icon="layer-group">
    Profile A watches a socket filter. Profile B attaches uprobes to TLS
    functions and kprobes, which is more work per request. Profile C adds
    outbound injection on top.
  </Accordion>

  <Accordion title="Export volume and batching" icon="boxes-stacked">
    Userspace aggregation and export are a smaller term than probe cost, and
    the batching is already tuned for a fleet. Dropped health-check traffic
    reduces this directly.
  </Accordion>
</AccordionGroup>

## Measuring it on your hardware

```bash theme={null}
./bin/oiq-zerocode-bench
```

<Note>
  **The benchmark refuses to mislead you.** If it detects that probes did not
  attach, it says so and declines to report — which is exactly what happened on
  the host referenced above. A number from this tool means probes were
  attached.
</Note>

For a measurement you can act on:

<Steps>
  <Step title="Use a host that passes preflight for your chosen profile">
    Specifically, confirm `perf_event_paranoid` is 1 or lower. A run on a host
    where probes cannot attach measures nothing.
  </Step>

  <Step title="Establish a baseline under representative load">
    Your real traffic shape, not a synthetic loop. Record CPU, memory and your
    own application's latency percentiles.
  </Step>

  <Step title="Install the agent and hold the load constant">
    Change one thing.
  </Step>

  <Step title="Compare the same percentiles">
    p50 will move less than p99. p99 is the number that matters, and the one a
    headline percentage always hides.
  </Step>
</Steps>

## Reducing overhead

The same levers that reduce your ingest bill:

| Lever                                           | Effect                                                                                    |
| :---------------------------------------------- | :---------------------------------------------------------------------------------------- |
| Keep health and metrics endpoints excluded      | They are excluded by default and are frequently the highest-frequency traffic on the host |
| Add explicit route patterns                     | Smaller aggregation state, fewer metric series                                            |
| Use profile B rather than C                     | Less work per request, and much less privilege                                            |
| Exclude services whose telemetry you do not use | Fewer attached probes                                                                     |

## Resource footprint

The agent is one process per host regardless of how many services it observes —
so its footprint does not scale with your service count the way a per-service
sidecar does. It scales with **request rate** and **process count**.

<Info>
  **Plan a staged rollout.** Validation to date is single-node; there is no
  fleet-scale soak test. Start with a subset of nodes, measure, then widen.
  That is good practice for anything holding kernel capabilities, and here it
  is also how you get the number for your own environment.
</Info>

## Next

<CardGroup cols={3}>
  <Card title="Known limitations" icon="circle-minus" href="/zero-code/limitations">
    Everything absent by design, including this gap.
  </Card>

  <Card title="Capability profiles" icon="layer-group" href="/zero-code/profiles">
    The profile choice, which is also a cost choice.
  </Card>

  <Card title="Verification" icon="circle-check" href="/zero-code/verification">
    Confirm probes attached before measuring anything.
  </Card>
</CardGroup>
