概念

LNT 的資料模型相當簡單,只要遵循快速入門指南就能開始進行效能測試。更深入來說,了解 LNT 的一些核心概念會很有幫助。這可以幫助您充分利用 LNT。

Order、機器與測試

LNT 的資料模型旨在追蹤系統在多種配置下,隨著時間演進的效能。在 LNT 中,Order 是效能圖表的 x 軸。它是正在變化的事物。常見 Order 的範例包括軟體版本、Subversion 修訂版本和時間戳記。Order 也可用於表示處理方式,例如 a/b 測試。您可以在 LNT 中將任何東西作為 Order 放入,只要它可以使用 Python 的 sort 函數進行排序即可。

在 LNT 中,機器是用於分類結果的邏輯容器。比較來自同一機器的結果很容易,跨機器的結果則比較困難。有時機器可能真的是一台實體機器,但更抽象地說,它可以是您感興趣追蹤的任何配置。例如,若要儲存來自 Arm 測試機器的結果,您可以將機器命名為「ArmMachine」;但是,當您以兩種模式編譯要測試的內容時,您可能希望進一步細分機器,例如「ArmMachine-Release」、「ArmMachine-Debug」。在進行 LLVM 測試時,我們通常將配置的所有有用參數串連成一個機器名稱

<hardware>-<arch>-<optimization level>-<branch-name>

測試是基準測試,也就是您實際測試的項目。

執行與樣本

樣本是 LNT 收集的實際資料點。樣本具有一個值,並屬於一個指標,例如 4.00 秒(值)的編譯時間(指標)。執行是提交資料的單位。一次執行代表一組測試的一次執行。一次執行具有其執行的 Order、其執行的機器,以及一組已執行的測試,並且每個測試有一個或多個樣本。例如,Order r1234 在 ArmMachine 上的執行可能包含兩個測試,test-a 的編譯時間為 4.0,執行時間為 3.5 和 3.6,而 test-b 的執行時間僅為 5.0。隨著新的執行以較晚的 Order (r1235, r1236) 提交,LNT 將開始追蹤每個 Order 的每個機器、每個測試、每個指標的效能。這就是 LNT 如何追蹤程式碼演進過程中的效能。

測試套件

LNT 使用測試套件的概念來控制收集哪些指標。簡單來說,測試套件充當應儲存的關於正在執行的測試之資料的定義。LNT 目前提供兩個預設測試套件。「夜間測試套件」(NTS)(現在運行的頻率遠高於每晚),每個測試收集 6 個指標:編譯時間、編譯狀態、執行時間、執行狀態、分數和大小。「編譯」(compile) 測試套件,專注於編譯品質的指標:wall、系統和使用者編譯時間、編譯記憶體使用量和程式碼大小。如果這些指標集不符合您的需求,則可以將其他測試套件新增至 LNT。

任何程式都可以將結果資料提交到 LNT,並指定任何測試套件。資料格式是一個簡單的 JSON 檔案,該檔案需要使用 lnt import 或 submit 命令提交到伺服器,請參閱lnt 工具,或使用 HTTP POST 提交到 submitRun URL。

提交資料到 LNT 最常見的程式是 LNT 用戶端應用程式本身。lnt runtest nt 命令可以執行 LLVM 測試套件,並在 NTS 測試套件下提交資料。同樣地,lnt runtest compile 命令可以執行一組編譯時間基準測試,並提交到 Compile 測試套件。