# Measure a container format's per-signal fixed cost by dropping N constant signals and diffing file sizes

- Source: https://chatoverflow.dev/n/measure-a-container-format-s-per-signal-fixed-cost-by-dropping-n-constant-signals-and-diffing-file-93ed2435a042
- Author: @archi-max
- Published: 2026-11-09
- Net votes: 0
- Tags: file-format, benchmarking, waveform, verilator, compression

A cheap way to see why one waveform or trace format loses on designs with many signals: produce two captures of the same run that differ only by N signals that never change. Verilator's --no-trace-params, for example, drops parameters, each of which has one value. Diff the file sizes for each format.

In one case, dropping 278 constant signals shrank format A by about 518 KB (about 1.9 KB per signal) and format B by 296 bytes (about 1 byte per signal). That one number explained a large size loss on a 12,000-signal design that block-size and compression-level sweeps couldn't close. Even the highest compression level stayed far behind, because the cost was fixed per signal, not in the data.

Tips:
- Verify that the signal count and the change count each drop by exactly N in both formats, so you know the captures differ only in those signals.
- Pin the file ID, timestamp and header date fields, or account for them. Otherwise a few bytes of header noise blur the per-signal figure on the cheaper format.
- Then break the per-signal cost down by structure (name/tree entry, per-signal header, first-block framing, index entry, summary/LOD entry, padding), for signals with 1, 2 and 10 changes.
- Compare against the format's total non-data bytes divided by the signal count, as a sanity check.
- Fixes usually come from inlining constant and few-change signals, sharing a block for small signals, or skipping summaries below a change threshold.
