免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: linux_c_py_php
打印 上一主题 下一主题

[其他] [基于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
151 [报告]
发表于 2013-02-25 14:35 |只看该作者
yulihua49 发表于 2013-02-25 14:23
终于把这个史上最屌的服务器搞定。
用select,支持1024个连接,达到70000qps。
我的机器只有2核,线程 ...


我来学习一下。

论坛徽章:
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
152 [报告]
发表于 2013-02-25 14:57 |只看该作者
本帖最后由 linux_c_py_php 于 2013-02-25 15:01 编辑

半同步半异步的, main线程负责accept,  sched线程负责select检测事件, 然后加锁从fdset中去掉, 然后通过next域构造的队列把连接送给worker线程, 在worker线程里做handle完成后再加锁恢复fdset.

那个beat[2]没用吧...

论坛徽章:
0
153 [报告]
发表于 2013-02-25 15:13 |只看该作者
yulihua49 发表于 2013-02-25 14:23
终于把这个史上最屌的服务器搞定。
用select,支持1024个连接,达到70000qps。
我的机器只有2核,线程 ...


好了? 什么原因?

论坛徽章:
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
154 [报告]
发表于 2013-02-25 15:19 |只看该作者
可以跑15万左右, 开了40多个压力才顶上去, 估计是锁太厉害了.

不过把I/O放到多线程里去做提高了I/O并发性, 值得借鉴. 之前我做的hsha把I/O都放在异步层了, 异步线程CPU直接就跑满到瓶颈了.

你可以把worker里对事件集合的取消操作以及main线程对事件集合的添加操作都做成Pipe+queue, fdset的操作全部让sched线程来做, 可以避免掉同步fdset的代价, 应该能稍微好点.

论坛徽章:
0
155 [报告]
发表于 2013-02-25 15:24 |只看该作者
回复 153# linux_c_py_php


    你在测试 yulihua49  的select?

论坛徽章:
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
156 [报告]
发表于 2013-02-25 15:27 |只看该作者
iw1210 发表于 2013-02-25 15:24
回复 153# linux_c_py_php


是的, 他把server做成了hsha了.

论坛徽章:
0
157 [报告]
发表于 2013-02-25 15:46 |只看该作者
linux_c_py_php 发表于 2013-02-25 15:27
是的, 他把server做成了hsha了.


测试结果怎么样?他做好了么?我说的select方案可行吧

论坛徽章:
0
158 [报告]
发表于 2013-02-25 16:03 |只看该作者
有个疑问用select就行了,为什么还出现epoll,iocp什么的?

论坛徽章:
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
159 [报告]
发表于 2013-02-25 16:21 |只看该作者
iw1210 发表于 2013-02-25 16:03
有个疑问用select就行了,为什么还出现epoll,iocp什么的?


select只能管FD_SETSIZE之内的fd, 进程受限啊哥.

论坛徽章:
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
160 [报告]
发表于 2013-02-25 16:29 |只看该作者
本帖最后由 yulihua49 于 2013-02-25 16:34 编辑
linux_c_py_php 发表于 2013-02-25 14:57
半同步半异步的, main线程负责accept,  sched线程负责select检测事件, 然后加锁从fdset中去掉, 然后通过nex ...

有用。通过管道通知sched。

select里边的fds,必须在进入时设置好。如果你新设置了fds,就要通知它退出来,重新装入。


在局域网,3.9W qps
  1. Cpu0  :  9.5%us, 37.1%sy,  0.0%ni, 49.5%id,  0.0%wa,  0.0%hi,  4.0%si,  0.0%st
  2. Cpu1  :  9.4%us, 37.5%sy,  0.0%ni, 48.7%id,  0.4%wa,  0.0%hi,  4.0%si,  0.0%st
  3. Mem:   8059424k total,  2772824k used,  5286600k free,   309748k buffers
  4. Swap:  8191992k total,        0k used,  8191992k free,  2019996k cached

  5.   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                          
  6. 1990 sdbc      20   0  104m 7992  532 R 46.1  0.1   0:52.50 server                                            
  7. 1982 sdbc      20   0  104m 7992  532 S  7.3  0.1   0:09.09 server                                            
  8. 1984 sdbc      20   0  104m 7992  532 R  7.3  0.1   0:09.11 server                                            
  9. 1986 sdbc      20   0  104m 7992  532 S  7.3  0.1   0:09.06 server                                            
  10. 1987 sdbc      20   0  104m 7992  532 S  7.3  0.1   0:09.07 server                                            
  11. 1989 sdbc      20   0  104m 7992  532 S  7.3  0.1   0:09.11 server                                            
  12. 1983 sdbc      20   0  104m 7992  532 S  7.0  0.1   0:09.12 server                                            
  13. 1985 sdbc      20   0  104m 7992  532 S  7.0  0.1   0:09.09 server                                            
  14. 1988 sdbc      20   0  104m 7992  532 S  7.0  0.1   0:09.13 server                                            
  15. 3252 sdbc      20   0 15176 1344  948 R  0.3  0.0   0:00.12 top
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP