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, latency, 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% — P95/P99 tail latency, payload-weighted geometric mean across cases. Lower latency → higher score.
- 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), payload-weighted from 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 86total 118conf high
shm://cross-process⚡ Latency score 100📦 Throughput score 100🔋 Resource score 100🎯 Coverage score 100📦 Delivery score 100🔒 Send-block score 86total 118conf highshm://shm://bench/perf_shm?depth=10#2dds://cross-process⚡ Latency score 73📦 Throughput score 91🔋 Resource score 36🎯 Coverage score 100📦 Delivery score 83🔒 Send-block score 30total 85conf noisy⚠ Loss 18.546%
dds://cross-process⚡ Latency score 73📦 Throughput score 91🔋 Resource score 36🎯 Coverage score 100📦 Delivery score 83🔒 Send-block score 30total 85conf noisy⚠ Loss 18.546%dds://dds://bench/perf_dds?qos=better#3ddsc://cross-process⚡ Latency score 65📦 Throughput score 76🔋 Resource score 30🎯 Coverage score 100📦 Delivery score 96🔒 Send-block score 28total 79conf noisy⚠ Loss 73.471%
ddsc://cross-process⚡ Latency score 65📦 Throughput score 76🔋 Resource score 30🎯 Coverage score 100📦 Delivery score 96🔒 Send-block score 28total 79conf noisy⚠ Loss 73.471%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 and scoring 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 | 3 | 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 | 11085.88 | 19.12 |
dds | dds://bench/perf_dds?qos=better | process | 7 | 1 | 0 | 1462.50 | 56.75 |
ddsc | ddsc://bench/perf_ddsc?qos=better | process | 5 | 3 | 0 | 1066.90 | 33.76 |
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 / 256 KB | url: ddsc://bench/perf_ddsc?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 | process | ddsc | bytes / 2 MB | url: ddsc://bench/perf_ddsc?qos=bettertopology: 1:1 [1p/1s]pattern: fixed | 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.9 | 5/5 case(s), 100.0% repeat success, 1 url(s) | Lowest latency: P95 132.66 us, P99 145.52 us, P99.9 165.53 us, P99.99 172.15 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 8792.82 MB/s, first message 0.74 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 tail latency such as P99, with small checks for max latency, jitter, throughput, and health. | Latency tests mainly use percentiles. The heatmap visualises P50 (typical) / P90 (slower common case) / P99 (tail), and scoring also weights P99.9 / P99.99 to penalize rare stalls. Lower numbers are better. | Useful for checking whether messages respond quickly and whether slow-message latency stays controlled. Averages can look good while P99/P99.9 still reveals user-visible 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 | 4 KBshm://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.9 | 5/5 | 100.0% repeat | 513.31 | 132.66 | - | 41.5 |
dds | process | dds://bench/perf_dds?qos=better | latency | 60.4 | 5/5 | 100.0% repeat | 323.91 | 561.26 | - | 41.6 |
ddsc | process | ddsc://bench/perf_ddsc?qos=better | latency | 56.8 | 5/5 | 100.0% repeat | 376.51 | 546.95 | 20.996 | 41.1 |
shm | process | shm://bench/perf_shm?depth=10 | throughput | 100.0 | 3/3 | 100.0% repeat | 8792.82 | - | - | 44.9 |
dds | process | dds://bench/perf_dds?qos=better | throughput | 90.7 | 3/3 | 100.0% repeat | 1193.72 | - | 18.546 | 42.0 |
ddsc | process | ddsc://bench/perf_ddsc?qos=better | throughput | 86.0 | 3/3 | 100.0% repeat | 905.92 | - | 73.471 | 41.0 |
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 | 5477.59 | - | - | 3.76 | 0.00 | 197.21 | 46.8 | 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 | 11085.88 | - | - | 24.51 | 0.00 | 146.25 | 42.7 | 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 | 9815.00 | - | - | 76.08 | 0.00 | 117.72 | 45.1 | 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 | 1097.79 | - | - | 24.62 | 18.55 | 234.05 | 40.8 | 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 | 1020.88 | - | - | 282.65 | 0.02 | 149.98 | 40.8 | 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 | 1462.50 | - | - | 798.17 | 0.27 | 158.89 | 44.5 | 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 | 1066.90 | - | - | 33.94 | 0.00 | 226.98 | 38.0 | 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 | 1202.38 | - | - | 239.98 | 27.10 | 208.17 | 38.5 | WARN 1/1 loss |
| throughput | process | ddsc | bytes / 1 MB | url: ddsc://bench/perf_ddsc?qos=bettertopology: 1:1 [1p/1s]pattern: max | max | 1/1 | 448.50 | - | - | 650.94 | 73.47 | 200.47 | 46.5 | 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 | 24.50 | 46.28 | 10.59 | 0.00 | 101.35 | 39.9 | 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 | 19.12 | 44.20 | 8.95 | 0.00 | 101.11 | 40.0 | 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.85 | 41.40 | 13.20 | 0.00 | 101.11 | 40.1 | 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 | 80.59 | 105.07 | 47.18 | 0.00 | 101.78 | 41.9 | 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 | 516.25 | 590.71 | 152.72 | 0.00 | 101.29 | 45.8 | 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 | 56.75 | 77.56 | 30.54 | 0.00 | 104.23 | 39.3 | 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 | 59.58 | 86.72 | 31.65 | 0.00 | 104.26 | 39.4 | 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 | 79.03 | 116.27 | 49.41 | 0.00 | 105.20 | 39.8 | 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 | 461.33 | 504.33 | 444.11 | 0.00 | 121.29 | 42.1 | 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 | 1053.00 | 2149.60 | 2329.71 | 1601.02 | 0.00 | 141.17 | 47.2 | 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 | 33.76 | 60.25 | 22.75 | 0.00 | 102.95 | 35.0 | 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 | 36.27 | 53.04 | 26.18 | 0.00 | 103.13 | 35.2 | 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 | 78.09 | 111.48 | 68.11 | 0.00 | 105.18 | 38.1 | 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 | 672.09 | 852.57 | 517.46 | 0.00 | 135.65 | 41.2 | 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 | 1316.00 | 1914.53 | 2650.54 | 1538.90 | 21.00 | 177.64 | 55.9 | WARN 1/1 loss |