Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
5.3.2. 以 Cachegrind 側寫快取使用量
Cachegrind 會模擬程式與電腦的快取階層、以及分支預測程式(選用)之互動。它會追蹤模擬後的第一階指令快取與資料快取的使用量,以偵測不良程式碼與此階快取之互動;它也會追蹤與最後一階(不管是第二或第三階)快取的使用量,以追蹤對主記憶體的存取。也因此,執行 Cachegrind 的程式之速度會比正常方式慢上 20 到 100 倍。
要執行 Cachegrind,請執行以下指令,並以您想要透過 Cachegrind 側寫的程式取代 program:
# valgrind --tool=cachegrind program
Cachegrind 可以為整個程式、以及程式中的每個函數,蒐集以下統計資料:
- 第一階指令快取的讀取(或已執行的指令)次數與讀取不到之次數,以及最後一階快取讀取不到指令的次數;
- 資料快取的讀取次數(或記憶體的讀取次數)、讀不到的次數、以及讀不到最後一階快取資料的次數;
- 資料快取的寫入次數(或記憶體的寫入次數)、寫不進的次數、以及寫不進最後一階快取資料的次數;
- 已執行與預測失敗的有條件分支之次數;以及
- 已執行與預測失敗的非直接分支之次數。
Cachegrind 會將這些統計資料的摘要資訊印至主控台,並寫入更多詳細的側寫資訊至檔案中(預設檔案為
cachegrind.out.pid
,其中 pid 是您執行 Cachegrind 的程式之程序 ID)。這檔案可以由相隨的 cg_annotate 工具進一步處理,如:
# cg_annotate cachegrind.out.pid
注意
cg_annotate 可以處理的每一行超過 120 個字元,端視路徑的長度而定。要讓這些資料更清楚易讀,我們建議您在執行這指令之前,將終端機視窗拉到可容納這長度的大小。
您也可以比較 Cachegrind 建立的側寫檔,透過圖表程式比較之前與之後的效能。您可以使用 cg_diff 指令,用第一個側寫檔取代 first,用之後的側寫檔取代 second:
# cg_diff first second
這指令會產生結合的檔案,請利用 cg_annotate 來檢視。
Cachegrind 支援多種專用於此輸出檔的選項。其中一些選項為:
--I1
- 指定第一階指令快取的大小、相關性、以及行的大小,並以逗號隔開:
--I1=size,associativity,line size
。 --D1
- 指定第一階資料快取的大小、相關性、以及行的大小,並以逗號隔開:
--D1=size,associativity,line size
。 --LL
- 指定最後一階指令快取的大小、相關性、以及行的大小,並以逗號隔開:
--LL=size,associativity,line size
。 --cache-sim
- 啟用或停用蒐集存取快取成功的次數、與存取快取失敗的次數之功能。預設值為
yes
(啟用)。請注意,停用上述選項及--branch-sim
會讓 Cachegrind 不蒐集任何資訊。 --branch-sim
- 啟用或停用蒐集分支指令與預測失敗次數之功能。預設上設為
no
(停用),因為這功能會降低 Cachegrind 約 25% 的速度。請注意,停用上述選項及--cache-sim
會讓 Cachegrind 不蒐集任何資訊。
欲知完整的選項清單,請參閱
/usr/share/doc/valgrind-version/valgrind_manual.pdf
。