diff --git a/local/docs/IMPLEMENTATION-MASTER-PLAN.md b/local/docs/IMPLEMENTATION-MASTER-PLAN.md index 6c9b4171..bc9bbb87 100644 --- a/local/docs/IMPLEMENTATION-MASTER-PLAN.md +++ b/local/docs/IMPLEMENTATION-MASTER-PLAN.md @@ -303,7 +303,25 @@ No shared block layer exists. Each storage driver reinvents I/O dispatch. Linux: --- -## 13. Total Effort +## 14. Scheduler & Threading Assessment (2026-05-04) + +### Architecture +- **Kernel**: DWRR scheduler (577 lines), 40 priority levels, per-CPU queues, futex (222 lines) +- **Userspace**: proc manager (2,638 lines), pthread (440 lines), signal delivery via proc scheme +- **IPC bridge**: 3 round-trips for thread creation vs Linux's single clone() syscall + +### Strengths +- DWRR with geometric weights, CPU affinity masks, soft-blocking with monotonic timeout +- Full POSIX process model (PID/PGID/SID, job control, orphan detection) +- Futex with physical-address keys for cross-process synchronization + +### Critical Gaps +1. **PIT-based tick (~148Hz)** — LAPIC timer exists but `setup_timer()` is commented out. Should use Periodic/TscDeadline mode at 1000Hz. +2. **Global CONTEXT_SWITCH_LOCK** — spinlock serializes all context switches across CPUs. Should be per-CPU. +3. **No load balancing** — idle CPUs don't steal work from busy CPUs +4. **No RT scheduling** — missing FIFO/RR/Deadline classes +5. **No cgroups** — no CPU bandwidth control or resource limits +6. **Thread creation latency** — 3 IPC hops vs single clone() | Tier | Duration | |------|----------|