评审openeuler中添加一个f-stack包,该包可以用来支持用户态协议栈功能、或是作为http/https服务器的测试服务器。
f-stack简介:腾讯公司商用的一个用户态协议栈。 https://github.com/F-Stack/f-stack 介绍
随着网络接口卡的飞速发展,使用Linux内核处理数据包的不良性能已成为现代网络系统的瓶颈。但是,随着Internet增长的需求不断增长,需要一种性能更高的网络处理解决方案。内核旁路技术已经引起越来越多的关注。有各种类似的技术,例如:DPDK,NETMAP和PF_RING。内核绕过的主要思想是Linux仅用于处理控制流。所有数据流都在用户空间中处理。因此,内核旁路可以避免由于内核数据包复制,线程调度,系统调用和中断引起的性能瓶颈。此外,内核旁路可以通过多重优化方法获得更高的性能。在各种技术中,DPDK已被广泛使用,因为它
F-Stackhttp://www.f-stack.org/?from=github是基于DPDK的开源高性能网络框架,具有以下特征:
1. 网卡在满负载下可以实现的超高网络性能:1000万个并发连接,500万RPS,100万CPS。 2. 移植FreeBSD 11.01用户空间堆栈,它提供了完整的堆栈功能,并削减了大量不相关的功能。这样可以大大提高网络性能。 3. 支持Nginx,Redis和其他成熟的应用程序。服务可以轻松使用F-Stack。 4. 易于通过多进程体系结构进行扩展。 5. 提供微线程接口。具有状态应用程序的各种应用程序可以轻松使用F-Stack获得高性能,而无需处理复杂的异步逻辑。 6. 提供一个Epoll / Kqueue接口,该接口允许多种应用程序轻松使用F-Stack。
历史
为了应对日益严重的DDoS攻击,2012年底,腾讯云DNSPod的授权DNS服务器从千兆以太网切换到10千兆比特。我们面临几种选择:一种是继续使用Linux内核中的原始网络堆栈,另一个是使用内核旁路技术。经过几轮调查;我们最终选择开发基于DPDK的下一代DNS服务器。原因是DPDK提供超高性能,并且将来可以无缝扩展到40G甚至100G NIC。
经过几个月的开发和测试,基于DPDK的高性能DNS服务器DKDNS于2013年10月正式发布。它能够通过单个10GE端口实现多达1100万个QPS,而通过两个10GE端口则能够实现1820万个QPS。然后,我们开发了一个称为F-Stack的用户空间TCP / IP堆栈,该堆栈可通过单个10GE端口处理60万个RPS。
随着腾讯云的快速发展,我们越来越多的服务需要更高的网络访问性能。同时,在我们业务增长的推动下,F-Stack不断改进,并最终发展成为通用的网络访问框架。但是我们最初的TCP / IP堆栈无法满足这些服务的需求。继续开发和维护完整的高性能网络堆栈可能太昂贵了。经过评估几个计划;我们最终决定将FreeBSD的(11.0稳定的)TCP / IP堆栈移植到F-Stack中。这不仅使我们能够停止重新发明轮子,我们还可以利用FreeBSD社区将来将带来的改进。多亏了libplebnethttps://gitorious.org/freebsd/kmm-sandbox/commit/fa8a11970bc0ed092692736f175925766bebf6af?p=freebsd:kmm-sandbox.git;a=tree;f=lib/libplebnet;h=ae446dba0b4f8593b69b339ea667e12d5b709cfb;hb=refs/heads/work/svn_trunk_libplebnet和libuinet,https://github.com/pkelsey/libuinet这项工作变得容易了很多。
随着各种应用程序的快速发展,为了帮助不同的应用程序快速轻松地使用F-Stack,F-Stack集成了Nginx,Redis和其他常用的APP,以及微线程框架,并提供了标准的Epoll / Kqueue界面。
目前,除了DNSPod的授权DNS服务器外,腾讯云中还有多种产品使用了F-Stack,例如HttpDNS(D +),COS访问模块,CDN访问模块等。