2012-12-17 81 views
4

假設我選擇了perf事件instructionsLLC-load-misses,LLC-store-misses。進一步假設我測試一個程序prog變化它的輸入。是否valgrind應該給我相同的輸入和相同計數器的「相同」功能結果?也就是說,如果perf中的一個值上升,valgrind中的值應該始終保持不變? valgrind是否會影響我在分析我的代碼時應該注意的模擬?Valgrind與Linux性能相關

編輯:BTW,之前人們燒烤我沒有嘗試自己,我不得不說,我(有點)有,問題是,我有一個的SandyBridge處理器,並perf有一個「錯誤」,防止我從測量LLC- *事件。有一個補丁,但我不覺得像我重新編譯內核...

回答

5

嘛,Cachegrind是一個緩存模擬器。儘管它試圖模仿你的一些硬件特性(緩存大小,關聯性等),但它並沒有模擬你係統的每一個特性和行爲。因此,您可能會在某些情況下看到一些差異。

例如,Valgrind的的doc指出:「Cachegrind模擬旨在爲典型的2004年左右的主流臺式機/服務器處理器的分支預測器」。 Sandy Bridge處理器在2011年首次出現,您可以猜測自2004年以來,分支預測器已經有了很大的改進。

這就是說,Valgrind仍然是您工具箱中的絕佳工具。

什麼是對Sandy Bridge處理器PERF的LLC事件的問題?我每天在我的Sandy Bridge筆記本電腦上使用這些事件,並按預期工作(archlinux 64bits,linux 3.6)。

+0

似乎perf無法訪問我版本的SandyBridge中的LLC計數器。我得到這個:http://comments.gmane.org/gmane.linux.kernel.perf.user/899,雖然有幾年了,但這是相關的:http://lwn.net/Articles/430100/ –

+0

哦,我不知道這個錯誤。但是我再次嘗試,現在的內核似乎不再是問題(但是我不知道何時合併了這個修復) – fireboot