[基于Epoll内置Leader-Follower服务端实现, 已可达50万echo qps(全新支持Lua啦)] - C/C++ - ChinaUnix.net -...

[基于Epoll内置Leader-Follower服务端实现, 已可达50万echo qps(全新支持Lua啦)] - C/C++ - ChinaUnix.net -

[其他] [基于Epoll内置Leader-Follower服务端实现, 已可达50万echo qps(全新支持Lua啦)] [复制链接]

0   0
linux_c_py_php 当前离线
空间积分
0
信誉积分
498
UID
27208017
阅读权限
90
积分
21852
帖子
2196
精华
1
可用积分
21854
专家积分
0
在线时间
978 小时
注册时间
2012-07-28
最后登录
2013-03-26
QQ 查看详细资料
 

Rank: 8Rank: 8

巨富豪门, 积分 21852, 距离下一级还需 18148 积分
帖子
2196
主题
21
精华
1
可用积分
21854
专家积分
0
在线时间
978 小时
注册时间
2012-07-28
最后登录
2013-03-26
论坛徽章:
0
电梯直达 跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-02-18 00:02:23 | 只看该作者 | 倒序浏览
本帖最后由 linux_c_py_php 于 2013-02-21 17:38 编辑

   程序在论坛众亲友的给力指导下, 在公司内核部门的指导之下, 长连接性能最终达到了50万qps, 短连接性能最终达到了7万qps, 测试机器CPU为12核心, 64MB内存, 测试环境为单机lo网口.

   程序基于epoll的EPOLLONESHOT选项, 充分利用了epoll的线程安全特性, 通过独立的监听线程最大化连接建立速率, 通过线程池配合epoll简易的实现了Leader-Follower的程序结构, 对于各类业务逻辑能够普遍适用.

   程序优化过程中, 主要是2个瓶颈点的化解:

   1, epoll线程安全, 所以内部的锁会造成多线程共享epoll fd的瓶颈, 通过创建多组epoll fd, 减小锁的竞争可以化解瓶颈, 充分利用硬件性能.
   2, 短连接建立能力差, 未经过优化网络参数, 只能达到3万/秒的建立能力, 经过参数优化, 可以达到8万/秒的建立能力, 具体参数参考代码里的Readme.


代码如下,最初的255行小代码, 有明显的瓶颈:(15万QPS)
server.tar.gz (1.85 KB, 下载次数: 89)
2013-02-18 00:02 上传
下载次数: 89
一个server.c


解决上述两个问题后的代码, 能够支撑50万qps:
lfepoll.tar.gz (2.69 KB, 下载次数: 106)
2013-02-19 17:48 上传
下载次数: 106
真的很高效了.


这是引入了lua的代码, 不支持yield, 因为考虑到需要把代码改成状态机的太费劲, 并且程序本身就是leader-folllower的, 所以提供一些异步connect等实用接口的必要性不大:
lfepoll.tar.gz (4.27 KB, 下载次数: 33)
2013-02-21 15:09 上传
下载次数: 33
支持lua(刚才传错了!)


测试lua版本性能, 发现luaL_loadstring频繁调用性能损耗严重, 所以做成了只加载一次, 然后保持一份引用在注册表里, 以便重复使用, 现在程序瓶颈已经转移到了lua_pcall, 目测已经无法优化了.(注意测试前修改logic.lua, 改为纯echo服务, 否则会导致test压力工具工作不正常)

lfepoll.tar.gz (4.38 KB, 下载次数: 36)
2013-02-21 16:55 上传
下载次数: 36
优化luaL_loadstring


22QI[VY@QBIZ868$(`ST98S.jpg
posted on 2013-03-26 22:24  lexus 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/lexus/archive/2013/03/26/2983570.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值