我有與進程相關的processID。我已經使用CreateProcess()
函數創建了這個過程。在運行期間,我想跟蹤它運行的處理器數量以及此可執行文件在多核機器上使用的時間。獲取一個特定進程正在運行的處理器的數量
我想爲C++編寫相同的代碼;誰可以幫我這個事?
我正在使用Win XP多核計算機。
我有與進程相關的processID。我已經使用CreateProcess()
函數創建了這個過程。在運行期間,我想跟蹤它運行的處理器數量以及此可執行文件在多核機器上使用的時間。獲取一個特定進程正在運行的處理器的數量
我想爲C++編寫相同的代碼;誰可以幫我這個事?
我正在使用Win XP多核計算機。
這給了處理器*可以運行的進程,但據我所知,沒有關於它實際上被調度的那些信息。 – 2012-02-22 08:17:15
您可以使用Windows事件跟蹤(ETW)和CSwitch事件(在每個上下文切換時發出)在Vista或更高版本上捕獲此級別的詳細信息。
各種工具(例如Windows Performance Toolkit)捕捉並可視化這些數據。
但是,這在Windows XP上不受支持。
如果您只想知道您的典型併發性(即在給定時間有多少線程正在運行),您可以定期對perfmon線程數據(來自HKEY_PERFORMANCE_DATA)進行採樣。 「線程狀態」計數器將爲您提供進程中每個線程的即時狀態(即每個線程是否正在運行)。很明顯,這個採樣過程會將最大併發數限制爲(處理器數量爲1)。
但是你真的需要這麼多細節嗎? GetProcessTimes通常就足夠了。
更新
您可以在測試機器上運行你的應用程序,只需測量使用性能監視器每個CPU的利用率。您還應該測量每個進程的CPU利用率,以確保沒有其他事情意外運行。
要捕獲報告數據,請以管理員身份運行perfmon。
就是這樣。
我需要一個程序來確保我的多線程應用程序能夠利用機器的所有內核,而不管它正在運行的操作系統以及處理器\內核利用率的百分比,以便分析應用程序性能,對此有何建議? – psp 2012-02-23 04:55:46
如果這只是爲了測試(即它在受控環境中),那麼在機器閒置時,請使用閒置機器並使用perfmon來測量每個CPU的性能。它應該是微不足道的。然後運行您的應用程序並測量每個CPU的性能。您還需要測量每個進程的CPU利用率,以確保沒有任何後臺進程(如索引服務或病毒檢查程序)被踢入。如果出現問題,請禁用它們。 – arx 2012-02-23 14:44:36
好的,但是有沒有辦法在文件中以某種方式獲取數據,以便我可以生成報告? – psp 2012-02-24 04:31:53
請問你能展示你的代碼嗎? – gideon 2012-02-22 06:13:58