Skip to content

feat(tunnel): measure relay saturation, packet loss and latency #879

Closed

Description

@Baylem

Production readiness audit of Gameplane v0.4.0, commit 07bee47b. Tracking issue and PR merge order: #867.

Finding

The Tailscale forwarder shares a bounded session budget across ports/protocols, with four queued UDP datagrams per session by default. Dropped packets and rejected connections can coincide with a Ready relay. Other providers use different forwarding paths.

Work

Instrument active flows, rejections, queue drops, packet rate and forwarding latency with bounded cardinality. Make applicable limits configurable within safe bounds. Publish provider-specific capabilities and profile allocation/CPU hot spots under a realistic high-tickrate load.

Acceptance criteria

Drive direct and tunneled traffic on the same hardware with identical clients, packet sizes and offered load. Force saturation, verify counters against client observations, and report p95/p99 latency, jitter, loss, CPU and the sustainable rate for each provider under test, explicitly marking unqualified paths.

PR ownership and prior work

Own the relay metrics and load driver. M03 consumes those metric names in dashboards/alerts. M01 uses the direct/relay baseline without forking the driver. Reuse the forwarding and health paths delivered by #765, #768 and #838. The session and queue limits cited here are specific to Tailscale.

Tailscale forwarding · Relay gauges

Qualification evidence

All four direct-versus-FRP loopback comparisons met the documented send, loss, p99 RTT and jitter budgets at 1,024 offered UDP packets/s. At 8,192 packets/s, one trial returned 81,738 of 81,920 sent datagrams. The FRP proxy independently counted the same payload volume. The report contains routes, trial order, packet sizes, CPU usage, latency distributions and the raw data for all 32 trials. FRP qualification and reproduction

At 4,096 offered packets/s the direct socket and local Tailscale forwarder each returned all 8,192 datagrams. Their p99 RTTs were 0.079 ms and 0.172 ms respectively. The accompanying amd64 CPU and allocation profiles cover the local UDP forwarding path. WAN FRP, hosted Tailscale, DERP and Playit capacity remain unqualified. Forwarder profile CI log · Implementation PR #905

Activity

  1. added
    type: featureNew capability or user-facing addition
    area: e2ekind-based end-to-end suite
    area: optional-componentssentinel, capture-sidecar, mcp-server, tunnel, audit-syslog-bridge, telemetry-receiver
    on Nov 11, 2026
  2. changed the title [-][Medium M02] Expose relay saturation and qualify UDP loss, jitter and latency against direct traffic[/-] [+]feat(tunnel): measure relay saturation, packet loss and latency[/+] on Nov 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: e2ekind-based end-to-end suitearea: optional-componentssentinel, capture-sidecar, mcp-server, tunnel, audit-syslog-bridge, telemetry-receivertype: featureNew capability or user-facing addition

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions