免费注册 查看新帖 |

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
31 [报告]
发表于 2013-02-18 13:45 |只看该作者
yulihua49 发表于 2013-02-18 13:35
改ET怎么样?
单线程epoll_wait有这问题吗?


单线程的没有D, 单核CPU直接跑满了, QPS与多线程基本差不多, 这坑爹了.

论坛徽章:
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
32 [报告]
发表于 2013-02-18 13:45 |只看该作者
linux_c_py_php 发表于 2013-02-18 13:42
性能下降了... 太不和谐了, 我没用工具分析ET的情况, 不过我刚才分析了一下LT长连接的情况,  QPS有15万 ...

QPS有15万?已经比我高了,再接再厉。
不过我的过程比较复杂,包括压缩加密什么的,到6.5W也不易了。

论坛徽章:
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
33 [报告]
发表于 2013-02-18 13:47 |只看该作者
linux_c_py_php 发表于 2013-02-18 13:45
单线程的没有D, 单核CPU直接跑满了, QPS与多线程基本差不多, 这坑爹了.


单线程和多线程网卡中断数也基本一样, QPS也基本一样.

但单线程没有D, 单核会跑满, 多线程大量持续D, 每个核还有60的idle.

论坛徽章:
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
34 [报告]
发表于 2013-02-18 13:48 |只看该作者
yulihua49 发表于 2013-02-18 13:45
QPS有15万?已经比我高了,再接再厉。
不过我的过程比较复杂,包括压缩加密什么的,到6.5W也不易了。


15万我看也不是极限, 公司里有人跑出30万了, 草.

看他们的方法是把一张网卡绑到8个核上啥的, 把中断分配给多个核去处理.

论坛徽章:
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
35 [报告]
发表于 2013-02-18 13:49 |只看该作者
本帖最后由 yulihua49 于 2013-02-18 13:52 编辑
linux_c_py_php 发表于 2013-02-18 13:42
性能下降了... 太不和谐了, 我没用工具分析ET的情况, 不过我刚才分析了一下LT长连接的情况,  QPS有15万 ...

如何配置CPU亲缘性?
把工程发过来我试试?
我只有一个双核的LINUX和4核的Solaris。

论坛徽章:
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
36 [报告]
发表于 2013-02-18 13:51 |只看该作者
本帖最后由 linux_c_py_php 于 2013-02-18 13:53 编辑

据我猜测, 单线程的时候单核CPU是一个瓶颈, 多线程的时候网卡中断是个瓶颈, 结果就是单线程没CPU了, 所以跑不出D, 但多线程CPU多还能往上跑所以跑出D了, 但也高不上去了.

因为单线程做计算和单线程做中断, 我觉得它们的能力是持平的, 所以单线程和多线程恰巧在极限的时候达成了服务承载力的一致.

论坛徽章:
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
37 [报告]
发表于 2013-02-18 13:52 |只看该作者
yulihua49 发表于 2013-02-18 13:49
如何配置CPU亲缘性?


你看这两个链接:

http://www.vpsee.com/2010/07/loa ... h-irq-smp-affinity/

http://www.vpsee.com/2010/07/smp-irq-affinity/

论坛徽章:
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
38 [报告]
发表于 2013-02-18 13:54 |只看该作者
yulihua49 发表于 2013-02-18 13:49
如何配置CPU亲缘性?
把工程发过来我试试?
我只有一个双核的LINUX和4核的Solaris。


代码就是1楼那个tar包, 我把测试端贴上代码来, 你直接编译了跑.

论坛徽章:
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
39 [报告]
发表于 2013-02-18 13:55 |只看该作者
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <sys/socket.h>
  5. #include <netinet/in.h>
  6. #include <arpa/inet.h>
  7. #include <unistd.h>

  8. int main(int argc, char *const arvg[]) {
  9.     int sock = socket(AF_INET, SOCK_STREAM, 0);
  10.    
  11.     struct sockaddr_in srvAddr;
  12.     srvAddr.sin_family = AF_INET;
  13.     srvAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
  14.     srvAddr.sin_port = htons(9876);
  15.         
  16.     connect(sock, (struct sockaddr *)&srvAddr, sizeof(srvAddr));
  17.    
  18.     int i;
  19.     char buff[1024];
  20.     const char *hello = "hello world\n";
  21.     int helloLen = strlen(hello);
  22.    
  23.     for (i = 0; i < 100000000; ++i) {
  24.         int size = 0;
  25.         while (size < helloLen) {
  26.             int ret = write(sock, hello + size, helloLen - size);
  27.             if (ret > 0) size += ret;
  28.         }
  29.         recv(sock, buff, helloLen, MSG_WAITALL);
  30.     }

  31.     close(sock);
  32.     return 0;
  33. }
复制代码
长连接测试端.

论坛徽章:
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
40 [报告]
发表于 2013-02-18 14:31 |只看该作者
本帖最后由 yulihua49 于 2013-02-18 14:59 编辑
linux_c_py_php 发表于 2013-02-18 13:55
长连接测试端.
  1. Cpu0  :  7.0%us, 67.4%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi, 25.6%si,  0.0%st
  2. Cpu1  :  6.0%us, 66.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi, 28.0%si,  0.0%st
  3. Mem:   8059424k total,  1941356k used,  6118068k free,    98700k buffers
  4. Swap:  8191992k total,        0k used,  8191992k free,   933276k cached

  5.   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                          
  6. 5293 sdbc      20   0  3912  372  304 R 21.6  0.0   0:59.30 client                                            
  7. 5294 sdbc      20   0  3912  372  304 R 21.6  0.0   0:59.40 client                                            
  8. 5296 sdbc      20   0  3912  372  304 R 21.6  0.0   0:59.51 client                                            
  9. 5295 sdbc      20   0  3912  372  304 R 21.3  0.0   0:59.30 client                                            
  10. 5235 sdbc      20   0  639m 512m  476 S 14.0  6.5   0:29.97 server                                            
  11. 5244 sdbc      20   0  639m 512m  476 S 14.0  6.5   0:30.63 server                                            
  12. 5242 sdbc      20   0  639m 512m  476 S 13.0  6.5   0:27.70 server                                            
  13. 5243 sdbc      20   0  639m 512m  476 R 11.6  6.5   0:28.09 server                                            
  14. 5238 sdbc      20   0  639m 512m  476 S 11.0  6.5   0:29.26 server                                            
  15. 5245 sdbc      20   0  639m 512m  476 S  9.0  6.5   0:32.34 server                                            
  16. 5237 sdbc      20   0  639m 512m  476 S  8.6  6.5   0:29.38 server                                            
  17. 5241 sdbc      20   0  639m 512m  476 S  7.6  6.5   0:31.77 server                                            
  18. 5239 sdbc      20   0  639m 512m  476 S  7.0  6.5   0:28.75 server                                            
  19. 5236 sdbc      20   0  639m 512m  476 S  5.6  6.5   0:31.77 server                                            
  20. 5246 sdbc      20   0  639m 512m  476 S  5.6  6.5   0:30.26 server                                            
  21. 5240 sdbc      20   0  639m 512m  476 S  5.0  6.5   0:27.43 server                                            
  22. 5284 sdbc      20   0 15160 1352  936 R  0.3  0.0   0:00.71 top                                               
  23.     1 root      20   0 19348 1556 1244 S  0.0  0.0   0:00.67 init                                             
  24.     2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd            
复制代码
2核,4个client同时,idle=0,没有D。每秒28989,包括写文件的时间。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP