From the open engine’s docs (traza 0.28.0). View source Engine routes reach a Traza Cloud project through the gateway.
Traza Storage Benchmark
These values were measured by cargo run --release --bin storage-bench; they are not estimates. The benchmark starts target/release/traza-server on a free loopback port with a fresh temporary data directory, ingests a corpus over HTTP while counting the exact request-body bytes it sends, waits for the flush and for compaction to quiesce, then walks the data directory.
Results
| Corpus | Spans | Ingested | On disk | Ratio (in:stored) | Amplification | Bytes/span |
|---|---|---|---|---|---|---|
generic |
1000000 | 311.9 MiB | 70.5 MiB | 4.42 : 1 | 0.23x | 74 |
llm |
200000 | 438.7 MiB | 70.5 MiB | 6.22 : 1 | 0.16x | 370 |
pinned-context |
10000 | 3144.4 MiB | 2.5 MiB | 1244.02 : 1 | 0.00x | 265 |
Where the bytes are:
| Corpus | Segment files | Write-ahead log | Payload store | Other | Total | Segment count |
|---|---|---|---|---|---|---|
generic |
62.9 MiB | 0.0 MiB | 0.0 MiB | 7.64 MiB | 70.5 MiB | 3 |
llm |
66.0 MiB | 0.0 MiB | 0.0 MiB | 4.46 MiB | 70.5 MiB | 2 |
pinned-context |
2.2 MiB | 0.0 MiB | 0.0 MiB | 0.28 MiB | 2.5 MiB | 1 |
Storage cost
Illustrative storage-only arithmetic, assuming prices per GiB-month of $0.08 for block storage, $0.023 for object storage. Traza keeps its data in a local data directory. Three independent copies are a cost scenario, not supported HA.
| Corpus | Stored | 1 copy / month | 3 copies / month |
|---|---|---|---|
generic |
0.07 GiB | $0.006 | $0.017 |
llm |
0.07 GiB | $0.006 | $0.017 |
pinned-context |
0.00 GiB | $0.000 | $0.001 |
For reference, the same stored volume on object storage at $0.023/GiB-month would cost 3.5x less. Traza has no object-storage tier; these are assumptions, not current price quotes or a deployment benchmark.
Methodology
generic— Service traces: 10-span traces across 20 services, three indexed attributes, occasional events. The same span shape the throughput benchmark uses.llm— LLM calls: OpenLLMetrygen_ai.*/traceloop.*attributes with a shared system prompt, a per-call user prompt, and a completion — roughly 2 KiB of text per span. Every value is below the payload-offload threshold, so nothing is deduplicated.pinned-context— Long-context agent calls: the same LLM span carrying a 320 KiB pinned context that is byte-identical on every call, above the 256 KiB payload threshold. This is the case content-addressed offloading exists for — the context is stored once for the whole corpus.- Ingest for
generic: HTTPPOST /v1/spans, 1000 spans per request. - Ingest for
llm: HTTPPOST /v1/spans, 1000 spans per request. - Ingest for
pinned-context: HTTPPOST /v1/spans, 100 spans per request. - “Ingested” is the sum of request-body lengths actually written to the socket — the JSON a client would have sent to any other backend — excluding HTTP headers.
- “On disk” is a recursive walk of the whole data directory: segments, write-ahead log, payload store, and everything else. It is not the
bytes_on_diskfield of/v1/stats, which counts segments only. - Quiescence: the benchmark forces a flush, then polls
/v1/statsuntil the segment count and disk usage stop changing, so compaction is not caught mid-rewrite. - Configuration: shipped defaults throughout —
--durability wal, compaction on, payload threshold at its default. No setting was tuned for this measurement. - Build: Cargo release profile. Timestamp: Unix 1788687399.
- Machine context: macos/aarch64, 10 available hardware threads.
- Final server stats (
generic):{"buffer_age_seconds":null,"buffered_records":0,"bytes_on_disk":65960997,"durability":"wal","persisted_records":1000000,"record_count":1000000,"segment_count":3,"total_records":1000000,"wal_bytes":0}. - Final server stats (
llm):{"buffer_age_seconds":null,"buffered_records":0,"bytes_on_disk":69229596,"durability":"wal","persisted_records":200000,"record_count":200000,"segment_count":2,"total_records":200000,"wal_bytes":0}. - Final server stats (
pinned-context):{"buffer_age_seconds":null,"buffered_records":0,"bytes_on_disk":2346853,"durability":"wal","persisted_records":10000,"record_count":10000,"segment_count":1,"total_records":10000,"wal_bytes":0}.
Verification Notes
- Every reported byte count is measured by this run, never estimated.
- The benchmark fails rather than reports if the store does not hold exactly the corpus it ingested.
- This file exists only because the run passed acceptance gate 5 of the segment format: settled amplification at or below 1.0x on
genericandllm. The benchmark asserts the gate after measuring and before writing; a run that misses it exits non-zero and writes nothing. - Segment records and payload blobs are LZ4-compressed (since format v7; the current format is v8). A ratio below 1:1 would be amplification and would be reported as measured rather than inverted into a flattering number.
- Exact byte counts, so anything derived from this table can be recomputed rather than re-rounded:
generic: 1000000 spans, 327069707 bytes ingested, 73968447 bytes on disk (65960997 segments, 8 write-ahead log, 0 payload store, 8007442 other).llm: 200000 spans, 460055297 bytes ingested, 73909976 bytes on disk (69229596 segments, 8 write-ahead log, 0 payload store, 4680372 other).pinned-context: 10000 spans, 3297157900 bytes ingested, 2650416 bytes on disk (2346853 segments, 8 write-ahead log, 5961 payload store, 297594 other).
Records-region measurements
Measured by this same run, from the v8 header of every segment file the settled store holds: the header is 132 bytes, the records region’s STORED (compressed) length is the u64 at byte 32, and its LOGICAL (uncompressed) length is the u64 at byte 120 — the header table in the format document is the reference. The records region is LZ4-compressed and addressed through the block directory, so the logical column is the byte count the directory’s blocks decode to, not anything present contiguously in the file.
| Corpus | Segment bytes | Records stored | Stored share | Largest per-file share | Records logical | Stored/logical |
|---|---|---|---|---|---|---|
generic |
65960997 | 63537308 | 96.3% | 96.4% | 492068707 | 0.13 |
llm |
69229596 | 58384423 | 84.3% | 84.4% | 544648471 | 0.11 |
pinned-context |
2346853 | 1806620 | 77.0% | 77.0% | 16767800 | 0.11 |
The v6-era edition of this section also measured a “value text” column: the share of the records region that was attribute value text stored twice, once in the payload and once in the record’s own key/value list. v7 removed that double-store — records carry fixed-width (key id, digest) pairs, and the value text lives only in the payload — so the column no longer measures anything. The v6-era numbers (36.1% of llm’s records region, 25.6% of pinned-context’s, 7.4% of generic’s, at 65652a2) remain quoted in the format document’s motivation as the measurement that justified the change, and in this file’s git history.