Oberon/ETH Oberon/教程/效能分析器
這些教程頁面由 André Fischer (afi) 編寫,並由 Hannes Marais 提供編輯協助,託管在 ETHZ,並保留在 ETH 許可證 下。相關內容可以透過 Book.Tool 在系統中找到。擴充套件內容也可以在 紙質 上獲得。一些教程頁面位於 WayBack 檔案 中。
瞭解如何測量系統擴充套件的執行速度。
預計時間:10 分鐘。
效能分析器是一個效能測量工具,僅包含五個 Oberon 命令,這些命令列在 Profiler.Tool 中,並在下面進行描述。
效能分析器在模組中過程的入口和出口點添加了效能分析程式碼。因此,需要模組原始碼。這允許詳細測量過程被呼叫的次數、在過程中的總花費時間以及每次過程呼叫花費的平均時間。由於測量本身會影響結果,因此必須將經過的時間相互比較。在 Macintosh 上,經過的時間以微秒為單位測量,而在基於英特爾的系統上,經過的時間以小於 1 微秒的時鐘週期為單位測量。
效能分析器分為兩個模組:Profiler,它實現儀器和使用者介面,以及一個低階模組(cAP,即呼叫屬性效能分析器或 Profiler0),它執行實際的測量。此模組不匯入任何其他模組,因此即使在模組層次結構中最低的模組也可以匯入它。
當前限制:效能分析器需要一些額外的儲存空間用於呼叫跟蹤。遞迴過程在進行效能分析時可能使用比正常情況更多的記憶體,並且在遞迴深度非常大的情況下,可能會導致記憶體分配錯誤。
Profiler.Compile {moduleName} ~ | ^ | * 編譯指定的模組,向 Oberon 日誌報告成功或失敗。此編譯器接受與 Compiler 相同的選項。
如果編譯失敗,錯誤將與 Compiler 完全相同的方式列在日誌中,並且將開啟一個未命名的文件檢視器。它在標記的檢視器中顯示原始模組文字,並擴充套件了由 cAP 模組插入的效能分析程式碼。錯誤的位置適用於該檢視器中的文字,並且可以使用 System.Locate 命令找到錯誤。可以使用下面描述的Profiler.ShowCode 命令隨時顯示相同的文字。
示例
與系統一起提供的 ProfilerExample.Mod 模組演示了兩種簡單資料輸出到 Oberon 日誌的不同實現之間的執行時間差異:一種使用 Out 模組,另一種使用寫入器和 Texts 模組。
使用以下命令編譯模組:
- Profiler.Compile ProfilerExample.Mod ~
並執行命令:ProfilerExample.Do
Profiler.Show 開啟一個名為“Profiler.Show”的文件檢視器,在表格中顯示效能分析器計數器值。每個表格條目顯示過程被呼叫的次數、每次過程呼叫花費的平均時間、在過程中的總花費時間以及在過程中的花費時間佔所有模組中所有測量時間的百分比。無法測量 RETURN 語句中的花費時間。如果效能分析的模組呼叫未效能分析的過程,則未效能分析的程式碼中的花費時間將新增到效能分析的程式碼中的過程。
現在執行:Profiler.Show 以顯示在執行先前命令期間收集的資料。
Profiler.Reset 重置效能分析器計數器。
Profiler.ShowCode * 開啟一個未命名的文件檢視器,在標記的檢視器中顯示模組文字,並擴充套件了由 cAP 模組插入的效能分析程式碼。這對於除錯目的很有用。
使用以下命令顯示模組的文字:
- 執行 Desktops.OpenDoc ProfilerExample.Mod
- 標記(F1 鍵)剛剛開啟的檢視器
- 然後執行:Profiler.ShowCode * 以檢視文字是如何修改的。
Profiler.ShowMem 開啟一個名為“MemoryDump.Text”的文件檢視器,顯示模組分配的記憶體。記憶體轉儲顯示模組資料的 size(程式碼 + 資料 + 型別描述符)、在堆上分配的物件的數量(使用該模組中宣告的型別)及其總 size。size 包括型別標記指標的 size(4 位元組)。目前,效能分析器無法識別所有分配的記憶體。轉儲的最後一部分指示有多少位元組無法識別。
顯示的資訊與命令 System.ShowModules 提供的資訊等效。System.Watch 也提供有關分配位元組數量的資訊。
在開發您自己的系統擴充套件時,使用此寶貴的資訊來源。
C
P
效能測量
Profiler.Compile
Profiler.Reset
Profiler.Show
Profiler.ShowCode
Profiler.ShowMem
Profiler.Tool
修訂於 1996 年 12 月 1 日
安裝於 1997 年 5 月 30 日