No synthetic probes. No proxy. No bandwidth taxed. Every TCP session your devices run gets a kernel-native latency and retransmit reading; we roll those into one verdict per device, one per app, a 24-hour timeline, and a fleet ranking — in plain English, on every tier, at no add-on cost.
Hover Packetman for the technical bit.
Four verdicts. Two metrics — median internet latency and retransmission percentage. Worst-of-two drives the grade so an app with great latency but high retransmits never gets a flattering average.
Sub-half-second sessions are excluded from grading — TCP hasn't escaped slow-start that early, so the latency reading would be noise rather than signal.
We don’t sample a few connections and guess at the rest. Every qualifying TCP session your machine opens gets read — throughput each direction, round-trip latency, and retransmits — and tied to the exact program that opened it. That per-session reading is the raw material; everything else on this page is that material rolled up.
| Program (this device, last hour) | Throughput · down / up | Latency (RTT) | Retransmits | Grade |
|---|---|---|---|---|
| OneDrive | 41 / 8 Mbps | 44 ms | 0.2% | Excellent |
| Chrome | 18 / 1 Mbps | 39 ms | 0.4% | Excellent |
| Zoom | 1.8 / 0.9 Mbps | 96 ms | 0.8% | Good |
| Microsoft Teams | 2.1 / 0.4 Mbps | 182 ms | 3.1% | Fair |
Illustrative readout. Throughput, latency, and retransmits are read per session and attributed to the owning process — so “Teams is the one struggling” is a fact on the screen, not a guess.
One reading rolls up four ways, so the right answer is there whether you own one laptop or run ten thousand of them.
A single TCP session: throughput each direction, round-trip latency, retransmits — the rawest signal, owned by one process.
Every session that executable ran today, rolled into one grade. Answers the eternal “is it the app or is it the network?”
Every program on that device, one verdict and a 24-hour timeline. This is the view the agent’s owner opens straight from the tray or dock.
The same verdict across the whole tenant, ranked. The operator’s view through the dashboard menus — is it one desk, or the whole floor?
Two audiences, one measurement: the person who owns a single agent watches their own machine from the tray; the operator watches the fleet from the menus. Nobody has to ask the other for a number.
Those scales show up as three surfaces in the product, each a click from your dashboard — the same data, sliced for the question you're asking.
One pill, one headline, one evidence line. "This device is performing well — 97% of sessions ran clean, median internet latency 38 ms, 0.2% retransmits." If anything's hurting it, the last-hiccup line names the app and when.
24h timeline — five-minute buckets, color = worst grade in that window. Dim grey = device idle.
Every app you used today, graded the same way. Slack: Excellent · Edge: Good · OneDrive: Fair (180 ms · 3% retx). Worst-graded apps surface first, so the thing actually hurting you sits at the top.
The whole fleet, ranked. Fastest 10 on the left, Slowest 10 on the right, grade distribution across the top, median fleet latency right next to it. One click from your dashboard band tells you exactly which devices need attention.
Every agent pairs with every other agent in a controlled small-burst test — both directions independently, on a schedule. The fleet dashboard collapses N² pairs into one heat-map so the worst legs jump out instantly. Below is the live readout from our own mesh.
| G16 | acer | gus mac lap1 | linda | si | stun | |
|---|---|---|---|---|---|---|
| G16 → | · | 5 ms | 80 ms | 63 ms | 2 ms | 46 ms |
| acer → | 6 ms | · | 86 ms | 81 ms | 6 ms | 49 ms |
| gus mac lap1 → | 57 ms | 65 ms | · | 101 ms | 63 ms | 104 ms |
| linda → | 61 ms | 64 ms | 99 ms | · | 61 ms | 101 ms |
| si → | 1 ms | 5 ms | 186 ms | 119 ms | · | 45 ms |
| stun → | 46 ms | 51 ms | 147 ms | 109 ms | 46 ms | · |
| G16 | acer | gus mac lap1 | linda | si | stun | |
|---|---|---|---|---|---|---|
| G16 → | · | 19 Mb | 12 Mb | 2.0 Mb | 19 Mb | 17 Mb |
| acer → | 21 Mb | · | 18 Mb | 1.2 Mb | 27 Mb | 6.1 Mb |
| gus mac lap1 → | 1.9 Mb | 2.2 Mb | · | 4.6 Mb | 2.2 Mb | 189 Mb |
| linda → | 1.9 Mb | 2.0 Mb | 3.5 Mb | · | 2.4 Mb | 1.3 Mb |
| si → | 51 Mb | 54 Mb | 3.3 Mb | 3.0 Mb | · | 92 Mb |
| stun → | 2.8 Mb | 2.2 Mb | 34 Mb | 3.7 Mb | 3.8 Mb | · |
Live snapshot from our own mesh — six agents across LAN, home broadband, mobile, and server. Each cell is one direction of one pair; the colour compares the current reading to that link’s own historical best, so a fast link slipping is what jumps out, not a slow link staying slow. Cells with a midpoint dot are self-cells (an agent doesn’t test against itself). With N agents you get N² − N independent direction-specific readings: six agents produce 30 cells, ten agents produce 90, fifty agents produce 2,450 — one click of the menu surfaces them all.
The mesh measurement is honest only if the path it measures is the path your data would actually take. So agents try the cheapest, most direct path first — same-LAN if available, then a coordinated NAT hole-punch, then mutual relay through coturn as the last resort. The diagram below shows the ladder.
DTM1 echo → RTT (EWMA, α = 1/6) so a single bad sample doesn’t spike the chartDTM3/4 packet-pair (×5) → bottleneck bandwidth in Mbps without flooding the linkDTM5 punch-hint → coordinated NAT crack when the path doesn’t already existEvery agent maintains a persistent TURN allocation on stun.datastun.com. That allocation gives the agent its reflected IP:port (STUN side) and a relay address (TURN side); both are advertised to every peer, so each peer can try LAN, punch, and relay in sequence and pick the one that works. The green path is the goal: coturn was contacted only to learn the reflected port, and the test packets go agent-to-agent. The lavender path is correct when nothing else works, but the measurement is then of the relayed leg.
Every cell in the heat-map above is a clickable drill-down. The per-pair view shows the actual route between two agents — both NAT translations, every IPv6 hop that answered, and the ones that didn’t. Below is the live readout for one of our own pairs: acer in Cedar Park to linda in Humble, 14 hops, half of them silent (which is normal — carriers suppress ICMP in the core).
Each circle is one TTL slot. Solid cyan = the router at that hop responded with ICMP Time-Exceeded, so we have its IP and RTT. Dashed = no response within 900 ms (carriers commonly suppress ICMP on a subset of hops, especially in the core, so silent hops are normal and not an alarm). Each responding hop’s IP and RTT are staggered above and below the path so long IPv6 addresses don’t overlap; a thin guide line ties each label to its hop. The +N next to each RTT is the delta from the previous responding hop — a small positive number is healthy ladder behaviour; a sudden jump points at the leg where the latency is being added. In the real product, hover any hop for rDNS / ASN / geo; if the pair used a TURN relay (lavender on the connection ladder above), additional cyan curves appear at each end showing the relay leg.
The popular internet speed tests hurl hundreds of megabytes at a single CDN node to clock your link in one direction. Useful once. Useless if you want to know what’s happening between your laptop and your file server — and expensive on a metered, mobile, or congested link. We do it differently: small-burst smart sampling between your agents, both directions, on a schedule.
Hurl as much traffic as the link will carry at a single CDN node and clock the throughput.
Coordinated small bursts between your own agents, both directions, on a schedule.
Need the deterministic-flood number anyway — for an ISP SLA dispute, a before-and-after change validation, a network-acceptance test? The Speed Test add-on runs that on demand, still agent-to-agent (or agent to a DT-operated heavy responder), still under your control. See the Speed Test add-on →
Passive grading runs on every tier. The Speed Test add-on layers controlled measurement bursts on top when you want a deterministic number.
| Performance grading (this page) | Speed Test add-on → | |
|---|---|---|
| How it measures | Reads kernel-native TCP stats from sessions your apps were already running | Active measurement bursts between paired agents (N² mesh) |
| Bandwidth cost | Zero — observes existing traffic only | Configurable; small-burst smart sampling by default, not Ookla-style flood |
| What you get | Verdict per device + per app + 24h timeline + fleet rank | Latency, throughput, jitter, packet loss, traceroute — per direction |
| When to use it | Always — it's the daily-driver "is anything wrong?" surface | When you need a deterministic before/after, or pair-specific path data |
| Tier | Every tier — included free | Per-agent add-on, Business and above |
| Privacy | Metadata only (latency, byte counts, retransmit counts) — never packet contents | Same; the burst is to a peer agent we control, not a third-party endpoint |
The two are designed to work together. Passive grading runs continuously and tells you something is off; active testing answers how off with controlled, repeatable measurements.
Synthetic probes are easy to fool, expensive to run at scale, and tell you about a moment in time. Real-traffic readings tell you what your users are actually experiencing.
The agent reads numbers the kernel already tracks for its own TCP control loop. We don't generate traffic, we don't open extra sockets, we don't tax your bandwidth even on metered or congested links. The data was free; we just expose it.
A speed test to a CDN node twenty miles away tells you the best-case capacity of your line. It doesn't tell you why Microsoft Teams is stuttering or why OneDrive uploads are taking forever. Reading the kernel stats from the actual Teams session does.
A user runs a speed test, gets a fine number, and ten minutes later their call drops. Passive grading is always running, so the 24-hour timeline shows you exactly when things were bad — even if no one was at the keyboard to notice.
Active probes measure the network. Passive grading measures the network per application — because every TCP session is owned by a specific process, and we know which one. "Slack is fine, OneDrive is fair" is the answer; you didn't have to think to ask the question.
Worst-of-two-metrics means an app with 30 ms latency but 5% retransmits grades Poor — the problem isn't hidden by an average. Sub-half-second sessions are excluded so quick connection probes don't drown out the real conversation. The thresholds are explicit, published, and calibratable per tenant later.
One agent's verdict is useful. The same verdict applied across every device on your tenant lets you rank the fleet, surface the slowest 10, and answer "is it just my machine or is the whole office hurting today?" in one glance.
We read what the kernel already tracks. We don't inspect packets, we don't decrypt anything, we don't proxy anything.
TCP_INFO.tcpi_rtt, Windows ESTATS hooks)All four are numbers the kernel tracks for its own control loop. We expose them; we don't compute them.
There is no decryption code path on the agent. There is no proxy. The data we see is the same data netstat sees — just continuous, attributed, and graded.
Grading is the always-on signal: it tells you which device, which app, which hour went bad. When you need the cause — not just the location — the same agents escalate to active diagnostics, on demand. No new software, no truck roll.
Passive grading runs continuously and surfaces the device or app that slipped to Fair or Poor — with the hour, the throughput, the latency, and the retransmit count already attached. You start knowing where.
Run an agent-to-agent test along the suspect path, both directions, to turn “something’s off” into a deterministic number — throughput, jitter, loss, and the routers on the way out and the way back.
When a number still isn’t enough, Advanced Packet Diagnostics captures the session on both ends, decodes it centrally, and hands PacketMan the trace for a plain-English diagnosis — with no capture tools installed on the machine.
For paths that look fine on a traceroute but lose packets on every hop, Hop Starvation probes for the silent TTL-expiry drops that betray an injection appliance. The grade points; the diagnostics close.
N² pairs of agents producing bidirectional latency / throughput / jitter / packet-loss measurements. 500 agents = 124,750 measurement pairs. When a user says “the VPN is slow,” you do not argue.
Probes networks for silent TTL-expiry drops that indicate an injection appliance. The diagnostic for paths that look fine on a traceroute but lose packets on every hop. Per-agent add-on on Business+.
Performance grading lights up the moment your first agent is enrolled. No setup, no opt-in, no add-on charge. Individual tier covers up to 10 agents with 30 days of history.