前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >F-Stack Q&A 第三期

F-Stack Q&A 第三期

作者头像
F-Stack
发布2018-01-31 10:20:59
3.8K1
发布2018-01-31 10:20:59
举报
文章被收录于专栏:F-Stack的专栏F-Stack的专栏

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。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-08-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FStack 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
移动解析 HTTPDNS
移动解析 HTTPDNS 基于 HTTP 协议向腾讯云的 DNS 服务器发送域名解析请求,替代了基于 DNS 协议向运营商 Local DNS 发起解析请求的传统方式,可以避免 Local DNS 造成的域名劫持和跨网访问问题,解决移动互联网服务中域名解析异常带来的困扰。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档