知识卡片

蓄流机制通过延迟合并减少锁竞争

专业/工作 · 551.i

内容

如果每个进程发出的I/O都直接访问全局唯一的请求队列,这个队列会变成严重的锁瓶颈。Linux块层给每个进程配一个私有的Plug队列:I/O请求先在本地队列里做”蓄流”,尝试和已有请求合并(比如4次分散的写请求经过合并变成3个甚至更少的request),等到”泄流”的那一刻才批量汇入全局的电梯调度队列。这就像多位老师招生时先让学生排在各自的队伍里,等人数攒够了再统一汇总登记,而不是每来一个学生都去抢同一个登记簿。发散:这是”先在本地攒批、再统一提交”这一通用并发优化模式的具体实现,数据库的批量写入、消息队列的批量发送本质上都是同一个套路——用局部缓冲把高频的全局竞争,摊薄成低频的批量操作。

参考来源

《Linux开源存储全栈详解从Ceph到容器存储》第3章《Linux存储栈》