code wiki / (root) / nx_bench_core_test.nx

nx_bench_core_test.nx source

↩ module page · 172 lines · 6150 B

1// nx_bench_core_test.nx -- KAT for B1 bench harness. 2 3import "nx_syscalls.nx" 4import "nx_etg.nx" 5import "nx_perf_pathology.nx" 6import "nx_bench_core.nx" 7 8func main() -> i64 { 9 let samples_buf: *u8 = sys_mmap(256) 10 let samples: *i64 = samples_buf as *i64 11 let result_buf: *u8 = sys_mmap(128) 12 let result: *NxBenchResult = result_buf as *NxBenchResult 13 let entry_buf: *u8 = sys_mmap(128) 14 let entry: *NxEtgEntry = entry_buf as *NxEtgEntry 15 let signals_buf: *u8 = sys_mmap(256) 16 let signals: *NxPerfSignals = signals_buf as *NxPerfSignals 17 18 // ----- T1 OPTIMAL: median inside band, no waste signals ----- 19 samples[0] = 105; samples[1] = 95; samples[2] = 100 20 samples[3] = 110; samples[4] = 90; samples[5] = 98 21 samples[6] = 102 22 nx_perf_signals_init(signals) 23 signals.cpu_pct = 50 24 signals.mem_bw_pct = 40 25 let rc1: i64 = nx_bench_record_samples( 26 result, entry, samples, 7, 27 80, 120, // band 80..120 ns 28 signals, 29 NX_ETG_PROBE_CPU_SYSCALL, 30 0xDEADBEEF, 1, 12345 31 ) 32 if rc1 != 0 { return 1 } 33 if result.in_band != 1 { return 2 } 34 if result.pathology != NX_PERF_PATH_OPTIMAL { return 3 } 35 if entry.outcome != NX_ETG_OUTCOME_CONFIRMED { return 4 } 36 if result.median_ns != 100 { return 5 } // sorted middle 37 if result.min_ns != 90 { return 6 } 38 if result.max_ns != 110 { return 7 } 39 if result.attestation_hash == 0 { return 8 } 40 41 // ----- T2 BOTTLENECK_CPU: out of band + CPU saturated ----- 42 samples[0] = 500; samples[1] = 450; samples[2] = 480 43 samples[3] = 520; samples[4] = 470 44 nx_perf_signals_init(signals) 45 signals.cpu_pct = 99 46 signals.mem_bw_pct = 10 47 let rc2: i64 = nx_bench_record_samples( 48 result, entry, samples, 5, 49 50, 200, // band 50..200 ns -- way under measured 50 signals, 51 NX_ETG_PROBE_CPU_ISA, 52 0xDEADBEEF, 1, 12345 53 ) 54 if rc2 != 0 { return 20 } 55 if result.in_band != 0 { return 21 } 56 if result.pathology != NX_PERF_PATH_BOTTLENECK_CPU { return 22 } 57 if entry.outcome != NX_ETG_OUTCOME_FALSIFIED { return 23 } 58 59 // ----- T3 LATENCY_SPIKE: tail signal dominates ----- 60 samples[0] = 100; samples[1] = 105; samples[2] = 95 61 samples[3] = 110; samples[4] = 102 62 nx_perf_signals_init(signals) 63 signals.tail_p99_over_p50 = 1500 64 let rc3: i64 = nx_bench_record_samples( 65 result, entry, samples, 5, 66 80, 120, 67 signals, 68 NX_ETG_PROBE_CPU_SYSCALL, 69 0xDEADBEEF, 1, 12345 70 ) 71 if rc3 != 0 { return 30 } 72 if result.pathology != NX_PERF_PATH_LATENCY_SPIKE { return 31 } 73 if entry.outcome != NX_ETG_OUTCOME_FALSIFIED { return 32 } 74 75 // ----- T4 PAYWALL_HONORED: reclamation cardinal pathology ----- 76 samples[0] = 100; samples[1] = 105; samples[2] = 95 77 samples[3] = 110; samples[4] = 102 78 nx_perf_signals_init(signals) 79 signals.paywall_responsive = 1 80 let rc4: i64 = nx_bench_record_samples( 81 result, entry, samples, 5, 82 80, 120, 83 signals, 84 NX_ETG_PROBE_GPU_TENSOR, 85 0xDEADBEEF, 1, 12345 86 ) 87 if rc4 != 0 { return 40 } 88 if result.pathology != NX_PERF_PATH_VENDOR_PAYWALL_HONORED { return 41 } 89 if entry.outcome != NX_ETG_OUTCOME_PAYWALLED_BUT_RESPONSIVE { return 42 } 90 91 // ----- T5 TOO_FEW_SAMPLES error ----- 92 samples[0] = 100; samples[1] = 105 93 nx_perf_signals_init(signals) 94 let rc5: i64 = nx_bench_record_samples( 95 result, entry, samples, 2, // below MIN_MEASURED=3 96 80, 120, 97 signals, 98 NX_ETG_PROBE_CPU_SYSCALL, 99 0xDEADBEEF, 1, 12345 100 ) 101 if rc5 != NX_BENCH_ERR_TOO_FEW_SAMPLES { return 50 } 102 103 // ----- T6 BAD_BAND (lower > upper) ----- 104 samples[0] = 100; samples[1] = 105; samples[2] = 95 105 let rc6: i64 = nx_bench_record_samples( 106 result, entry, samples, 3, 107 200, 100, // inverted band 108 signals, 109 NX_ETG_PROBE_CPU_SYSCALL, 110 0xDEADBEEF, 1, 12345 111 ) 112 if rc6 != NX_BENCH_ERR_BAD_BAND { return 60 } 113 114 // ----- T7 Median + p99 indices on 10-sample run ----- 115 samples[0] = 50; samples[1] = 60; samples[2] = 70 116 samples[3] = 80; samples[4] = 90; samples[5] = 100 117 samples[6] = 110; samples[7] = 120; samples[8] = 130 118 samples[9] = 200 119 nx_perf_signals_init(signals) 120 signals.cpu_pct = 50 121 let rc7: i64 = nx_bench_record_samples( 122 result, entry, samples, 10, 123 50, 200, 124 signals, 125 NX_ETG_PROBE_CPU_SYSCALL, 126 0xDEADBEEF, 1, 12345 127 ) 128 if rc7 != 0 { return 70 } 129 if result.n_measured != 10 { return 71 } 130 if result.min_ns != 50 { return 72 } 131 if result.max_ns != 200 { return 73 } 132 // median index = 10/2 = 5; sorted samples[5] = 100 133 if result.median_ns != 100 { return 74 } 134 // p99 with N<100 collapses to max = 200 135 if result.p99_ns != 200 { return 75 } 136 137 // ----- T8 Attestation deterministic across two identical calls ----- 138 samples[0] = 100; samples[1] = 105; samples[2] = 95 139 samples[3] = 110; samples[4] = 102 140 nx_perf_signals_init(signals) 141 signals.cpu_pct = 50 142 let rc8a: i64 = nx_bench_record_samples( 143 result, entry, samples, 5, 144 80, 120, 145 signals, 146 NX_ETG_PROBE_CPU_SYSCALL, 147 0xCAFEBABE, 1, 99999 148 ) 149 if rc8a != 0 { return 80 } 150 let hash_a: i64 = entry.attestation_hash 151 152 samples[0] = 100; samples[1] = 105; samples[2] = 95 153 samples[3] = 110; samples[4] = 102 154 nx_perf_signals_init(signals) 155 signals.cpu_pct = 50 156 let entry2_buf: *u8 = sys_mmap(128) 157 let entry2: *NxEtgEntry = entry2_buf as *NxEtgEntry 158 let result2_buf: *u8 = sys_mmap(128) 159 let result2: *NxBenchResult = result2_buf as *NxBenchResult 160 let rc8b: i64 = nx_bench_record_samples( 161 result2, entry2, samples, 5, 162 80, 120, 163 signals, 164 NX_ETG_PROBE_CPU_SYSCALL, 165 0xCAFEBABE, 1, 99999 166 ) 167 if rc8b != 0 { return 81 } 168 if entry2.attestation_hash != hash_a { return 82 } 169 if result2.pathology != result.pathology { return 83 } 170 171 return 0 172}