免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 24524 | 回复: 53
打印 上一主题 下一主题

惊群(thundering herd)问题在linux上可能是莫须有的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-07 16:02 |只看该作者 |倒序浏览
"惊群"问题在linux上存在吗?

有文章,还有权威书支持,还有解决方法。

在UNIX网络编程第1卷里有提到。当某一时刻只有一个连接过来时,N个睡眠进程会被同时叫醒,但只有一个进程可获得连接。如果每次唤醒的进程数目太多,会影响一部分系统性能 .


大家可以编一个程序实验看存在与否?程序就是fork, 让多个进程(或THREAD)都阻塞在accept 同一个sock描述符。当有连接进来,你看是唤醒几个进程?一个还是多个?

[ 本帖最后由 思一克 于 2007-6-8 10:11 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-06-07 16:11 |只看该作者
恩,今天提到这个问题的时候我去找lighttpd1.4.15的代码来看,发现里面的做法也是fork进程进行accept的.

论坛徽章:
0
3 [报告]
发表于 2007-06-07 16:11 |只看该作者
>>当有连接进来,你看是唤醒几个进程?一个还是多个?

"唤醒进程"如何知道呢?

论坛徽章:
0
4 [报告]
发表于 2007-06-07 16:15 |只看该作者
我跟踪了tcp_accept,

阻塞在wait_for_connect, 而这个函数根本就是用prepare_to_wait_for_exclusive,

函数的说明也是仅仅唤醒一个。 “only one process gets woken up".

跟踪的结果也是一个。

论坛徽章:
0
5 [报告]
发表于 2007-06-07 16:21 |只看该作者
原帖由 思一克 于 2007-6-7 16:15 发表
我跟踪了tcp_accept,

阻塞在wait_for_connect, 而这个函数根本就是用prepare_to_wait_for_exclusive,

函数的说明也是仅仅唤醒一个。 “only one process gets woken up".

跟踪的结果也是一个。


思一克兄好強啊!這麼深入。

论坛徽章:
0
6 [报告]
发表于 2007-06-07 16:24 |只看该作者
你看net/ipv4/tcp.c
中的
wait_for_connect函数,里面有说明,仅仅唤醒一个进程

accept()调用sys_accept, 然后是tcp_accept.

论坛徽章:
0
7 [报告]
发表于 2007-06-07 16:25 |只看该作者
原帖由 思一克 于 2007-6-7 16:15 发表
我跟踪了tcp_accept,

阻塞在wait_for_connect, 而这个函数根本就是用prepare_to_wait_for_exclusive,

函数的说明也是仅仅唤醒一个。 “only one process gets woken up".

跟踪的结果也是一个。


有什么办法可以在应用层面不看协议栈内核源码的情况下证明这个结果的?

论坛徽章:
0
8 [报告]
发表于 2007-06-07 16:26 |只看该作者
在accept()后面加printf()看有没有返回就可以。

如果唤醒多个,必然有返回。

原帖由 converse 于 2007-6-7 16:25 发表


有什么办法可以在应用层面不看协议栈内核源码的情况下证明这个结果的?

论坛徽章:
0
9 [报告]
发表于 2007-06-07 16:29 |只看该作者
个人觉得惊群的问题应该是存在的,只是内核把这个问题给解决了,不在应用层表现出来。
记得在richard stevens的书里有例子,进程或者线程越多,效率就越低,我觉得这个就是证据。
谁看过这方面内核代码,知道具体情况的告知一下真实情况,我也学习一下,谢谢。

[ 本帖最后由 Sorehead 于 2007-6-7 16:36 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2007-06-07 16:35 |只看该作者
原帖由 思一克 于 2007-6-7 16:26 发表
在accept()后面加printf()看有没有返回就可以。

如果唤醒多个,必然有返回。



我觉得这个不足以作为证据的.
网络编程第一卷里面说的是那些accept失败的进程会继续阻塞住,也就是说,这些进程应该不会执行后面的这句printf.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP