Skip to content
File

Blob: firmware/vendor/str0m/docs/bwe-dataflow.dot

3.8 KB
1digraph 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