如何查询进程 线程 协程中占用CPU的线程

新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
丰衣足食, 积分 627, 距离下一级还需 373 积分
论坛徽章:0
本帖最后由 wwdwwd 于
11:54 编辑
[求教]多核系统中怎么查看进程的某个线程被分配到哪个cpu上?
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
富足长乐, 积分 6319, 距离下一级还需 1681 积分
论坛徽章:0
& && & #define _GNU_SOURCE
& && & #include &pthread.h&
& && & int pthread_setaffinity_np(pthread_t thread, size_t cpusetsize,
& && && && && && && && && && && & const cpu_set_t *cpuset);
& && & int pthread_getaffinity_np(pthread_t thread, size_t cpusetsize,
& && && && && && && && && && && & cpu_set_t *cpuset);复制代码
丰衣足食, 积分 627, 距离下一级还需 373 积分
论坛徽章:0
问题解决了,linux下用sched_getcpu即可,不过要求内核高于2.6.19,glibc高于2.6。另外,cpu的亲和性只是说可以把某个线程绑定到某个cpu上,而不能获取当前的线程正被绑定到某个cpu上。
#include&stdlib.h&
#include&stdio.h&
#include&sys/types.h&
#include&sys/sysinfo.h&
#include&unistd.h&
#define _GNU_SOURCE
#include &sched.h&
#include&ctype.h&
#include&string.h&
#include&pthread.h&
void get_process() {
& && && && && & printf(&cpu is %d\n&,sched_getcpu());
}
void *test(void *arg) {
& && &
& && &get_process();
& && &&&return (void*)0;
}
int main(int argc, char* argv[])
{
& && && && && & pthread_
& && && && &&&pthread_create(&tid,NULL,test,NULL);
& && && && &&&pthread_create(&tid,NULL,test,NULL);
& && && && &&&pthread_create(&tid,NULL,test,NULL);
& && && && &&&pthread_create(&tid,NULL,test,NULL);
& && && && &&&pthread_create(&tid,NULL,test,NULL);
& && && && && & get_process();
& && && && && & return 0;
家境小康, 积分 1110, 距离下一级还需 890 积分
论坛徽章:0
学习学习,咱就用过双核
北京盛拓优讯信息技术有限公司. 版权所有 京ICP备号 北京市公安局海淀分局网监中心备案编号:22
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处TOP CPU占用率原理及与实时线程的冲突
linux下通过top或vmstat查看CPU占用率,在大多数情况下测得的CPU占用率是准确的,但在时间精度较高的实时linux系统中,top测量的CPU占用率可能会不准确,下面结合top原理和实时linux实例分析在实时系统中top的使用情况。
统计CPU占用率的时候,大致统计以下几个时间:
用户时间(User time)、系统时间(System time)、等待时间(Waiting time)、空闲时间(Idle time)、Nice时间、硬件终端处理时间等
其中主要计算用户时间、系统时间和空闲时间,基本上这三个时间的百分比之和就是100%。我们知道使用top统计CPU占用率时,top的刷新频率是可以更改的,默认情况下是3s刷新一次,也可以改为1s、0.1s等,既然top的刷新频率可以更改,那么top的最高刷新频率是多少,CPU的占用率又是怎样计算的呢?实际使用中,top中的数据是读取/proc/stat文件获得的,/proc/stat文件被读取时会自动更新,从而top获得最新的CPU占用率情况,但是/proc/stat文件也有刷新精度,它的刷新精度为每个时钟中断周期,即/proc/stat文件中的数据最快可以每个tick更新一次,每个时钟中断到来,系统查看当前CPU正在运行的进程,如果是用户态进程,kernel_stat数据成员中对应的用户态记录数据增加一个tick,如果是内核态,则对应内核态成员记录增加,top占用率的由来就是通过统计当前CPU每个tick运行进程种类得出来的,如用户时间CPU占用率=用户进程tick/总tick。正常情况下,我们知道linux是以时钟周期为基础进行进程调度,基本上在一个时钟周期中不会发生进程调度,所以用top统计CPU占用率不会出错。
但是在rt-linux中,时间颗粒精度不再是tick,有可能比tick更小,这个时候有可能出现一些进程或线程,它们的调度更加频繁,例如在tick=2ms的实时linux中,有一个以1ms为周期的实时进程,这个时候我们用top统计实时进程所用CPU的CPU占用率的时候,就有可能得到不准确的结果。如下图所示,当前CPU运行以1ms为周期的实时进程,红色表示进程在处理数据,CPU忙,白色表示进程没有处理数据,CPU空闲。因为实时进程和tick都是周期性的,且实时进程周期小于tick,所以有可能出现下面两种情况。第一种是启动实时进程的时刻,恰好时钟中断在CPU忙时统计当前CPU占用情况,又因为tick为实时进程周期的整数倍,所以时钟中断统计到的永远都是CPU忙的时刻,这个时候反映在top上的结果就是当前CPU占用率为100%。而第二种情况,恰好时钟中断在CPU空闲时刻统计当前CPU占用情况,得到的结果永远都是CPU处于空闲状态,反映在top上时CPU占用率为0,。由上面的例子可以看出,当linux的始终粒度小于tick的时候,top的统计结果有可能是不准确的。2011年5月 Linux/Unix社区大版内专家分月排行榜第一2011年4月 Linux/Unix社区大版内专家分月排行榜第一2011年3月 Linux/Unix社区大版内专家分月排行榜第一2010年12月 Linux/Unix社区大版内专家分月排行榜第一2010年11月 Linux/Unix社区大版内专家分月排行榜第一2010年10月 Linux/Unix社区大版内专家分月排行榜第一2010年9月 Linux/Unix社区大版内专家分月排行榜第一2010年8月 Linux/Unix社区大版内专家分月排行榜第一2010年7月 Linux/Unix社区大版内专家分月排行榜第一2010年6月 Linux/Unix社区大版内专家分月排行榜第一2010年5月 Linux/Unix社区大版内专家分月排行榜第一2010年4月 Linux/Unix社区大版内专家分月排行榜第一2010年3月 Linux/Unix社区大版内专家分月排行榜第一2010年2月 Linux/Unix社区大版内专家分月排行榜第一2010年1月 Linux/Unix社区大版内专家分月排行榜第一2009年10月 Linux/Unix社区大版内专家分月排行榜第一2009年9月 Linux/Unix社区大版内专家分月排行榜第一
2011年7月 Linux/Unix社区大版内专家分月排行榜第二2011年6月 Linux/Unix社区大版内专家分月排行榜第二2011年2月 Linux/Unix社区大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。}

我要回帖

更多关于 进程线程区别 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信