免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 24702631 | 回复: 24702631

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

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
发表于 2013-02-18 00:02 |显示全部楼层
本帖最后由 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, 下载次数: 766)

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
发表于 2013-02-18 00:12 |显示全部楼层
本帖最后由 linux_c_py_php 于 2013-02-18 00:13 编辑

留楼12345.

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
发表于 2013-02-18 00:59 |显示全部楼层
应该不是这个问题吧,所有会block的系统调用差不多都会调这两个函数,它们就是设个标志而已,比起系统调用自身的操作,比如read socket,便宜多了。

论坛徽章:
1
2015亚冠之卡尔希纳萨夫
日期:2015-07-14 12:20:38
发表于 2013-02-18 09:16 |显示全部楼层

还是用多进程epoll吧。

论坛徽章:
208
巨蟹座
日期:2013-09-02 09:16:36卯兔
日期:2013-09-02 20:53:59酉鸡
日期:2013-09-05 21:21:45戌狗
日期:2013-10-15 20:51:17寅虎
日期:2013-10-18 21:13:16白羊座
日期:2013-10-23 21:15:19午马
日期:2013-10-25 21:22:48技术图书徽章
日期:2013-11-01 09:11:32双鱼座
日期:2013-11-01 20:29:44丑牛
日期:2013-11-01 20:40:00卯兔
日期:2013-11-11 09:21:32酉鸡
日期:2013-12-04 19:56:39
发表于 2013-02-18 09:19 |显示全部楼层
linux_c_py_php 发表于 2013-02-18 00:02
代码为了测试EPOLLONESHOT在多线程环境下的工作状况,结果压力测试所有线程出现频繁的D状态,压力继续提升q ...

梁欧冬?

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
发表于 2013-02-18 09:20 |显示全部楼层
没仔细看代码,不过貌似有多个线程在同时epoll_wait。EPOLLONESHOT不知道是什么,不过我实际应用经验中,epoll_wait有且只有一个线程在做的时候会跑得比较好。
如果是LT模式,可以epoll_ctl临时删除相关事件的socket句柄,并把事件交给其他线程做,做完再epoll_ctl回来;ET模式可能没有这个问题,不过貌似会有其他问题,想不起来了。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
发表于 2013-02-18 10:11 |显示全部楼层
本帖最后由 yulihua49 于 2013-02-18 10:32 编辑
w_anthony 发表于 2013-02-18 09:20
没仔细看代码,不过貌似有多个线程在同时epoll_wait。EPOLLONESHOT不知道是什么,不过我实际应用经验中,ep ...

多个线程在同时epoll_wait是我昨天建议的,他今天就试了。我是LT方式的,大压力测试没问题的。
qps是啥?到多少饱和了?
D状态是啥?

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
发表于 2013-02-18 10:20 |显示全部楼层
这是啥分析工具啊..

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
发表于 2013-02-18 10:47 |显示全部楼层
yulihua49 发表于 2013-02-18 10:11
多个线程在同时epoll_wait是我昨天建议的,他今天就试了。我是LT方式的,大压力测试没问题的。
qps是啥? ...


你直接拉我代码下去看一下吧, 我刚到公司分析一下原因.

qps才13000, 线程频繁D很异常, 就打了一条用来统计qps的日志, 而且没有动态内存分配, 大家帮忙分析一下why吧.

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
发表于 2013-02-18 10:47 |显示全部楼层
pandaiam 发表于 2013-02-18 10:20
这是啥分析工具啊..


这个界面叫kcachegrind。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP