nx_headroom_gate.nx source
↩ module page · 119 lines · 6900 B
1// nx_headroom_gate.nx -- liar-killed GATE for the spawn-time headroom organ (seq1295). Forks the
2// REAL built elf against FIXTURE /proc files (the organ's path-override args exist for exactly this)
3// and proves the DERIVED MATH exactly: width = min(cap, cores/2, usable/cost), the mem floor refuses,
4// the load ceiling refuses, the gate verb passes/refuses on need_mb, and headroom.conf overrides bind.
5// usage: nx_headroom_gate [elf] Exit 0 on 7/7.
6// license_tier: ORIGINAL expect_exit: 0
7import "nx_syscalls.nx"
8
9const G_OUTCAP: i64 = 16384
10const G_TOTAL: i64 = 7
11
12func g_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
13func g_putn(v: i64) -> i64 {
14 if v == 0 { sys_write(1, "0" as *u8, 1); return 0 }
15 var m: i64 = v
16 let d: *u8 = sys_mmap(24); var k: i64 = 0
17 while m > 0 { d[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
18 let o: *u8 = sys_mmap(24); var w: i64 = 0
19 while w < k { o[w] = d[k-1-w]; w = w + 1 }
20 sys_write(1, o, k)
21 sys_munmap(d, 24); sys_munmap(o, 24)
22 return 0
23}
24func g_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
25func g_bool(name: *u8, got: i64, want: i64, passp: *i64) -> i64 {
26 g_puts("T " as *u8); g_puts(name); g_puts(" got=" as *u8); g_putn(got)
27 if got == want { g_puts(" PASS\n" as *u8); passp[0] = passp[0] + 1 } else { g_puts(" FAIL\n" as *u8) }
28 return 0
29}
30func g_write(path: *u8, s: *u8) -> i64 { let fd: i64 = sys_openat_wr(path, 420); if fd < 0 { return 0 - 1 } sys_write(fd, s, g_slen(s)); sys_close(fd); return 0 }
31func g_has(hay: *u8, hn: i64, needle: *u8) -> i64 {
32 let nl: i64 = g_slen(needle)
33 if nl == 0 { return 0 }
34 var i: i64 = 0
35 while i + nl <= hn { var k: i64 = 0; var ok: i64 = 1; while k < nl { if hay[i+k] != needle[k] { ok = 0; k = nl } k = k + 1 } if ok == 1 { return 1 } i = i + 1 }
36 return 0
37}
38// fork elf with up to 6 args, capture stdout, return byte count.
39func g_run(elf: *u8, a1: *u8, a2: *u8, a3: *u8, a4: *u8, a5: *u8, a6: *u8, out: *u8, cap: i64) -> i64 {
40 let pb: *i64 = sys_mmap(16) as *i64
41 sys_pipe2(pb, 0)
42 let rfd: i64 = pb[0] & 0xFFFFFFFF
43 let wfd: i64 = (pb[0] >> 32) & 0xFFFFFFFF
44 let pid: i64 = sys_fork()
45 if pid == 0 {
46 sys_dup3(wfd, 1, 0)
47 sys_close(rfd); sys_close(wfd)
48 let av: *i64 = sys_mmap(80) as *i64
49 av[0] = elf as i64
50 var ac: i64 = 1
51 if a1 as i64 != 0 { av[ac] = a1 as i64; ac = ac + 1 }
52 if a2 as i64 != 0 { av[ac] = a2 as i64; ac = ac + 1 }
53 if a3 as i64 != 0 { av[ac] = a3 as i64; ac = ac + 1 }
54 if a4 as i64 != 0 { av[ac] = a4 as i64; ac = ac + 1 }
55 if a5 as i64 != 0 { av[ac] = a5 as i64; ac = ac + 1 }
56 if a6 as i64 != 0 { av[ac] = a6 as i64; ac = ac + 1 }
57 av[ac] = 0
58 sys_execve(elf, av, 0 as *i64)
59 sys_exit(127)
60 }
61 sys_close(wfd)
62 var tot: i64 = 0
63 var n: i64 = sys_read(rfd, out, cap - 1)
64 while n > 0 { tot = tot + n; if tot >= cap - 1 { n = 0 } else { n = sys_read(rfd, (out as i64 + tot) as *u8, cap - 1 - tot) } }
65 sys_close(rfd)
66 let st: *i64 = sys_mmap(16) as *i64
67 sys_wait4(pid, st, 0)
68 out[tot] = 0 as u8
69 return tot
70}
71
72func main(argc: i64, argv: *i64) -> i64 {
73 var elf: *u8 = "/tmp/nx_headroom.sov.elf" as *u8
74 if argc >= 2 { elf = argv[1] as *u8 }
75 let pass: *i64 = sys_mmap(16) as *i64
76 pass[0] = 0
77
78 // pin default conf so a stale override can never drift the math teeth
79 g_write("headroom.conf" as *u8, "floor_mb=4096 loadceil_centi_per_core=200\n" as *u8)
80 // fixtures: 8GB avail / load 1.00 / 8 cores + 2GB avail + load 99.00
81 sys_mkdir("/tmp/hrg" as *u8, 0x1ed)
82 g_write("/tmp/hrg/mem8g" as *u8, "MemTotal: 36921296 kB\nMemFree: 9000000 kB\nMemAvailable: 8388608 kB\n" as *u8)
83 g_write("/tmp/hrg/mem2g" as *u8, "MemTotal: 36921296 kB\nMemAvailable: 2097152 kB\n" as *u8)
84 g_write("/tmp/hrg/load1" as *u8, "1.00 0.50 0.10 1/100 999\n" as *u8)
85 g_write("/tmp/hrg/load99" as *u8, "99.00 50.00 20.00 30/635 17621\n" as *u8)
86 g_write("/tmp/hrg/cpu8" as *u8, "processor : 0\nprocessor : 1\nprocessor : 2\nprocessor : 3\nprocessor : 4\nprocessor : 5\nprocessor : 6\nprocessor : 7\n" as *u8)
87
88 let out: *u8 = sys_mmap(G_OUTCAP)
89 var n: i64 = 0
90
91 // T1 exact derived math: usable=8192-4096=4096, /512=8, cores/2=4, cap 16 -> width=4
92 n = g_run(elf, "width" as *u8, "16" as *u8, "512" as *u8, "/tmp/hrg/mem8g" as *u8, "/tmp/hrg/load1" as *u8, "/tmp/hrg/cpu8" as *u8, out, G_OUTCAP)
93 g_bool("width-derived-min-is-cores-half" as *u8, g_has(out, n, "ok width=4 " as *u8), 1, pass)
94 // T2 cap clamps below both
95 n = g_run(elf, "width" as *u8, "2" as *u8, "512" as *u8, "/tmp/hrg/mem8g" as *u8, "/tmp/hrg/load1" as *u8, "/tmp/hrg/cpu8" as *u8, out, G_OUTCAP)
96 g_bool("width-cap-clamps" as *u8, g_has(out, n, "ok width=2 " as *u8), 1, pass)
97 // T3 mem floor refuses (2GB avail < 4096 floor)
98 n = g_run(elf, "width" as *u8, "8" as *u8, "512" as *u8, "/tmp/hrg/mem2g" as *u8, "/tmp/hrg/load1" as *u8, "/tmp/hrg/cpu8" as *u8, out, G_OUTCAP)
99 g_bool("width-mem-floor-refuses" as *u8, g_has(out, n, "REFUSED reason=mem_floor" as *u8), 1, pass)
100 // T4 load ceiling refuses even with free memory (99.00 > 2.00*8)
101 n = g_run(elf, "width" as *u8, "8" as *u8, "512" as *u8, "/tmp/hrg/mem8g" as *u8, "/tmp/hrg/load99" as *u8, "/tmp/hrg/cpu8" as *u8, out, G_OUTCAP)
102 g_bool("width-load-ceiling-refuses" as *u8, g_has(out, n, "REFUSED reason=load_ceiling" as *u8), 1, pass)
103 // T5 gate verb passes a fitting need
104 n = g_run(elf, "gate" as *u8, "100" as *u8, "/tmp/hrg/mem8g" as *u8, "/tmp/hrg/load1" as *u8, "/tmp/hrg/cpu8" as *u8, 0 as *u8, out, G_OUTCAP)
105 g_bool("gate-need-fits" as *u8, g_has(out, n, "ok need_mb=100 " as *u8), 1, pass)
106 // T6 gate verb refuses an oversized need (8000 > usable 4096)
107 n = g_run(elf, "gate" as *u8, "8000" as *u8, "/tmp/hrg/mem8g" as *u8, "/tmp/hrg/load1" as *u8, "/tmp/hrg/cpu8" as *u8, 0 as *u8, out, G_OUTCAP)
108 g_bool("gate-need-refused" as *u8, g_has(out, n, "REFUSED reason=mem_floor" as *u8), 1, pass)
109 // T7 conf override binds: floor 100 makes the 2GB fixture usable (1948/512=3, min cores/2=4, cap 8 -> 3)
110 g_write("headroom.conf" as *u8, "floor_mb=100 loadceil_centi_per_core=200\n" as *u8)
111 n = g_run(elf, "width" as *u8, "8" as *u8, "512" as *u8, "/tmp/hrg/mem2g" as *u8, "/tmp/hrg/load1" as *u8, "/tmp/hrg/cpu8" as *u8, out, G_OUTCAP)
112 g_bool("conf-floor-override-binds" as *u8, g_has(out, n, "ok width=3 " as *u8), 1, pass)
113 g_write("headroom.conf" as *u8, "floor_mb=4096 loadceil_centi_per_core=200\n" as *u8)
114
115 g_puts("HEADROOM-GATE pass=" as *u8); g_putn(pass[0]); g_puts("/7 verdict=" as *u8)
116 if pass[0] == G_TOTAL { g_puts("GREEN\n" as *u8); return 0 }
117 g_puts("RED\n" as *u8)
118 return 1
119}