知识卡片
用户态协议栈按核私有化消除锁竞争
内容
传统内核TCP/IP栈的文件描述符、监听队列是进程全局共享的,多核并发访问不可避免要靠锁保护,核数越多锁竞争越激烈。Libuns和MTCP这类用户态协议栈的共同思路,延续[[NUMA与DPDK的本地化原则]]中per-core memory的思路,是把文件描述符、内存池、收发队列全部按核拆分成私有资源——每个核只处理自己的一份FD和内存池,配合DPDK能把网卡队列绑定到指定核的能力,不同核间从设计上就不存在共享数据,锁自然被去掉。代价是失去灵活性:一个连接一旦绑定到某核,就很难再动态迁移到另一个核处理。
参考来源
《深入浅出DPDK》第15章《基于DPDK的存储软件优化》