2013-02-03 118 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

相關問題