专栏首页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
  • 全用户态网络开发套件F-Stack架构分析

    F-Stack是一个全用户态(kernel bypass)的高性能的网络接入开发包,基于DPDK、FreeBSD协议栈、微线程接口等,适用于各种需要网络接入的业...

    F-Stack
  • LeetCode 232题用栈实现队列(Implement Queue using Stacks)

    https://leetcode-cn.com/problems/implement-queue-using-stacks/

    code随笔
  • @程序员,如何淋漓尽致地敲出Solidity安全代码?

    区块链技术的发展要与安全挂钩,齐头并进,让迅速的发展约束在可靠的范围之内,才能真正让新科技稳步推广,深入人心。

    区块链大本营
  • 以太坊 Solidity 合约 call 函数簇滥用导致的安全风险

    Solidity 是一种用与编写以太坊智能合约的高级语言,语法类似于 JavaScript。Solidity 编写的智能合约可被编译成为字节码在以太坊虚拟机上运...

    Seebug漏洞平台
  • 以太坊 Solidity 合约 call 函数簇滥用导致的安全风险

    Solidity(http://solidity.readthedocs.io/en/v0.4.24/) 是一种用与编写以太坊智能合约的高级语言,语法类似于 J...

    Seebug漏洞平台
  • 前端基础-HTML基础(一)

    efonfighting
  • 【译】模拟鼠标移动

    本文采用意译,可能会与原文的表达有所不同,如果想看原文,请点击这里,或者复制链接 https://css-tricks.com/simulating-mouse...

    腾讯IVWEB团队
  • 深入理解python之一——python

    文章使用markdown写的,编辑的时候行间距还可以,显示的时候行间距好小,我也没办法。

    py3study

扫码关注云+社区

领取腾讯云代金券