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