2013-02-03 90 views
1

我试图运行一个高度多线程的应用程序,并想测量其性能与不同的核心(0,1,2,3,4,5,6 ... 12)。用Google搜索,当我看到taskset的,为什么taskset对fedora没有影响?

taskset 0x00000003 ./my_app 

,但是当我看到的Fedora的系统监控,那只能说明一个核心做100%,其他仅占12%,0%,...等。 有没有什么办法可以告诉程序在某个核心上运行。我也听说过一个选项,如-t #no的核心。像

./my_app -t2 

为0和1的核心..但是这也没有影响 我究竟做错了任何一个可以请指引我走向正确的方向。

回答

2

taskset 0x00000003 ./my_app设置my_app进程与核心1和2的亲和性。如果您的应用程序是多线程的,则线程会继承亲和性,但它们在核心1和2之间的分配未设置。

要设置进程中每个线程的关联性,可以在进程运行后使用taskset(即运行myapp,检查线程ID并分别为每个线程调用taskset -pc <core> <tid>)或在线程创建时使用sched_setaffinity设置关联, pthread_setaffinity_np如果你正在使用pthreads等)。

无论./myapp -t2确实是特定于您的应用程序。

+0

谢谢@jmetcalfe ..正在使用-t2和taskset类似..当我尝试运行像taskset-pc 2 29537这样的程序后运行时,仍然没有任何效果,我可以在系统监视器上看到只有一个核心) – pokche

+0

该命令的作用是将进程29537移动到核心2.如果要强制将两个特定线程强制到2个核心上,则需要两个任务集命令,每个线程一个 – jmetcalfe

+0

如何taskset -pc 0-1 5984。 (5984是my_app的进程ID)。这会把这个过程分成0和1个核心吗?假设进程有很多pthreads在进程的后台运行..而且你是否还知道其他任何方式来强制程序运行在特定的线程中,到目前为止我学到的是它可以完成,但是我的程序运行也必须支持它 – pokche

相关问题