io_uring Async I/O

导言

读到 Tutti 的 GPU io_uring 一节时,我几乎完全没看懂。SQ、CQ、IOCB、CUDA Event 和 Green Context 挤在一起,很难看出它们各自解决什么问题。

本文先用取餐叫号解释核心直觉,再用 Linux io_uring 的 SQ、CQ、SQE、CQE 和 SQPOLL 建立准确模型,最后把这些对象放回 Tutti:为什么队列能把发起请求和等待结果拆成两个时间点,以及为什么还需要 CUDA Event、Green Context 和 slack-aware Scheduler 才能真正减少 GPU 停顿。

Read more

Tutti SSD-Backed KV Cache

导言

把 KV Cache 放进 SSD 并不难,难的是让它取回来仍比重新 Prefill 更划算。GPU Direct Storage 已经能让数据绕过 Host DRAM,但每个 I/O 仍由 CPU 发起;Paged KV Cache 又会把一次长前缀恢复拆成海量小而散的请求。SSD 的标称带宽于是还没有用满,GPU 已经先停下来等数据。

Tutti 的核心不是再加一级缓存,而是重写 HBM 与 NVMe 之间的运行时路径:CPU 保留前缀索引和对象映射,却退出逐块 I/O 的数据与控制关键路径;GPU 通过对象化批处理、gio_uring 和 slack-aware 调度直接驱动本地 SSD。读完本文,应该能判断这三部分分别消除了什么瓶颈,以及论文的“接近 DRAM”结论在哪些条件下成立。

Read more