2012-07-31 42 views
2

我正在將一個小型庫的使用添加到大型現有軟件中,並且希望分析(在查找程序中的詳細情況,而不僅僅是在rdtsc()或gettimeofday調用)中的開銷和小型庫的歸屬。使用諸如rdtsc()之類的東西我可以感覺到調用我的庫函數的延遲,但是我不能做延遲歸因,除非我也能夠看到分支是否被預測得不好,緩存不能正常工作等等。我研究PAPI是因爲我想象在更大的二進制文件的上下文中查看某個硬件事件進入和退出例程,但似乎我需要一個特定的內核模塊來讓PAPI爲我工作(Linux 2.6。 18 & & Intel Xeon 5570)... Vtune專門針對英特爾處理器,但它看起來像是分析整個二進制文件的性能,而不是特定的代碼片段(3-4次調用進入我的庫)。是否可以在某個二進制代碼片段中使用vtune而不是整個二進制文件?

有沒有辦法讓我爲我的目標使用Vtune,或者有可能讓我訪問這些計數器而無需修補我的內核?

回答

3

無法在vtune中定義入口點以開始記錄。

但是,您可以做的是在沒有記錄的情況下啓動跟蹤,然後在您期望擊中庫時啓動跟蹤並讓其記錄呼叫。在調用之後,您可以再次停止,現在可以使用vtune中的頂部選項卡查找庫調用。

有了它,你應該能夠看到有關通話的所有信息,以及每個通話所花費的時間。

如果要確保只在調用處於活動狀態時進行跟蹤,則可以在gdb下啓動應用程序,並在訪問和離開要檢查的函數時插入斷點,然後適當地啓動和停止分析器。

5

Matias是正確的 - 您可以開始暫停配置文件(在VTune中說「開始暫停」),然後在您的程序中使用VTune API中的__itt_pause/__itt_resume API將數據收集限制在感興趣的代碼區域。

您可能還希望在項目屬性中將「目標持續時間類型」設置爲「在一分鐘之內」 - 這會使採樣更細化(10 KHz而不是默認的1 KHz頻率)。或者手動調整要收集的事件列表中的Sample After值。後者通常更有用,當你想分析一些特定的錯誤預測分支時。

相關問題