论文部分内容阅读
本文作者介绍了基于代理的用户态TCP/IP协议栈的设计与实现,并使该协议栈针对代理功能进行剪裁和优化,以及在多核处理器上实现性能的线性扩展。代理服务器通常作为数据中心的负载平衡设备,起到对外屏蔽内部网络拓扑结构、负载平衡分发的作用。所以代理服务器的性能对整个数据中心的性能起关键作用。然而在多核处理器上,传统的SocketAPI解决方案中,存在接收端并行度不高、系统内存消耗大等限制。本文中作者绕过SocketAPI设计出一种在用户态上实现的并行化TCP/IP协议栈的方案,并使其针对代理服务器这一应用场景进行优化,解决多核平台上的性能扩展问题。
本文首先介绍相关领域的前人工作以及技术背景,分析在用户态上实现TCP/IP协议栈的优劣、协议栈的并行模型、以及如何实现并发程序在多核处理器上的性能扩展问题。接着,作者介绍了在用户态上实现针对代理功能优化的TCP/IP协议栈的设计框架。共包括两个部分:第一部分,用户态并行化的TCP/IP协议栈。利用TCPSplicing机制以及无锁竞争的TRIE查找树实现针对代理功能定制的TCP/IP协议栈,并完成多核处理器上的性能线性扩展。第二部分,内核态数据包负载平衡分发模块。在Linux内核通过文件系统作为与用户态协议栈交互的接口,并实现接收端的负载分发,保证多核CPU之间的负载平衡。最后,作者给出了在吞吐量、最大并发连接数、单侧连接建立和拆除速率这三个性能指标的测量和分析优化,以及与HAProxy的性能对比数据。HAProxy是一种在用户态上利用SocketAPI实现代理的通用解决方案,来验证作者的设计优化带来的性能提升。
最后性能测量结果证明作者设计的并发程序无锁竞争的解决方案,以及针对代理功能进行剪裁和优化的方案,使该用户态TCP/IP协议栈性能上超过SocketAPI实现的HAProxy。另外,作者还提出了在多核处理器上软件向前兼容性开发的思考。