本文是将知乎网友的提问 《如何评价腾讯开源的基于 DPDK 和 BSD 协议栈的网络框架 f-stack?》,将回答讨论内容和我们的一些想法进行了整理。...与Seastar的对比 相同 F-Stack和Seastar都是基本完整的网络编程框架,包含了DPDK网络I/O模块、用户态协议栈、异步编程接口等整个系统共用户接入使用。...F-Stack使用纯C开发(部分第三方组件使用了C++,F-Stack进行了封装),容易上手;Seastar使用了C++14,Future-Promise, Shared-nothing,message-passing...F-Stack的协议栈移植自FreeBSD 11.0,功能完善但也冗余(去除了部分模块未编译进F-Stack),调试分析工具完善,运行稳定;Seastar按照RFC协议自研协议栈,更精简,但外网运行不稳定...A:目前版本的F-Stack单核性能比内核协议栈高20-50%左右,多核优势更明显,后续会持续进行优化。
本文主要介绍F-Stack发包方向上当前的零拷贝处理方案、效果和应用场景的选择,发包方向上的数据拷贝目前主要为两个阶段,一是协议栈数据拷贝到DPDK的rte_mbuf中,二是应用层调用socket发送接口时会将数据从应用层拷贝到...协议栈到DPDK 该过程的零拷贝实现由 @jinhao2 提交的Pull Request #364 合并到F-Stack主线中,相关实现细节可以参考相关代码,这里仅对实现方案进行简要介绍。...使用方式及注意事项 使用方式 该功能默认并未开启,需要通过在lib/Makefile中打开编译选项FF_USE_PAGE_ARRAY,并重新编译F-Stack lib 库和应用程序后才能生效。...使用方式及注意事项 使用方式 该功能默认并未开启,需要通过在lib/Makefile中打开编译选项FF_ZC_SEND,并重新编译F-Stack lib 库和应用程序后才能生效。
F-Stack 1.20 将于 2019Q3 发布, 同步 Roadmap。...支持 IPv6 F-Stack 框架支持 IPv6。 ifconfig、route、netstat 工具支持 IPv6 相关配置。 支持ICMPv6(NUD和MLD), 不支持DHCPv6。...zhanghaisen, AdamYYan, mscbg, boat0, xklllll, acerlawson, rmkm, yumm007, vanlink等提交的 PR,也欢迎更多朋友参与到 F-Stack
image.png] KNI介绍 KNI(Kernel NIC Interface)内核网卡接口,是DPDK中用于与内核通信的模块,在主要的业务流程中可能并不需要,但在部分场景下,如服务器所有网卡都被F-Stack...KNI配置 因为开启KNI将对收到所有的数据包按转发策略进行检查,会对性能造成一定的影响,所以在F-Stack中默认配置关闭了KNI选项,如有需要可以在控制文件config.ini中修改配置开启KNI并设置转发规则...当method参数设置为reject时,默认素有的数据包都通过KNI转发至系统内核,只将tcp_port/udp_port参数指定的端口号的数据包交由F-Stack处理。...IP地址、掩码、MAC地址、路由表等信息才能正常完成F-Stack和内核间的数据交互。...【注意】 如果系统中没有额外的管理网卡,配置虚拟网卡地址的操作需通过执行脚本等方式与F-Stack应用程序一同启动,示例如下。 .
限于 Vlan 测试环境的缺失, F-Stack 项目初期未对 Vlan 进行完全的支持,仅支持配置是否进行 Vlan 的硬件卸载,当交换机配置了服务器返回的包无需打 Vlan tag...本文将简单介绍 F-Stack 支持 Vlan 所做的修改,如何使用以及相关注意事项。...F-Stack 如何支持 Vlan 以下所列为 F-Stack 支持 Vlan 所进行的修改,具体改动细节可查看 github 相关 commits。...F-Stack 框架支持 在 ff_veth.c中增加胶水函数ff_mbuf_set_vlan_info用于将在开启vlan_strip选项时将 DPDK mbuf 中的 vlan tci 信息传递给...工具支持 原有 ifconfig等工具已经支持 Vlan 配置,无需修改 F-Stack 如何使用 Vlan 下面给出 F-Stack 和 KNI 分别配置 Vlan 的命令参考,供参考并根据自己的网络情况实际进行配置
当网卡支持发包校验和卸载时,F-Stack正常总是开启该功能,一般不需要修改。...,F-Stack目前暂未支持中断模式。...`alltoff,所有数据包转发到F-Stack协议栈。...其他协议栈选项 根据F-Stack调优过的协议栈选项,无特殊需求一般无需修改,相关限制数值都为进程级,非全局限制,因为F-Stack每个进程启动了一个独立的协议栈。...部分参数值设置错误可能导致F-Stack进程的协议栈异常,如部分参数值要求必须为2的N次幂。
Q2:在Windows上解压F-Stack后传到linux上进行编译,编译失败?...A3:如果不需要使用这个网卡管理服务器,启动F-Stack的应用就可以了,然后 F-Stack里的 dpdk 会启动网卡并接收处理包的;如果还需要这个网卡管理服务器,还需要在配置文件中开启kni功能,启动...F-Stack后,还需要在系统上启动虚拟网卡.具体过程可以参照github的文档:https://github.com/F-Stack/f-stack/blob/master/doc/Launch_F-Stack_on_AWS_EC2..._in_one_minute.md Q4:F-Stack是否有移植ipfw的计划?...F-Stack的开源会持续进行下去,但是特性和功能的开发肯定优先内部项目的需求,F-Stack欢迎所有人的参与,无论是建议还是贡献代码。 Q9:请问一下发送端零拷贝怎么实现呢?
F-Stack 1.22 & 1.21.2(LTS) 版本已发布,其中1.22的最重要变化有以下两个:1....2022.09 F-Stack v1.22 1. FreeBSD Upgrade to FreeBSD-releng-13.0, support RACK and BBR. 2....F-Stack lib Support extra tcp stacks, RACK and BBR....F-Stack support HPTS for RACK and BBR. lo port is added 127.0.0.1 when freebsd init. Fix #643....@FidaullahNoonari-emumba Added F-Stack FreeBSD 13.0 support.
F-Stack是一个全用户态的高性能的网络接入开发包,基于DPDK、FreeBSD协议栈、微线程接口等,适用于各种需要网络接入的业务,用户只需要关注业务逻辑,简单的接入F-Stack即可实现高性能的网络服务器...F-Stack中使用的FreeBSD协议栈的高性能异步事件通知的API是kqueue,而Linux系统上则是我们熟悉的epoll,大量的Linux网络server都是基于epoll事件通知机制,为降低已有服务器接入...F-Stack的修改难度,F-Stack协议栈实现了把kqueue封装为epoll接口,提供的API如下: int ff_epoll_create(int size):创建epoll fd,底层实际调用...F-Stack 的 github 主页源代码:https://github.com/F-Stack/f-stack
F-Stack接管用于业务(或服务器本身只有单网卡),其他如SSH登录管理等数据等就必须开启KNI来与内核进行数据交互。...当method参数设置为reject时,默认素有的数据包都通过KNI转发至系统内核,只将tcp_port/udp_port参数指定的端口号的数据包交由F-Stack处理。...IP地址、掩码、MAC地址、路由表等信息才能正常完成F-Stack和内核间的数据交互。...【注意】 如果系统中没有额外的管理网卡,配置虚拟网卡地址的操作需通过执行脚本等方式与F-Stack应用程序一同启动,示例如下。 ....KNI创建的虚拟网卡和F-Stack中的用户态协议栈公用同一个网卡收发数据,所以KNI虚拟网卡的网络配置要跟FreeBSD协议的配置相同。 2.
F-Stack在峰会进行了《F-Stack, a full user space network service on DPDK》的主题分享,介绍了F-Stack的由来、技术架构和实现,以及在腾讯云COS...腾讯云在业务在快速发展中面临大量的L7接入服务,亟需提升接入层性能以节省服务器资源和应对DDoS攻击,所以开发了基于DPDK、FreeBSD协议栈的网络开发套件F-Stack,并提供了协程和类POSIX...接着介绍了F-Stack总体架构和各个模块所做的一些工作,如为什么选择FreeBSD协议栈、FreeBSD协议栈移植到linux用户态所做的工作、类POSIX接口和协程接口的实现、网络工具的移植等。...F-Stack PPT下载地址: https://dpdksummit.com/Archive/pdf/2017Asia/DPDK-China2017-Wang-FStack.pdf F-Stack 视频资料地址
F-Stack是一个全用户态的高性能的网络接入开发包,基于DPDK、FreeBSD协议栈、微线程接口等,适用于各种需要网络接入的业务,用户只需要关注业务逻辑,简单的接入F-Stack即可实现高性能的网络服务器...F-Stack中使用的FreeBSD协议栈的高性能异步事件通知的API是kqueue,而Linux系统上则是我们熟悉的epoll,大量的Linux网络server都是基于epoll事件通知机制,为降低已有服务器接入...F-Stack的修改难度,F-Stack协议栈实现了把kqueue封装为epoll接口,提供的API如下:: int ff_epoll_create(int size): 创建epoll fd,底层实际调用....events); } } } } 实际运行结果: [1496324816398_3590_1496324816718.png] 更多具体信息请访问F-Stack
一、F-Stack介绍及技术特点 F-Stack是一个全用户态的高性能的网络接入开发包,基于DPDK、FreeBSD协议栈、微线程接口等,用户只需要关注业务逻辑,简单的接入F-Stack即可实现高性能的网络服务器...那对于F-Stack都有哪些技术特点呢?接下来将继续介绍。...微线程框架使用了同为腾讯开源的MSEC中的一部分micro_thread,需要特别注意的是微线程模块的开源协议是GPL-2.0,并不是F-Stack主要的必须核心模块,对F-Stack主体开源协议并无影响...(八)F-Stack发展历史 目前对外开源的F-Stack已经是3.0版本,1.0版本是12-13年DNSPod的权威DNS选用DPDK来提升性能时候,是一个简易的用户态TCP协议栈用来支持TCP DNS...三、F-Stack实践案例 F-Stack自从开源后获得了全球大量研究机构、高校、公司的肯定,用于进行技术研究工作或线上商业化项目,那在这里会给大家仅列举F-Stack用户实际现网业务的实践案例。
F-Stack介绍及技术特点 F-Stack是一个全用户态的高性能的网络接入开发包,基于DPDK、FreeBSD协议栈、微线程接口等,用户只需要关注业务逻辑,简单的接入F-Stack即可实现高性能的网络服务器...那对于F-Stack都有哪些技术特点呢?接下来将继续介绍。...FreeBSD 协议栈 F-Stack对于选用FreeBSD协议栈进行用户态移植,背后其实是有过很多的思考和尝试的,此处仅列觉几个FreeBSD协议栈的优点,更多信息可以通过后面的 F-Stack 背景故事进行了解...F-Stack 发展历史 目前对外开源的 F-Stack已经是3.0版本,1.0版本是12-13年 DNSPod的权威 DNS 选用 DPDK 来提升性能时候,是一个简易的用户态 TCP 协议栈用来支持...F-Stack实践案例 F-Stack 自从开源后获得了全球大量研究机构、高校、公司的肯定,用于进行技术研究工作或线上商业化项目,那在这里会给大家仅列举 F-Stack 用户实际现网业务的实践案例。
F-Stack 提供了一个低门槛、高性能、完整协议栈能力的网络服务器解决方案,F-Stack 使用 Intel DPDK 开发套件提高网络收发包性能,移植 FreeBSD 协议栈至用户态,提供了 Posix...名词解释 F-Stack:F-Stack是一个全用户态的高性能的网络接入开发包,基于DPDK、FreeBSD协议栈、微线程接口等,适用于各种需要网络接入的业务,用户只需要关注业务逻辑,简单的接入F-Stack...在接入 F-Stack 之后,性能可以达到百万 TPS,F-Stack 使用了多进程的架构,每个进程有单独的协议栈,无资源共享和竞争,虽然单进程协议栈提升并不明显(约20%-50%),但是整体系统性能有了质的提升...下图为 F-Stack 上进行短连接的 HTTP TPS 测试数据。...但是 F-Stack 此时依然有其实用价值,因为 F-Stack 除了多进程对共享资源的优化外,全用户态的协议栈同时也对锁竞争、内存拷贝、中断处理、上下文切换等进行了优化,能够消耗更少的资源达到相同的性能表现
,简单的接入 F-Stack 即可实现高性能的网络服务器。...git clone https://github.com/F-Stack/f-stack.git /data/f-stack # Compile DPDK cd /data/f-stack/dpdk...}/" -i /data/f-stack/config.ini # enable kni sed "s/#\[kni\]/\[kni\]/" -i /data/f-stack/config.ini sed...=1/" -i /data/f-stack/config.ini # Compile F-Stack lib export FF_PATH=/data/f-stack export FF_DPDK=.../data/f-stack/dpdk/build cd /data/f-stack/lib make # Compile Nginx cd ..
FreeBSD 13.0 正式版在 4 月份发布,正式支持了 BBR,我们在 7 月底开始进行 FreeBSD 13.0 的升级工作,用了2个周的空闲时间进行了 lib 库的基本移植,但是后续个人大量精力投入了 F-Stack...目前相关代码还未完成全部调试和测试,还存在一些问题,已知的包括: F-Stack lib 库的 NETGRAPH 和 IPFW 的还不能编译使用,需要修改。 IPv6 尚未进行更多测试。
Q1:请问再视频领域,媒体服务器,使用F-Stack是否合适? A1:F-Stack在纯推流的模式上是支持且合适的,如果有转码服务等计算密集型服务,需要等我们支持中断+轮询模式之后更合适。...Q2:请问,安装F-Stack对网卡有没有要求?...Q7:现在F-Stack的宿主程序是独占网卡吗? A1:F-Stack启动后就会接管并独占网卡,但可以通过KNI与内核通信。...Q8:如果在F-Stack的IP层要支持IPSec,有什么建议吗? A8:F-Stack使用的FreeBSD协议栈包含IPSec模块,但当前尚未编译进F-Stack,后续将会支持。...Q11:请问一下,F-Stack 的文档中好像没有提到 UDP 的 QPS,实际应用中 DNS SERVER 使用 F-Stack 能达到多大的 QPS 呢,测试配置任何?
A1:F-Stack暂时只支持轮询模式,后续会支持中断+轮询模式,避免与计算密集型业务抢占CPU及节省能源。 Q2:F-Stack如何实现zerco copy?...Q3:F-Stack的运行环境有何要求? A3:目前F-Stack主要测试过的运行环境如下。...Q7:方便透露下F-Stack的业务场景吗? A7:F-Stack的主要业务场景就是高性能的网络接入服务,尤其是L4/L7的网络业务可以快速使用F-Stack获得更高的网络性能。...Q10:F-Stack跑起来是那种cpu 100%模式吗? A10:是的,F-Stack当前只支持轮询模式,后续会支持中断+轮询模式。...Q12:F-Stack只支持Linux系统吗,为什么F-Stack不做到FreeBSD系统上,工作量应该比在Linux上做小?
领取专属 10元无门槛券
手把手带您无忧上云