FASTSOCKET源码分析
来源:互联网 发布:简述网络协议的概念 编辑:程序博客网 时间:2024/06/05 23:52
https://github.com/fastos/fastsocket
最近使用了reuseport来提供nginx的新建连接性能,但是带来一个问题是,reload nginx进程,流量陡降。原因是reload nginx过程中,需要启动新work进程,关闭旧进程listen socket,内核采用4元组hash选择listen socket,结果未完成三次握手的连接的hash前后不一致了,被reset掉。
因此,考虑使用fastsocket来满足我们的性能,因为我们使用阿里内核,计划移植fastsocket到阿里内核。
fastsocket不多介绍,只针对其特性的实现原理做分析说明:
- listen spawn
监听一个ip端口,在内核只有一个全局的listen socket(reuseport除外),listen spawn就是为全局的listen socket创建一份cpu本地listen socket.
为了对应用程序透明,创建的时机是epoll_ctl,在fastsocket/library/libsocket.c hook了epoll_ctl,当应用程序调用epoll_ctl, fastsocket会通过fastsocket_ioctl调用spwan_listen,在当前cpu创建listen socket本地副本,对应file结构保持到tfile->sub_file。
epoll_ctl会对全局listen socket的file和本地listen socket的file即fle->sub_file同时监视。
有新的连接到来,会先查本地listen socket表,查不到再查全局listen socket表,见fastsocket/kernel/net/ipv4/inet_hashtables.c:__inet_lookup_local_listener。
这样新的连接到来,只需要找到当前cpu本地listen socket并唤醒当前cpu的进程,对haproxy,nginx等多进程模型的服务器,可以使得整个流的处理过程都是在同一个cpu完成,提高效率。
当然前提是进程绑定了cpu亲缘性,fastsocket会在spawn listen系统调用里自动完成这件事情。
- 未完待续
- FASTSOCKET源码分析
- Fastsocket
- FastSocket FastOS
- FastSocket.Net
- fastsocket 2
- reuseport+fastsocket
- fastsocket试用
- fastsocket优化网络性能原理
- fastsocket优化网络性能原理
- 源码分析
- 源码分析
- 源码分析
- 源码分析
- 源码分析
- 源码分析
- 源码分析
- 源码分析
- c#异步socket通信库:FastSocket
- MySQL:索引工作原理
- SpringMVC + Spring + SpringJDBC整合
- Composite模式 组合模式
- (转载)深入理解Java:注解(Annotation)自定义注解入门
- dd命令详解
- FASTSOCKET源码分析
- Android Adapter 源码笔记(2)
- MAC查看和复制文件夹路径
- 如何添加pch文件
- LoadRunner参数化取值与连接数据库
- 微信分享后跳回项目,为何不执行onResp
- Spring中使用JDBC做的增删改查
- iOS开发之新浪微博登陆和分享
- Ulefone Be Touch 4G LTE 手机Android 5.0 5.5英寸IPS产业mtk6752 3GB的RAM的64位CPU八芯的双SIM卡的手机