知识卡片

Mempool本地缓存规避CAS竞争

专业/工作 · 1109.e

内容

多核同时访问同一个内存池的环形缓存区,每次存取都要靠[[原子操作的本质与CAS]]保证不被其他核并发修改,核数一多CAS竞争本身就会成为瓶颈。DPDK的解法不是把CAS做得更快,而是从根本上减少触发CAS的次数:给每个核分配一块私有本地缓存,大部分申请和释放操作先在本地缓存完成,无需同步;只有本地缓存不够用或要批量补货时,才整批访问共享环形缓冲区,把高频小额操作换成低频大额操作。代价是每个核的本地缓存不可能时刻用满,会有部分内存被闲置浪费。

参考来源

《深入浅出DPDK》第6章《PCIe与包处理I/O》