免费注册 查看新帖 |

Chinaunix

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

求教关于内核调度和多线程的问题,请高手出手相救啊,多谢! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-31 11:49 |只看该作者 |倒序浏览
有一个数据吞吐量较大的应用软件,是多线程的,每个线程均分数据,死循环从队列中取数据,取不到就休眠10微秒,取到就处理,在硬件、程序配置完全相同、处理的数据完全相同的情况下,在2.6.18下的CPU利用率要比2.6.9低10%(用mpstat 10比较的),请问这可能是2.6.18和2.6.9之间的区别造成的吗?

另外还有个问题:
还是上面的这个程序,在一个4 CPU的服务器上,如果它要处理的数据内容和大小都是固定的,那么程序跑4个线程或8个线程的运行时间是不是应该差不多,在程序运行的期间内CPU利用率是否也应差不多?

我在单位的4CPU的服务器上做了测试,发现4线程的CPU利用率要比8线程的高15%,但运行时间基本差不多,请问和系统的调度有关系吗?

最近在调试性能问题,面对这些已经束手无策了,请各位大哥给小弟一些建议啊

论坛徽章:
0
2 [报告]
发表于 2009-10-31 13:18 |只看该作者
“休眠10微秒”,时间太短,一般是通过执行CPU指令来消耗时间,并不会真正睡眠。
那么,CPU占用没有达到100%,说明进程还是有睡眠。我想应该是“从队列中取数据”时睡眠的。
那么,从队列里面取的是什么数据?是谁把数据放进去的呢?

论坛徽章:
0
3 [报告]
发表于 2009-10-31 13:31 |只看该作者
原帖由 kouu 于 2009-10-31 13:18 发表
“休眠10微秒”,时间太短,一般是通过执行CPU指令来消耗时间,并不会真正睡眠。
那么,CPU占用没有达到100%,说明进程还是有睡眠。我想应该是“从队列中取数据”时睡眠的。
那么,从队列里面取的是什么数据? ...


感谢这位兄弟,数据是从PCI驱动放进去的,驱动中开个若干个环形缓冲区(等于用户态线程数量),这些缓冲区映射到用户态,用户态的线程从这些ring buffer中取数据。如果增加休眠时间会导致丢数据,因为取数据时总有机会返回空。

论坛徽章:
0
4 [报告]
发表于 2009-10-31 13:35 |只看该作者
原帖由 kouu 于 2009-10-31 13:18 发表
“休眠10微秒”,时间太短,一般是通过执行CPU指令来消耗时间,并不会真正睡眠。
那么,CPU占用没有达到100%,说明进程还是有睡眠。我想应该是“从队列中取数据”时睡眠的。
那么,从队列里面取的是什么数据? ...

这里的休眠是用户态的usleep,应该是休眠的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP