论文部分内容阅读
传输控制协议(TCP,Transport Control Protocol)是最重要的传输层协议之一,它提供端到端可靠的字节传输服务,被广泛的应用于互联网的各类服务中。然而,近年来,随着网络带宽和用户数量的不断增加,互联网访问量爆炸性增长。基于TCP的各类服务在面对大规模的并发用户访问时,服务器TCP协议栈的性能面临严峻的考验。 本文深入分析了操作系统内核TCP协议栈存在的性能瓶颈。包括内核TCP协议栈由于频繁的系统调用、网卡中断引入的大量上下文切换的开销;内核协议栈没有充分利用多核的并行性,多核扩展性较差;内核TCP协议栈的实现存在多次内存拷贝,影响协议栈的性能。 针对内核TCP协议栈存在的上述问题,本文设计并实现了高性能用户态TCP协议栈Janus。首先,本文在用户态实现TCP协议栈来避免系统调用的开销,并利用Intel DPDK轮询的方式与网卡通信,避免网卡中断带来的上下文切换开销。其次,为了提高协议栈的多核扩展性,本文采用线程的核绑定方式避免线程在不同CPU上调度,同时利用Run to Completion(RTC)并发架构设计了全程无锁的无共享模型,协议栈每个工作线程享有独立的数据,执行同样的任务,线程之间不需要通信。最后,本文设计了一种具有最少拷贝次数的缓存,将内存拷贝次数减少到一次,进一步提高了协议栈的性能。 本文最后对所实现的高性能用户态TCP协议栈Janus进行了性能测试。实验结果表明,Janus协议栈吞吐量比Linux协议栈高411%~857%,最大并发连接数与每秒新建连接数分别是Linux协议栈的40倍和65倍,并且Janus协议栈具有较高的多核扩展性。