First real per-process logs off the stick (the logging track paying for itself): kernel.log showed 16-core bring-up costing 47 s — per-core gaps of 2-21 s — on a machine whose clocksource is the TSC, so every AP runs the pairwise warp check. QEMU always picks HPET, so the harness never executed this path at all. The check was bounded by ITERATIONS: 1<<20 warp ticks, each a locked read-modify-write on a cacheline two cores fight over — microseconds under real contention, not the nanosecond the '~1 ms' comment assumed — and the 1<<32-PAUSE rendezvous 'bound' is ~2 minutes on modern Intel (PAUSE ~140 cycles). Both are now bounded by TIME measured on the TSC itself: ~5 ms of pairwise hammering per core (Linux's check_tsc_warp budget — ample to catch a lagging TSC) and a ~100 ms rendezvous window. |
||
|---|---|---|
| .. | ||
| apic.zig | ||
| cpu.zig | ||
| gdt.zig | ||
| idt.zig | ||
| io.zig | ||
| ioapic.zig | ||
| isr.s | ||
| linker.ld | ||
| paging.zig | ||
| per-cpu.zig | ||
| serial.zig | ||
| smp.zig | ||
| trampoline.s | ||
| tss.zig | ||