2014-11-04 53 views
1

我需要找出在一定時間內(例如1秒左右),給定進程執行了多少個CPU內核? 這必須從C程序(或可能C++)完成。我知道perf的數量是cpu-migrations如何獲得一個程序在Linux和CPU負載下執行的內核數量

我需要知道CPU核心交換的數量以及進程使用的內核數量。 我假設我首先必須獲取進程執行的線程,然後查看線程運行的內核。

我得到的信息將用於計算進程的CPU負載。當我只用一個CPU內核運行時,我知道該怎麼做,並且有一個可行的解決方案。但是,處理多個CPU內核會導致由多個線程組成的進程在不同時間運行在一個或多個CPU內核中,這使得它更難。有沒有解決方案或提示解決任何人在這裏可以指向?

+0

也許有人指出,這篇文章可以幫助:http://stackoverflow.com/q/26362261/3194340即使這是關於迫使一些CPU的過程 – Coconop 2014-11-04 09:33:37

+0

@Coconop感謝您的評論。但是,我不能(也不願意)改變我觀察到的過程的親和力。 – Curious 2014-11-04 09:38:43

回答

1

我沒有明確的答案,但這裏是我發現的。我使用壓力-c 1 -t 1(在一秒鐘內運行sqrt +循環過程)。

我認爲這會回答你的第一個問題(找出你的過程執行過程中發生了多少次遷移)。

$ perf stat -e migrations stress -c 1 -t 1 
stress: info: [4159] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd 
stress: info: [4159] successful run completed in 1s 
Performance counter stats for 'stress -c 1 -t 1': 
       2  migrations 

接下來,我發現一個有趣的跟蹤點:

perf stat -e sched:sched_migrate_task stress -c 1 -t 1 

和它發生sched_migrate_task has a dest_cpu argument,我不知道如何追查。

+0

謝謝艾米利安。除了通過系統調用之外,有沒有辦法從C程序中調用perf? – Curious 2014-11-04 11:49:34

0

嘗試使用kernelshark工具。它提供了更好的多核系統視覺表示,親和力以及更多有助於信息收集的功能。

+0

謝謝,我會試一試。 – Curious 2014-11-04 21:54:54

相關問題