reuseport+fastsocket
来源:互联网 发布:交换机的tftp端口号 编辑:程序博客网 时间:2024/06/05 16:33
https://github.com/fastos/fastsocket
最近使用了reuseport来提供nginx的新建连接性能,但是带来一个问题是,reload nginx进程,流量陡降。原因是reload nginx过程中,需要启动新work进程,关闭旧进程listen socket,内核采用4元组hash选择listen socket,结果未完成三次握手的连接的hash前后不一致了,被reset掉。phash = inet_ehashfn(net, daddr, hnum, saddr, sport); 里面随机数系统启动每次不一样,因此不一致
因此,考虑使用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系统调用里自动完成这件事情。
- 未完待续
- reuseport+fastsocket
- Fastsocket
- reuseport patch
- FastSocket FastOS
- FastSocket.Net
- fastsocket 2
- fastsocket试用
- FASTSOCKET源码分析
- fastsocket优化网络性能原理
- fastsocket优化网络性能原理
- google linux kernel tcp reuseport patch
- c#异步socket通信库:FastSocket
- 高性能的内核 Socket 实现 Fastsocket
- FastSocket框架的回调实现
- Fastsocket学习笔记之小结篇
- 高性能的内核 Socket 实现 Fastsocket
- Linux 4.6内核对TCP REUSEPORT的优化
- 使用reuseport和recvmmsg优化UDP服务器_应用服务器
- 盒子嵌套问题 (二分图||费用流)
- 用户协议
- 塔防游戏中iTweenPath路点插件的使用
- 二代旅游网站程序管理系统V1.0正式发布
- UESTC 1144 Big Brother
- reuseport+fastsocket
- [CODEVS1343][HNOI]蚱蜢(平衡树splay)
- mapreduce工作原理
- lintcode:Topological Sorting
- Hadoop自定义 inputformat 和outputformat 实现图像的读写
- ZOJ3805 Machine I型和L型的管道最少多宽?(贪心)
- C++实验2——计算出标准体重,输出体重状态
- 扑克牌大小
- IOS开发之OC学习笔记(中)