专栏首页F-Stack的专栏F-Stack Q&A 第三期

F-Stack Q&A 第三期

Q1:如果在一个阻塞型的socket上执行recv,会不会把相应的线程卡死,调用recv时该socket中没有数据包,导致sleep,sleep导致该线程没办法进行收包的过程,感觉会死锁了?

A1:F-Stack中的socket接口在不设置nonblock确实会卡死。如有需要可以使用异步编程接口kqueue/epoll或微线程接口。

Q2:在Windows上解压F-Stack后传到linux上进行编译,编译失败?

A2:Windows将 lib/include/machine 软链接转换成了文件,需要重新做下软链接至 amd64/include/。

Q3:接管网卡之后,怎么把接管的网卡跑起来?

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的计划?

A4:有计划,八月份开始,先移植netgraph,再移植ipfw。

Q5:F-Stack 的ff_run回调的loop 内可以有while 循环么,今天试了下怎么感觉不行呢?

A5:Yes,but you should yield to give control back to fstack。

Q6:在使用F-Stack库时,其他线程为什么不能调用ff_sendto函数,有什么解决办法吗?

A6:F-Stack使用了单进程单线程模型,只能在dpdk线程里使用,如果是自己起的线程,调用这些函数会因为curthread为null而挂掉,其他线程可以处理非网络io的事。

Q7:我们开发的高性能服务器DNS,如何做负载?通常用lvs还是用OSPF?

A7:根据业务场景可以选择一种或结合使用,对DNS这种无状态的业务,可以直接用OSPF,业界使用的也比较多。

Q8:F-Stack后续演进路线是啥样的,功能和后续的性能有什么计划吗?会做为一个开源的产品持续下去吗?还是以内部项目驱动进行?我们是否可以参与?

A8:F-Stack定位就是全用户态的网络开发套件,主要路线就是在尽量保持高性能的基础上提供更容易使用、开发和调试的接口和工具,当前正在进行的是nginx reload修改和其他工具如cpu-useage、mbuf-usage等的支持,后续会进行netgraph(ipfw)的移植、零拷贝的支持以及之前语言接口的支持,具体可以查看公众号中的F-Stack发展规划。

F-Stack的开源会持续进行下去,但是特性和功能的开发肯定优先内部项目的需求,F-Stack欢迎所有人的参与,无论是建议还是贡献代码。

Q9:请问一下发送端零拷贝怎么实现呢?

A9:应用层和协议栈之间的数据拷贝比较难去除,协议栈的发包零拷贝方案直接从mbuf分配对协议栈改动太大,不利于后续社区的跟进,不是我们考虑的方向,主要是考虑发包的时候申请个mbuf,把buf_addr和phys_addr改成数据对应的地址,来实现无拷贝,然后数据的虚拟地址和物理地址的对应关系必须能直接查出来,数据的地址会进行指针偏移,加头等操作。

Q10:目前F-Stack支不支持用pipe()获取file descriptor然后加入到epoll的file descriptor?(有没有ff_pipe()类似的?)

A10:文件描述符目前还不支持加到ff_epoll中,有考虑方案后续去进行支持,记录不同fd是网络还是文件的,走不同的处理。

Q11:如何评价HttpDNS业务使用F-Stack优化到了单机85万QPS,做了哪些优化?[原文链接](https://www.zhihu.com/question/59779624/answer/207732908)

A11:后续会向业务方约稿来进行详细介绍,目前主要做的优化是:

1. 使用F-Stack代替系统协议栈,Intel 82599/X540 10G网卡有16个物理队列,启动16个进程性能达到了52万QPS,主要是多进程模式去除了系统协议栈的资源共享、pcb表锁等带来的提升。

2.HttpDNS业务是短连接,性能瓶颈不是包转发,而是协议栈的连接处理和业务逻辑,将F-Stack的默认的RSS模式修改为pipe +run-to-complite模式后,不再受16个网卡队列的限制,可以启动更多的进程来处理连接和业务,最终单机性能提升到85万QPS。

3.HttpDNS业务包含部分代理转发的查询过程,如果去掉可以达到单机96万QPS的性能。

Q12:我原来的程序是多线程模型的,要迁移到 F-Stack 上,必须得改成多进程模型,弄下来工作量还挺大的,主要的麻烦和改动是共享内存,原来可以直接访问的,现在还要 shm 包起来。然后就是有些动态内存分配,所以直接把 ngx_slab 给移植过来做分配器了,我现在是有一对元数据表需要多个进程共享的, 如果每个进程都存一份,内存占用可能比较大。进程读和元数据更新做到了完全无锁(读写锁也没有的),这个有什么其他的解决办法吗?

A12:单线程跑,开多个实例;要线性扩展,架构上就要share nothing,否则一直蛋疼。如果性能上能接受,把数据服务化是比较整齐的方式。如果一定要追求极致的性能,多hack一下也无妨。

Q13:基于dpdk写了一个程序,包含rte_ethdev.h编译时出现 rte_memcpy.h error: mm_alignr_epi 在此作用域尚未声明。不知道Makefile还需要添加哪些选项能编译过。

A13: 需要在编译选项中增加CPU指令集:-march=native。

本文分享自微信公众号 - FStack(F-Stack),作者:F-Stack

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-08-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • F-Stack Q&A 第二期

    Q1:请问再视频领域,媒体服务器,使用F-Stack是否合适? A1:F-Stack在纯推流的模式上是支持且合适的,如果有转码服务等计算密集型服务,需要等我们支...

    F-Stack
  • F-Stack Q&A 第一期

    Q1:F-Stack有中断模式吗,有计划支持吗?在计算密集型的应用中,轮询模式会占用更多的CPU资源? A1:F-Stack暂时只支持轮询模式,后续会支持中断+...

    F-Stack
  • 腾讯极客挑战赛丨来自冠军选手的解题思路

    各位爱挑战爱学习的coder们,第三期极客挑战赛的解题思路来啦!(原赛题传送门:腾讯极客挑战赛邀你“码上种树”)

    腾讯极客挑战赛
  • VM技术(二)从CHIP8入手CPU的模拟(一)

    CHIP8 CPU https://gitee.com/Luciferearth/EasyVGM/blob/master/modules/CHIP8/ 显示器 ...

    Pulsar-V
  • Scalaz(34)- Free :算法-Interpretation

    我们说过自由数据结构(free structures)是表达数据类型的最简单结构。List[A]是个数据结构,它是生成A类型Monoid的最简单结构,因为我们...

    用户1150956
  • Pushdown Automata Introduction

    A pushdown automaton is a way to implement a context-free grammar in a similar w...

    Steve Wang
  • Python深度遍历、广度遍历、递归函数遍历目录【详细讲解】

    Python通过os模块可以实现对文件或者目录的遍历,这里想实现这样的效果有三种方法,分别是递归函数遍历目录,栈深度遍历和队列广度遍历。下面就通过这三种方法来演...

    村长python
  • 如何对比 F-Stack 与 Seastar 这两个网络编程框架?

    F-Stack和Seastar都是基本完整的网络编程框架,包含了DPDK网络I/O模块、用户态协议栈、异步编程接口等整个系统共用户接入使用。

    F-Stack
  • F-Stack与Seastar对比

    本文是将知乎网友的提问 《如何评价腾讯开源的基于 DPDK 和 BSD 协议栈的网络框架 f-stack?》,将回答讨论内容和我们的一些想法进行了整理。 项目背...

    F-Stack
  • 【独家重磅】来自华尔街的量化金融面试Q&A(第三期)

    量化投资与机器学习微信公众号将定期推送至少200期以上的华尔街量化金融面试Q&A。所有题目均来自国外高质量的面试宝典,我们做了精心的翻译和解读。这些面试题目涉及...

    量化投资与机器学习微信公众号
  • 原 特别遍历树

    魂祭心
  • n1.Docker命令参数一览表

    描述:利用 docker info 命令 Docker Client && Docker Server 信息一览:

    WeiyiGeek
  • 挑战数据结构与算法面试题——80题全解析(一)

    题目来源“数据结构与算法面试题80道”。这是第一部分,包含其中的第1题到第5题。 在此给出我的解法,如你有更好的解法,欢迎留言。 ? 问题分析:二叉查...

    zhaozhiyong
  • 挑战数据结构与算法面试题——80题全解析(一)

    问题分析:二叉查找树是一种二叉树的结构,其中,根节点的值大于左子树的值,小于右子树的值。而二叉查找树的中序遍历即为排序的结果。对于根节点,前驱指针指向左子树中最...

    zhaozhiyong
  • Docker 常用命令收录 -- 持续更新

    Docker 常用命令收录 容器操作 docker build -t friendlyname . # 使用当前目录下的内容创建Dockerfile镜像文件 ...

    shaonbean
  • 「华哥有约第一期」云开发CloudBase热点问题Q&A

    「华哥有约」是云开发Cloud Base官方出品的问答专栏,将由云开发社区产品经理分主题从不同维度解答云开发的热门问题、剖析常见误区,帮助开发者更高效地使用云开...

    腾讯云开发TCB
  • 期末复习之数据结构 第3章 栈和队列

    五:写出下列程序段的输出结果(栈的元素类型SElem Type为char)。 1.void main( ){ Stack S; Char x,y...

    henu_Newxc03
  • 高频手撕算法合集来了!

    基础数据结构的融合是成为庞大系统的基石。比如 Redis 中的跳跃表,数据库索引B+树等,只有对基础的数据结构足够的熟悉才能更容易去理解稍微复杂的结构,就仿佛我...

    帅地
  • 「手撕算法」锁定大厂看这就可

    那么数据结构中的结构定义是这个数据结构长什么样子,有些什么性质?结构的操作意思是这个结构可以支持什么操作,但是不管你怎么的操作,不能破坏了它的结构

    我是程序员小贱

扫码关注云+社区

领取腾讯云代金券