Recommended Targets
The cards are sorted by total score for this run. Each card is one tested URL or transport configuration; open it to see the URL, run mode, best and weakest latency cases, throughput, CPU, and counted cases.
Total score is out of 120. Higher is better for the current test mix. Sub-pills show: latency / throughput / resource / coverage / delivery / send-block. The "Recommended Targets" headline shows the strongest URL for this run.
Total score formula (max 120)
- Latency 30% — Subscriber-side end-to-end latency. Per case we weight P95×0.70 + P99×0.25 + P99.9×0.04 + P99.99×0.01 through a payload-aware curve, then use an equal-weight geometric mean across cases.
- Throughput 20% — recv MB/s on the subscriber side, log-scaled vs 1024 MB/s reference. Higher throughput → higher score.
- Resource 10% — throughput per unit CPU. Lower CPU at the same throughput → higher score.
- Delivery 10% — Aggregated loss across all cases: avg_delivery = 100 - loss%. Loss > 5% also lightly cuts per-case latency via a logistic curve (gentle ≤20%, accelerates >20%, capped at ×0.40) to defeat survivor-bias.
- Send-block 10% — wall-clock time spent inside publish() per message (P99), equal-weight across latency/backpressure cases. Penalizes APIs that block the publisher thread.
- Coverage 10% — Passing cases / total cases for this URL. Standalone dimension; also serves as fallback for the topology slot when topology suite is absent.
- Topology 10% — Topology suite roll-up (1:n / n:1 / n:n). Falls back to clamp(coverage, 60, 95) when topology suite was not run.
total = (0.36·latency + 0.24·throughput + 0.12·resource + 0.12·delivery + 0.12·send-block + 0.12·coverage + 0.12·topology) · confidence_factor
Confidence is derived from aggregate/worst-case loss% and latency sample drops: <5% high, <15% medium, ≥15% noisy; solo means no peers, unknown means all cases failed. Multipliers: high 1.00 / solo·medium 0.99 / unknown·noisy 0.95.
Top recommendation: shm:// total 118/120
It is the strongest result in this run; use latency, throughput, and Transport Health below to confirm details.
#1shm://cross-process⚡ Latency score 100📦 Throughput score 100🔋 Resource score 100🎯 Coverage score 100📦 Delivery score 100🔒 Send-block score 89total 118conf high
shm://cross-process⚡ Latency score 100📦 Throughput score 100🔋 Resource score 100🎯 Coverage score 100📦 Delivery score 100🔒 Send-block score 89total 118conf highshm://shm://bench/perf_shm?depth=10#2dds://cross-process⚡ Latency score 94📦 Throughput score 90🔋 Resource score 46🎯 Coverage score 100📦 Delivery score 73🔒 Send-block score 57total 95conf noisy⚠ Loss 29.828%
dds://cross-process⚡ Latency score 94📦 Throughput score 90🔋 Resource score 46🎯 Coverage score 100📦 Delivery score 73🔒 Send-block score 57total 95conf noisy⚠ Loss 29.828%dds://dds://bench/perf_dds?qos=better#3ddsc://cross-process⚡ Latency score 90📦 Throughput score 81🔋 Resource score 38🎯 Coverage score 100📦 Delivery score 98🔒 Send-block score 52total 93conf noisy⚠ Loss 67.125%
ddsc://cross-process⚡ Latency score 90📦 Throughput score 81🔋 Resource score 38🎯 Coverage score 100📦 Delivery score 98🔒 Send-block score 52total 93conf noisy⚠ Loss 67.125%ddsc://ddsc://bench/perf_ddsc?qos=betterRun Overview
Repeated runs of the same case are merged; averages only count successful runs. Delivery loss is shown once it reaches 5% so trace amounts of normal jitter do not distract from the main result.
Metric Guide
Terminology used throughout the report. Skim it once and the recommendation, heatmaps, and category results below all become easier to interpret.
| Metric | Meaning |
|---|---|
| P50 / P90 / P99 latency (and P99.9 / P99.99 in detail tables) | Latency percentiles. The heatmap shows P50 (typical), P90 (slower common case), and P99 (tail) side by side; detail tables also include P99.9 and P99.99 to surface rare slow messages. Lower numbers are better across the board. |
| Received MB/s | How many megabytes per second the subscriber actually received. This is the main throughput number. |
| Loss ratio | Messages that were expected but not received. Small loss can happen in stress tests; the report only highlights loss at 5% or higher, and marks very high loss more strongly. |
| Confidence | A quick read on result reliability, based on run success, visible loss, and latency sample drops. Low confidence means review Transport Health and problem cases; final judgment still depends on latency and throughput. |
| Message size / payload | The size and type of each message sent during the test. Larger messages usually stress bandwidth, buffers, and copying more. |
| Connection topology | The publisher/subscriber shape, such as 1:1, 1:n, n:1, or n:n. It shows whether a transport scales when more senders or receivers are involved. |
| CPU Efficiency | How much throughput is achieved for the CPU used by publisher and subscriber. It helps break ties, but latency and throughput remain the main decision signals. |
Transport Health
warnings
Transport Health tells whether this report is trustworthy before you compare scores. It summarizes failed cases, warnings, URL coverage, and problem cases. Green means no obvious problem; yellow means review loss, skipped, or unstable results; red means inspect the problem-case error first. Small loss is still recorded; this section highlights loss, failures, or skips that may affect the conclusion.
| Transport | Mode | Problem Cases | Total Cases |
|---|---|---|---|
shm | process | 0 | 8 |
dds | process | 1 | 8 |
ddsc | process | 1 | 8 |
Tested URL Coverage
| Transport | URL | Modes | Passing | Warning | Failing | Best Recv MB/s | Best P95 us |
|---|---|---|---|---|---|---|---|
shm | shm://bench/perf_shm?depth=10 | process | 8 | 0 | 0 | 14737.25 | 17.85 |
dds | dds://bench/perf_dds?qos=better | process | 7 | 1 | 0 | 3705.12 | 33.81 |
ddsc | ddsc://bench/perf_ddsc?qos=better | process | 7 | 1 | 0 | 3493.88 | 25.05 |
Cases to Review
| Category | Mode | Transport | Payload | Config | Repeats | Status | Errors |
|---|---|---|---|---|---|---|---|
| throughput | process | dds | bytes / 16 KB | url: dds://bench/perf_dds?qos=bettertopology: 1:1 [1p/1s]pattern: max | 1/1 | WARN 1/1 loss | |
| throughput | process | ddsc | bytes / 1 MB | url: ddsc://bench/perf_ddsc?qos=bettertopology: 1:1 [1p/1s]pattern: max | 1/1 | WARN 1/1 loss |
Latency / Throughput
Latency by Message Size (P50 / P90 / P99, lower is better)
Each cell has three bars: P50 / P90 / P99 (left to right), shorter and greener is better. Numbers on the right follow the same order, in µs. Blank = no data, FAIL = case failed.
shm://process | shm://bench/perf_shm?depth=10dds://process | dds://bench/perf_dds?qos=betterddsc://process | ddsc://bench/perf_ddsc?qos=betterThroughput by Message Size (received MB/s, higher is better)
This chart uses throughput tests only. Each row is one test target and each column is a message size. The number is mean received MB/s. Longer greener horizontal bars mean the subscriber actually received more data. Blank or failed cells have no valid result.
shm://process | shm://bench/perf_shm?depth=10dds://process | dds://bench/perf_dds?qos=betterddsc://process | ddsc://bench/perf_ddsc?qos=betterCategory Results
| Mode | Category | Best Result | Score | Coverage | Conclusion |
|---|---|---|---|---|---|
process | latency | shm://process | shm://bench/perf_shm?depth=10 | 99.6 | 5/5 case(s), 100.0% repeat success, 1 url(s) | Lowest latency: P95 80.06 us, P99 84.74 us, P99.9 126.80 us, P99.99 143.89 us. |
process | throughput | shm://process | shm://bench/perf_shm?depth=10 | 100.0 | 3/3 case(s), 100.0% repeat success, 1 url(s) | Best throughput: received 10629.54 MB/s, first message 0.59 ms. |
| Category | What is scored | How to read it | Best used for |
|---|---|---|---|
throughput | Mainly received MB/s, with small checks for send/receive efficiency and health. | Throughput tests mainly answer how much data was actually received. Health only highlights clear problems. | Useful for choosing the configuration that carries more data under larger payloads or heavier send pressure. |
latency | Mainly P95/P99 latency quality, with light tail-stability checks for P99.9/P99.99, max latency, jitter, throughput, and health. | Latency tests mainly use percentiles. The heatmap visualises P50 (typical) / P90 (slower common case) / P99 (tail). P99.9 / P99.99 stay visible as tail-stability signals, but they do not dominate the score. Lower numbers are better. | Useful for checking whether messages respond quickly and whether slow-message latency stays controlled. P95/P99 drive the score, while P99.9/P99.99 help explain rare stalls. |
backpressure | Mainly publisher-side P99 send-block time, with checks for delivered throughput, send/receive efficiency, and health. | Backpressure tests simulate slow consumers. Lower publish() blocking time is better, but the run still needs to deliver messages reliably. | Useful for spotting transports that stall publisher threads when subscribers fall behind. |
topology | Mainly total received MB/s and scaling efficiency, with small checks for send/receive efficiency and health. | Topology tests mainly check whether total throughput keeps up as publishers or subscribers increase. | Useful for one-to-many, many-to-one, and many-to-many deployment shapes. |
serialization | Mainly encode/decode speed, also checking coverage, repeat success, efficiency, balance, CPU, and memory. | Serialization mainly compares encode/decode speed and checks repeat stability. | Useful for judging data-format cost. It does not represent the full communication path. |
Result Highlights
shm in process mode with 8 normal case(s).shm | process | 1:1 [1p/1s] | bytes | 256 KBshm://bench/perf_shm?depth=10shm | process | 1:1 [1p/1s] | bytes | 128 Bshm://bench/perf_shm?depth=10Transport Summary
Groups each URL/transport configuration into one row for a quick trend view. A row can include multiple message sizes, rates, or topologies, so use latency/throughput comparisons and trend charts for exact comparisons.
| Transport | Mode | URL | Category | Score | Coverage | Mean Received MB/s | Mean Run P95 us | Loss % | Mean Peak RSS MB |
|---|---|---|---|---|---|---|---|---|---|
shm | process | shm://bench/perf_shm?depth=10 | latency | 99.6 | 5/5 | 100.0% repeat | 513.31 | 80.06 | - | 41.8 |
dds | process | dds://bench/perf_dds?qos=better | latency | 97.0 | 5/5 | 100.0% repeat | 512.51 | 240.81 | - | 41.7 |
ddsc | process | ddsc://bench/perf_ddsc?qos=better | latency | 85.6 | 5/5 | 100.0% repeat | 513.31 | 303.72 | - | 41.7 |
shm | process | shm://bench/perf_shm?depth=10 | throughput | 100.0 | 3/3 | 100.0% repeat | 10629.54 | - | - | 46.9 |
dds | process | dds://bench/perf_dds?qos=better | throughput | 90.8 | 3/3 | 100.0% repeat | 2891.54 | - | 29.828 | 43.1 |
ddsc | process | ddsc://bench/perf_ddsc?qos=better | throughput | 87.4 | 3/3 | 100.0% repeat | 1995.12 | - | 67.125 | 41.6 |
Trend Charts
Throughput (process)
Latency (process)
Loss (process)
Send-block (process)
First Message (process)
Resource CPU (process)
Resource RSS (process)
Detail Tables
Transport Detail Table
| Category | Mode | Transport | Payload | Config | Rate | Repeats | Received MB/s | Mean P95 us | Mean P99.9 us | Send-block P99 us | Loss % | CPU % | Peak RSS MB | Status |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| throughput | process | shm | bytes / 16 KB | url: shm://bench/perf_shm?depth=10topology: 1:1 [1p/1s]pattern: max | max | 1/1 | 7721.38 | - | - | 4.52 | 0.02 | 173.08 | 48.9 | OK 1/1 |
| throughput | process | shm | bytes / 256 KB | url: shm://bench/perf_shm?depth=10topology: 1:1 [1p/1s]pattern: max | max | 1/1 | 14737.25 | - | - | 16.42 | 0.00 | 134.58 | 44.2 | OK 1/1 |
| throughput | process | shm | bytes / 1 MB | url: shm://bench/perf_shm?depth=10topology: 1:1 [1p/1s]pattern: max | max | 1/1 | 9430.00 | - | - | 74.87 | 0.00 | 106.62 | 47.7 | OK 1/1 |
| throughput | process | dds | bytes / 16 KB | url: dds://bench/perf_dds?qos=bettertopology: 1:1 [1p/1s]pattern: max | max | 1/1 | 2124.99 | - | - | 10.86 | 29.83 | 237.46 | 43.4 | WARN 1/1 loss |
| throughput | process | dds | bytes / 256 KB | url: dds://bench/perf_dds?qos=bettertopology: 1:1 [1p/1s]pattern: max | max | 1/1 | 3705.12 | - | - | 91.62 | 3.16 | 209.72 | 41.2 | OK 1/1 |
| throughput | process | dds | bytes / 1 MB | url: dds://bench/perf_dds?qos=bettertopology: 1:1 [1p/1s]pattern: max | max | 1/1 | 2844.50 | - | - | 347.43 | 0.09 | 179.81 | 44.6 | OK 1/1 |
| throughput | process | ddsc | bytes / 16 KB | url: ddsc://bench/perf_ddsc?qos=bettertopology: 1:1 [1p/1s]pattern: max | max | 1/1 | 1512.00 | - | - | 22.89 | 0.00 | 196.29 | 39.2 | OK 1/1 |
| throughput | process | ddsc | bytes / 256 KB | url: ddsc://bench/perf_ddsc?qos=bettertopology: 1:1 [1p/1s]pattern: max | max | 1/1 | 3493.88 | - | - | 117.47 | 0.00 | 202.59 | 39.4 | OK 1/1 |
| throughput | process | ddsc | bytes / 1 MB | url: ddsc://bench/perf_ddsc?qos=bettertopology: 1:1 [1p/1s]pattern: max | max | 1/1 | 979.50 | - | - | 351.96 | 67.13 | 200.60 | 46.1 | WARN 1/1 loss |
| latency | process | shm | bytes / 128 B | url: shm://bench/perf_shm?depth=10topology: 1:1 [1p/1s]pattern: fixed | 1000Hz | 1/1 | 0.12 | 17.85 | 29.07 | 8.51 | 0.00 | 100.80 | 40.1 | OK 1/1 |
| latency | process | shm | bytes / 4 KB | url: shm://bench/perf_shm?depth=10topology: 1:1 [1p/1s]pattern: fixed | 1000Hz | 1/1 | 3.91 | 20.04 | 29.48 | 9.52 | 0.00 | 100.84 | 40.1 | OK 1/1 |
| latency | process | shm | bytes / 64 KB | url: shm://bench/perf_shm?depth=10topology: 1:1 [1p/1s]pattern: fixed | 1000Hz | 1/1 | 62.50 | 22.20 | 41.57 | 10.53 | 0.00 | 100.83 | 40.3 | OK 1/1 |
| latency | process | shm | bytes / 512 KB | url: shm://bench/perf_shm?depth=10topology: 1:1 [1p/1s]pattern: fixed | 1000Hz | 1/1 | 500.00 | 43.02 | 61.67 | 24.57 | 0.00 | 100.85 | 42.2 | OK 1/1 |
| latency | process | shm | bytes / 2 MB | url: shm://bench/perf_shm?depth=10topology: 1:1 [1p/1s]pattern: fixed | 1000Hz | 1/1 | 2000.00 | 297.18 | 472.19 | 164.45 | 0.00 | 100.72 | 46.1 | OK 1/1 |
| latency | process | dds | bytes / 128 B | url: dds://bench/perf_dds?qos=bettertopology: 1:1 [1p/1s]pattern: fixed | 1000Hz | 1/1 | 0.12 | 33.81 | 52.31 | 18.58 | 0.00 | 102.35 | 39.5 | OK 1/1 |
| latency | process | dds | bytes / 4 KB | url: dds://bench/perf_dds?qos=bettertopology: 1:1 [1p/1s]pattern: fixed | 1000Hz | 1/1 | 3.91 | 34.27 | 71.99 | 16.54 | 0.00 | 102.39 | 39.6 | OK 1/1 |
| latency | process | dds | bytes / 64 KB | url: dds://bench/perf_dds?qos=bettertopology: 1:1 [1p/1s]pattern: fixed | 1000Hz | 1/1 | 62.50 | 49.60 | 100.33 | 27.52 | 0.00 | 102.89 | 39.9 | OK 1/1 |
| latency | process | dds | bytes / 512 KB | url: dds://bench/perf_dds?qos=bettertopology: 1:1 [1p/1s]pattern: fixed | 1000Hz | 1/1 | 500.00 | 201.65 | 348.89 | 148.23 | 0.00 | 114.65 | 42.0 | OK 1/1 |
| latency | process | dds | bytes / 2 MB | url: dds://bench/perf_dds?qos=bettertopology: 1:1 [1p/1s]pattern: fixed | 1000Hz | 1/1 | 1996.00 | 884.74 | 1041.76 | 750.66 | 0.20 | 155.60 | 47.5 | OK 1/1 |
| latency | process | ddsc | bytes / 128 B | url: ddsc://bench/perf_ddsc?qos=bettertopology: 1:1 [1p/1s]pattern: fixed | 1000Hz | 1/1 | 0.12 | 25.05 | 46.17 | 16.84 | 0.00 | 101.52 | 35.5 | OK 1/1 |
| latency | process | ddsc | bytes / 4 KB | url: ddsc://bench/perf_ddsc?qos=bettertopology: 1:1 [1p/1s]pattern: fixed | 1000Hz | 1/1 | 3.91 | 26.25 | 54.60 | 15.40 | 0.00 | 101.60 | 35.7 | OK 1/1 |
| latency | process | ddsc | bytes / 64 KB | url: ddsc://bench/perf_ddsc?qos=bettertopology: 1:1 [1p/1s]pattern: fixed | 1000Hz | 1/1 | 62.50 | 44.11 | 77.71 | 32.33 | 0.00 | 102.93 | 38.7 | OK 1/1 |
| latency | process | ddsc | bytes / 512 KB | url: ddsc://bench/perf_ddsc?qos=bettertopology: 1:1 [1p/1s]pattern: fixed | 1000Hz | 1/1 | 500.00 | 261.25 | 300.73 | 199.84 | 0.00 | 115.50 | 41.6 | OK 1/1 |
| latency | process | ddsc | bytes / 2 MB | url: ddsc://bench/perf_ddsc?qos=bettertopology: 1:1 [1p/1s]pattern: fixed | 1000Hz | 1/1 | 2000.00 | 1161.94 | 2129.90 | 1078.11 | 0.00 | 171.96 | 57.2 | OK 1/1 |