Linux 可以在 RTX Spark 笔记本上双启动并使用 GPU 加速,但原生 Linux 在插电时会严重降速:GPU 时钟锁定在约 780 MHz,而 Windows 上约 2.2 GHz,因为 Windows 专用的 Nvidia Platform Controllers and Framework 管理 CPU/GPU 功率共享,且其加密的固件功率表 Linux 无法读取。在 GPT-OSS-120B 上,Windows 和 WSL 达到约 65 tokens/sec,DGX Spark 约 61,而原生 Linux 仅约 13.9。使用电池时,Linux 性能与 Windows 更接近。内存分配也是障碍:固件默认为 GPU 保留 96 GB,且只能在 Windows 中调整。WSL 目前是实用选项,因为它使用 Windows 的驱动栈,运行 Linux AI 工具时仍保持完整 GPU 加速。完整修复需要 Nvidia 将平台控制器的功耗管理逻辑移植到 Linux。
这篇文章追溯了 Unix 内存分配的历史。在 V4 中,程序使用简单的线性 `alloc`,对齐大小,用 `sbrk` 扩展堆,从不释放内存,从而避免 NULL 检查。Dennis Ritchie 的 `malloc`/`mfree` 在显式区域(如 `coremap` 和 `swapmap`)上操作,传入映射和大小;这支持了分区和合并。V6 的 `diff` 线性分配器可通过重置指针回滚。V7 引入了 `ALLOC` 宏;V8 有 `new()` 宏和 `tryalloc`,同时也使用更熟悉的 `malloc`/`free`。作者将 C++ 的 `new` 与 Simula 联系起来,尽管 Stroustrup 也承认了 Simula。随着时间推移,Unix 逐渐远离显式区域和规范的分配,可能是因为程序生命周期简单、内存有限、硬件约束以及希望接口更简单;出现了一些如 `galloc` 和 GC 提示的工具。作者认为好的想法被遗失,而 C 的速度需要编译器付出努力。