Skip to documentation
PILLARDocumentation
Metric Manual

Incident Attribution & Metric Interpretation

When an edit bay stutters during playback, Technical Directors must quickly differentiate between client workstation strain, network saturation, and backend storage tail latency. This manual covers the core metrics monitored by Pillar.

1.Storage latency and frame intervals

Explore the relationship between latency and a frame interval. This illustration does not measure playback or configure incident thresholds:

Interactive Playback Budget Tool

Video Frame Delivery Window vs. Disk Await

Formula: Frame interval (ms) = 1000 / FPS

Target Video Timeline Frame Rate:

Format Profile: Narrative editorial

25 ms
1 ms41.7 ms (24 fps interval)120 ms
Video frame interval41.7 ms

Time between frames at the selected frame rate. Your safe storage target should leave room for other processing and depends on the workload.

Illustrative comparisonWithin frame interval

Example latency (25 ms) is 60% of a frame interval. This does not establish playback readiness or rule out other bottlenecks.

Agent vs. Observer: What Each Can Measure

Pillar Agent alone reads /proc/diskstats and reports mean read/write await, interval latency deviation, queue pressure, and utilization. True per-I/O percentiles, request-size distribution, and the queued-vs-device time split require the optional Pillar Observer (eBPF) component. See Agent & Observer reference for install and capability details.

MetricAgent onlyWith Observer
Mean read/write await✓✓
Queue depth & utilization✓✓
p50 / p95 / p99 / p99.9 latency—✓
Request-size distribution—✓
Queued vs. device time split—✓

I/O Latency Distribution (Observer)

With Pillar Observer, the Storage Playback tab shows p50, p95, p99 and p99.9 for reads, writes and flushes over 1 hour to 7 days, by pool, VDEV or drive. Every value is recomputed from per-I/O histogram bucket counts: Pillar merges bucket counts across time and never averages stored percentiles. A pool or VDEV line shows the worst member drive for each interval (for example, “Pool p99 shown as worst member-drive p99”), because averaging drives would hide the one that stalls.

A percentile is shown only when enough I/Os back it (100 samples for p99 and 1,000 for p99.9 by default, configurable in Settings); otherwise Pillar shows “insufficient samples”. The observed window duration and sample count are always displayed. Without Observer, Pillar keeps the Agent’s mean read latency view and states that true latency percentiles require Pillar Observer.

Tail-latency diagnostics look at several recent windows together, a drive’s own percentile baseline, peer drives, queue pressure, SMART and maintenance state, so a single slow bucket never marks a drive unhealthy. History is kept as raw 10-second windows for 7 days, 1-minute rollups for 30 days, 15-minute rollups for up to 90 days and 1-hour rollups for up to 1 year, limited by your plan’s telemetry retention.

Each Observer measurement window (observer_windows) carries its own provenance, support state, and quality counters, and the heartbeat response acknowledges every window Pillar Cloud stored (observerWindows.acks) so the Agent can retry only what wasn’t confirmed. Pillar Cloud only ever plots qualified windows — ones the Agent, Observer, and Cloud all agree are a certified measurement. A window (or one drive’s series within it) is excluded, and never plotted, when it is a synthetic/demo sample outside demo mode, missing its eBPF probe digest, not currently “measuring”, affected by dropped or lost events, or reports a data-quality flag such as a reader backlog or a clock step. Excluded windows are counted, not discarded — the chart caption reads “N windows excluded: reason (count), …” so a gap in the trend is never silently unexplained.

A percentile whose rank falls in the open, unbounded top bucket (over 256 ms) is a lower bound, not an exact value — Pillar never invents a number past the last real bucket boundary. These render as “≥256 ms” with a tooltip explaining the value is a floor, not an average or an estimate: the true latency could be higher. A lower bound still proves a safe-target breach whenever it already exceeds the target. Chart captions also report Observer’s own connection status (sampler, probe digest prefix, session, and age of the last window) and, for the most recent hour of raw windows, sequence-gap coverage (“Coverage X% · N windows missing (sequence gaps)”) so a dropped connection is visible even when the chart still shows data either side of the gap.

Deferred (tracked, not yet built): request-size distribution charts (the series is stored but has no chart yet), a queued-vs-device (“total”) latency view, latency data export/CSV, fleet-level latency quality badges, and richer simulator scenarios for lossy/sparse Observer delivery.

Standard Video Playback Delivery Windows

The Frame Delivery Window is the raw frame interval (1000 / fps)—not itself the storage latency budget. Pillar compares observed latency to a separate, configurable safe storage target (for example, the 24 fps / 41.67 ms interval ships with a default safe target of 20 ms). Use Settings → Playback & workloads to inspect the configured storage target. A single block I/O can differ from a complete frame read, and client buffering and caching also affect playback.

Timeline FormatTarget FPSFrame Delivery Window
Cinema / editorial24 fps41.67 ms
Video / broadcast30 fps33.33 ms
High frame rate60 fps16.67 ms
High frame rate120 fps8.33 ms

Verify real-time host await latencies directly from the terminal:

bash
iostat -xz 1 5

2.Capacity pressure and ZFS headroom

Treat configured warning thresholds as planning guardrails, not a universal performance cliff.

Reduced free space and fragmentation can increase allocation work. The relationship to latency depends on workload, topology, and the ZFS version. Pillar does not establish a fixed 80% transition, a guaranteed latency range, or proof that capacity caused dropped frames.

Compare capacity and fragmentation with observed latency, maintenance state, and growth history. See Capacity planning for runway estimates and confidence.

bash
zpool list -o name,size,alloc,free,cap,frag

3.Scrub Windowing & Resilver Guardrails

A ZFS scrub validates block checksums to detect silent bit rot. However, on large multi-terabyte arrays, an unconstrained scrub competes directly with editorial playback:

  • Competing I/O: Scrub activity can consume resources also needed by foreground workloads. The effect depends on the workload, hardware, and host configuration.
  • Window Overrun Tracking: Pillar forecasts the estimated scrub completion time (eta_seconds). Collision diagnostics compare projected completion with configured facility operating hours; external notification depends on routing and successful delivery.
  • Maintenance planning: Follow your platform’s supported pause/resume procedure and verify its result. See the Runbooks for investigation steps.

4.Host Network Evidence

Pillar Agent also reads the storage host's own network interfaces from /sys/class/net: link state, speed, carrier changes, and cumulative RX/TX byte, packet, error, and drop counters. Pillar derives per-interval rates from these counters to answer one question — was the storage host's interface saturated, dropping packets, or erroring — never whether the network path, switch, client, or SAN is healthy.

DiagnosticFires when
Host NIC pressureUtilization stays at or above 85% for 5+ minutes, or packet drops in the recent window clear a burst or rate threshold.
Host NIC error rateThe interval error rate and error count both clear their configured thresholds in the recent window.
Host NIC link instabilityThe link goes down after being up, carrier state flaps repeatedly within a 10-minute window, or link speed downshifts.

Every host NIC reading carries a boundary label — "Agent-observed host NIC telemetry" — distinct from the "Observer-measured I/O distribution" label used for disk I/O, plus a limits statement that Pillar observed the storage host only. A host NIC finding is supporting evidence: it is ranked below a disk hardware or latency finding on the same node, except for a clear link failure (a down interface, or a flapping interface configured as the storage uplink).

Raw interval samples are retained 14 days, 5-minute rollups 90 days, and hourly rollups 365 days; link events (link up/down, speed changes, carrier flaps, counter resets) are retained 400 days.