code wiki / _hdl_build / nx_room_simulcast.nx
nx_room_simulcast.nx source
↩ module page · 138 lines · 7172 B
1// nx_room_simulcast.nx -- X-ROOM (GEN-ROOM-simulcast-quality-layers): sovereign
2// DETERMINISTIC INTEGER simulcast layer allocator -- the SENDER-side companion to
3// nx_room_abr (the receiver-side ABR controller). ABR decides which quality layer
4// each receiver PULLS; simulcast decides which layers the sender PRODUCES, given a
5// finite uplink budget and the set of layers receivers actually demand.
6//
7// EXCEED axis vs Zoom/LiveKit/WebRTC simulcast (honest): two deterministic, audit-
8// replayable levers a heuristic encoder leaves on the table --
9// (1) DEMAND-DRIVEN PRUNE: encode ONLY layers some receiver requests; a layer
10// nobody pulls is never encoded = uplink saved (naive simulcast always pushes
11// all spatial layers).
12// (2) BUDGET-BOUNDED SHED: if the demanded layers exceed the uplink budget, shed
13// the highest-bitrate layers FIRST, deterministically, until the encoded set
14// fits -- never over-subscribe the uplink (which a budget-unaware encoder does,
15// causing the very congestion ABR then has to fight).
16//
17// MODEL (bitrates kbps): ladder[] = simulcast layers low->high (DATA, rule 25).
18// demand mask = bit i set iff some receiver requests layer i.
19// allocate: start from the demand mask; while sum(encoded bitrates) > budget, clear
20// the highest set bit (shed) and count it. out[0]=encoded mask, out[1]=encoded kbps,
21// out[2]=shed count. naive baseline = always all layers = sum(ladder).
22//
23// main() is the SELF-VALIDATING GATE. Evidence -> knowledge/status/room_simulcast.log.
24// HONEST SCOPE: this is the produce-set ALLOCATION (prune+shed); per-receiver fallback
25// re-mapping after a shed is a named deeper rung, not claimed here. license_tier: ORIGINAL
26import "nx_syscalls.nx"
27const SIM_MAGIC_1500: i64 = 1500
28const SIM_MAGIC_2150: i64 = 2150
29const SIM_MAGIC_3000: i64 = 3000
30const SIM_MAGIC_2000: i64 = 2000
31const SIM_MAGIC_999999: i64 = 999999
32
33const SIM_LOG: *u8 = "knowledge/status/room_simulcast.log"
34
35func sw(fd: i64, s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(fd, s, n); return 0 }
36func swn(fd: i64, v: i64) -> i64 { let bb: *u8 = sys_mmap(28); var m: i64=v; if m<0 {m=0-m; sys_write(fd,"-" as *u8,1)}; let t: *u8 = sys_mmap(28); var k: i64=0; if m==0 {t[0]=48;k=1}; while m>0 {t[k]=(48+(m%10)) as u8; m=m/10; k=k+1}; var i: i64=0; while i<k {bb[i]=t[k-1-i]; i=i+1}; sys_write(fd, bb, k); return 0 }
37
38// demand bitmask from an array of receiver-requested layer indices.
39func sim_demand_mask(demands: *i64, nrx: i64) -> i64 {
40 var mask: i64 = 0
41 var i: i64 = 0
42 while i < nrx { mask = mask | (1 << demands[i]); i = i + 1 }
43 return mask
44}
45
46// sum of ladder bitrates for the layers set in mask.
47func sim_bitrate(ladder: *i64, n: i64, mask: i64) -> i64 {
48 var sum: i64 = 0
49 var i: i64 = 0
50 while i < n { if (mask & (1 << i)) != 0 { sum = sum + ladder[i] } i = i + 1 }
51 return sum
52}
53
54// highest set layer index in mask over n layers, or -1 if mask empty.
55func sim_top_bit(n: i64, mask: i64) -> i64 {
56 var i: i64 = n - 1
57 while i >= 0 { if (mask & (1 << i)) != 0 { return i } i = i - 1 }
58 return 0 - 1
59}
60
61// allocate within budget. out[0]=encoded mask, out[1]=encoded kbps, out[2]=shed count.
62func sim_allocate(ladder: *i64, n: i64, demand_mask: i64, budget: i64, out: *i64) -> i64 {
63 var mask: i64 = demand_mask
64 var shed: i64 = 0
65 while sim_bitrate(ladder, n, mask) > budget {
66 let top: i64 = sim_top_bit(n, mask)
67 if top < 0 { mask = 0 }
68 else { mask = mask & (0 - 1 - (1 << top)); shed = shed + 1 } // clear bit `top` (= mask & ~(1<<top))
69 }
70 out[0] = mask
71 out[1] = sim_bitrate(ladder, n, mask)
72 out[2] = shed
73 return 0
74}
75
76func main() -> i64 {
77 let ladder: *i64 = sys_mmap(8 * 3) as *i64
78 ladder[0]=150; ladder[1]=500; ladder[2]=SIM_MAGIC_1500 // WebRTC-style 3-layer simulcast
79 let naive: i64 = ladder[0] + ladder[1] + ladder[2] // SIM_MAGIC_2150 = always-encode-all baseline
80 let dem: *i64 = sys_mmap(8 * 8) as *i64
81 let out: *i64 = sys_mmap(8 * 4) as *i64
82 var ok: i64 = 1
83
84 // --- A: 3 receivers each pull a DIFFERENT layer (0,1,2); ample budget -> encode all 3, no savings ---
85 dem[0]=0; dem[1]=1; dem[2]=2
86 let mA: i64 = sim_demand_mask(dem, 3)
87 sim_allocate(ladder, 3, mA, SIM_MAGIC_3000, out)
88 let aMask: i64 = out[0]; let aBr: i64 = out[1]; let aShed: i64 = out[2]
89 if aMask != 7 { ok = 0 } // 0b111
90 if aBr != SIM_MAGIC_2150 { ok = 0 }
91 if (naive - aBr) != 0 { ok = 0 } // all demanded -> no prune savings
92 if aShed != 0 { ok = 0 }
93
94 // --- B: 3 receivers ALL pull the low layer -> PRUNE: encode only L0, big uplink savings ---
95 dem[0]=0; dem[1]=0; dem[2]=0
96 let mB: i64 = sim_demand_mask(dem, 3)
97 sim_allocate(ladder, 3, mB, SIM_MAGIC_3000, out)
98 let bMask: i64 = out[0]; let bBr: i64 = out[1]
99 if bMask != 1 { ok = 0 } // 0b001 only
100 if bBr != 150 { ok = 0 }
101 if (naive - bBr) != SIM_MAGIC_2000 { ok = 0 } // demand-driven prune saves SIM_MAGIC_2000 kbps vs naive-all
102
103 // --- C: receivers want all 3 but budget only funds 700 -> SHED highest (L2) to fit ---
104 dem[0]=0; dem[1]=1; dem[2]=2
105 let mC: i64 = sim_demand_mask(dem, 3)
106 sim_allocate(ladder, 3, mC, 700, out)
107 let cMask: i64 = out[0]; let cBr: i64 = out[1]; let cShed: i64 = out[2]
108 if cMask != 3 { ok = 0 } // 0b011 = L0+L1, L2 shed
109 if cBr != 650 { ok = 0 }
110 if cBr > 700 { ok = 0 } // fits the budget
111 if cShed != 1 { ok = 0 }
112 // neg-control: the naive always-all-layers encoder would push 2150 > 700 = OVER-SUBSCRIBE
113 if naive <= 700 { ok = 0 } // proves the budget pressure is real and naive fails it
114
115 // --- tamper: corrupt L1's bitrate -> scenario A's encoded bitrate MUST diverge ---
116 ladder[1] = SIM_MAGIC_999999
117 sim_allocate(ladder, 3, mA, SIM_MAGIC_3000, out)
118 let tBr: i64 = out[1]
119 if tBr == aBr { ok = 0 }
120
121 sw(1, "ROOMSIMULGATE A_mask=" as *u8); swn(1, aMask); sw(1, " A_br=" as *u8); swn(1, aBr)
122 sw(1, " B_mask=" as *u8); swn(1, bMask); sw(1, " B_savings=" as *u8); swn(1, naive - bBr)
123 sw(1, " C_mask=" as *u8); swn(1, cMask); sw(1, " C_br=" as *u8); swn(1, cBr); sw(1, " C_shed=" as *u8); swn(1, cShed)
124 sw(1, " naive_all=" as *u8); swn(1, naive); sw(1, " tamper_br=" as *u8); swn(1, tBr)
125 if ok == 1 { sw(1, " verdict=GREEN\n" as *u8) } else { sw(1, " verdict=RED\n" as *u8) }
126
127 let lf: i64 = sys_openat_append(SIM_LOG, 420)
128 if lf >= 0 {
129 sw(lf, "ROOMSIMULGATE A_mask=" as *u8); swn(lf, aMask); sw(lf, " A_br=" as *u8); swn(lf, aBr)
130 sw(lf, " B_mask=" as *u8); swn(lf, bMask); sw(lf, " B_savings=" as *u8); swn(lf, naive - bBr)
131 sw(lf, " C_mask=" as *u8); swn(lf, cMask); sw(lf, " C_br=" as *u8); swn(lf, cBr); sw(lf, " C_shed=" as *u8); swn(lf, cShed)
132 sw(lf, " naive_all=" as *u8); swn(lf, naive); sw(lf, " tamper_br=" as *u8); swn(lf, tBr)
133 if ok == 1 { sw(lf, " verdict=GREEN\n" as *u8) } else { sw(lf, " verdict=RED\n" as *u8) }
134 sys_close(lf)
135 }
136 if ok == 1 { sys_exit(0) } else { sys_exit(1) }
137 return 0
138}