File
Blob: firmware/vendor/str0m/docs/bwe-dataflow.dot
| 1 | digraph BWE_DataFlow { |
| 2 | rankdir=LR; |
| 3 | node [shape=box, style=rounded]; |
| 4 | |
| 5 | // External inputs/outputs |
| 6 | TWCC [label="TWCC Feedback\n(from remote)", shape=ellipse, style=filled, fillcolor=lightblue]; |
| 7 | Application [label="Application", shape=ellipse, style=filled, fillcolor=lightblue]; |
| 8 | Network [label="Network\n(packets out)", shape=ellipse, style=filled, fillcolor=lightblue]; |
| 9 | |
| 10 | // Main orchestrator |
| 11 | SSBE [label="SendSide\nBandwidth\nEstimator", style="filled,rounded", fillcolor=gold]; |
| 12 | |
| 13 | // Delay-based path |
| 14 | DC [label="Delay\nController", style=filled, fillcolor=lightcoral]; |
| 15 | AGA [label="Arrival Group\nAccumulator", style=filled, fillcolor=lightyellow]; |
| 16 | TE [label="Trendline\nEstimator", style=filled, fillcolor=lightyellow]; |
| 17 | RC [label="Rate Control\n(AIMD)", style=filled, fillcolor=lightyellow]; |
| 18 | |
| 19 | // Throughput measurement |
| 20 | ABE [label="Acked Bitrate\nEstimator", style=filled, fillcolor=lightcyan]; |
| 21 | |
| 22 | // Loss-based path |
| 23 | LC [label="Loss\nController", style=filled, fillcolor=lightpink]; |
| 24 | |
| 25 | // Probe system |
| 26 | PC [label="Probe\nControl", style=filled, fillcolor=plum]; |
| 27 | PE [label="Probe\nEstimator", style=filled, fillcolor=plum]; |
| 28 | |
| 29 | // ALR system |
| 30 | ALR [label="ALR\nDetector", style=filled, fillcolor=wheat]; |
| 31 | LCE [label="Link Capacity\nEstimator", style=filled, fillcolor=wheat]; |
| 32 | |
| 33 | // Pacer system |
| 34 | Pacer [label="Pacer\n(LeakyBucket +\nProbeClusterState)", style=filled, fillcolor=palegreen]; |
| 35 | PacerCtrl [label="Pacer\nControl", style=filled, fillcolor=palegreen]; |
| 36 | |
| 37 | // Data flows |
| 38 | TWCC -> SSBE [label="TwccSendRecord[]"]; |
| 39 | TWCC -> ABE [label="acked packets"]; |
| 40 | |
| 41 | SSBE -> Application [label="bandwidth estimate", color=blue, penwidth=2]; |
| 42 | SSBE -> PacerCtrl [label="estimate"]; |
| 43 | |
| 44 | // Delay controller internal flow |
| 45 | DC -> AGA [label="acked packets"]; |
| 46 | AGA -> TE [label="InterGroupDelayDelta"]; |
| 47 | TE -> RC [label="BandwidthUsage\n(overuse/normal/underuse)"]; |
| 48 | RC -> DC [label="estimated bitrate"]; |
| 49 | |
| 50 | // Delay controller to main |
| 51 | DC -> SSBE [label="delay estimate", color=red, penwidth=2]; |
| 52 | |
| 53 | // Acked bitrate flows |
| 54 | ABE -> DC [label="instantaneous\nbitrate"]; |
| 55 | ABE -> LC [label="instantaneous\nbitrate"]; |
| 56 | |
| 57 | // Loss controller |
| 58 | LC -> SSBE [label="loss estimate", color=red, penwidth=2]; |
| 59 | TWCC -> LC [label="packet results"]; |
| 60 | |
| 61 | // Probe system flows |
| 62 | PC -> SSBE [label="ProbeClusterConfig"]; |
| 63 | SSBE -> PE [label="start probe\n(ProbeClusterConfig)", color=purple]; |
| 64 | SSBE -> Pacer [label="start probe\n(ProbeClusterConfig)", color=purple]; |
| 65 | Pacer -> SSBE [label="probe complete\n(cluster_id)", color=purple]; |
| 66 | TWCC -> PE [label="TwccSendRecord[]\n(filtered by cluster)", color=purple]; |
| 67 | PE -> SSBE [label="ProbeResult", color=purple, penwidth=2]; |
| 68 | SSBE -> DC [label="probe result"]; |
| 69 | |
| 70 | // ALR system flows |
| 71 | ALR -> PC [label="ALR state\n(start time)"]; |
| 72 | ALR -> LC [label="ALR state\n(start time)"]; |
| 73 | SSBE -> ALR [label="media sent"]; |
| 74 | PE -> LCE [label="ALR probe results", color=orange]; |
| 75 | LCE -> LC [label="capacity estimate", color=orange, penwidth=2]; |
| 76 | |
| 77 | // Pacer control |
| 78 | PacerCtrl -> Pacer [label="pacing_rate\npadding_rate"]; |
| 79 | |
| 80 | // Pacer output |
| 81 | Pacer -> Network [label="paced packets\n(with cluster ID)", color=blue, penwidth=2]; |
| 82 | |
| 83 | // Grouping for visual clarity |
| 84 | subgraph cluster_delay { |
| 85 | label="Delay-Based Estimation"; |
| 86 | style=dashed; |
| 87 | color=darkred; |
| 88 | DC; AGA; TE; RC; |
| 89 | } |
| 90 | |
| 91 | subgraph cluster_probe { |
| 92 | label="Probe System"; |
| 93 | style=dashed; |
| 94 | color=purple; |
| 95 | PC; PE; |
| 96 | } |
| 97 | |
| 98 | subgraph cluster_pacer { |
| 99 | label="Pacing System"; |
| 100 | style=dashed; |
| 101 | color=darkgreen; |
| 102 | Pacer; PacerCtrl; |
| 103 | } |
| 104 | |
| 105 | subgraph cluster_alr { |
| 106 | label="ALR System"; |
| 107 | style=dashed; |
| 108 | color=orange; |
| 109 | ALR; LCE; |
| 110 | } |
| 111 | } |
| 112 |