概念

LNT 的數據模型非常簡單,只要按照 快速入門指南 就可以開始進行效能測試。除此之外,了解 LNT 中的一些核心概念也很有用。這可以幫助您充分利用 LNT。

訂單、機器和測試

LNT 的數據模型旨在追蹤系統在其演進過程中在多種配置下的效能。在 LNT 中,「訂單」是效能圖表的 X 軸。它是正在改變的東西。常見訂單的範例包括軟體版本、Subversion 版本和時間戳記。訂單也可以用於表示處理,例如 A/B 測試。您可以將任何想要的內容放入 LNT 作為訂單,只要它可以使用 Python 的排序函數進行排序即可。

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

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

「測試」是基準,是您實際測試的內容。

執行和樣本

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

測試套件

LNT 使用測試套件的概念來控制收集哪些指標。簡而言之,測試套件充當應該存儲的有關正在運行的測試的數據的定義。 LNT 目前帶有兩個默認測試套件。夜間測試套件 (NTS)(現在運行的頻率遠高於夜間),收集每個測試的 6 個指標:編譯時間、編譯狀態、執行時間、執行狀態、分數和大小。編譯 (compile) 測試套件側重於編譯質量的指標:牆上時間、系統和用戶編譯時間、編譯內存使用量和代碼大小。如果這些指標集不符合您的需求,則可以將其他測試套件添加到 LNT。

任何程序都可以將結果數據提交到 LNT,並指定任何測試套件。數據格式是一個簡單的 JSON 文件,該文件需要使用 lnt import 或 submit 命令提交到服務器,請參閱lnt 工具,或通過 HTTP POST 發送到 submitRun URL。

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