知识卡片
运行直到完成的单核无锁模型
内容
SPDK把处理线程通过CPU亲和性绑定到固定核心,一个I/O请求从接收到处理完成的整个生命周期都在同一个核上跑完,不会被调度到其他核,这个核上的资源分配也就不需要任何锁——因为同一时刻只有一个执行流在访问这些资源。核间通信则改用事件消息在Reactor之间传递,而不是共享数据结构加锁。这种设计把”用锁保护共享状态”的问题转化成了”让状态天然只属于一个执行流”,代价是需要提前把线程和CPU核一一绑定、且线程一旦分配资源就不能随意跨核迁移。发散:这是”通过消除共享而不是通过更精细的锁来解决并发问题”的直接体现——很多高性能系统面对锁竞争瓶颈时,真正的答案不是发明更快的锁,而是重新设计数据归属关系,让资源天生不需要跨执行流共享。
参考来源
《Linux开源存储全栈详解从Ceph到容器存储》第4章《存储加速》