概念¶
LNT 的数据模型非常简单,只需遵循快速入门指南即可开始进行性能测试。更进一步,理解 LNT 的一些核心概念非常有用。这可以帮助您充分利用 LNT。
Orders Machines and Tests¶
LNT 的数据模型旨在跟踪系统在多种配置下随时间演变的性能。在 LNT 中,Order 是性能图表的 x 轴。它是正在变化的事物。常见的 Order 示例包括软件版本、Subversion 修订版本和时间戳。Order 也可以用于表示处理方式,例如 a/b。您可以将任何您想要的东西放入 LNT 作为 Order,只要它可以通过 Python 的排序函数进行排序。
在 LNT 中,Machine 是用于分类结果的逻辑容器。比较来自同一机器的结果很容易,跨机器比较则更困难。有时 Machine 可以字面上是一台机器,但更抽象地说,它可以是您感兴趣跟踪的任何配置。例如,要存储来自 Arm 测试机器的结果,您可以创建一个名为 “ArmMachine” 的机器;但是,您可能希望进一步细分机器,例如 “ArmMachine-Release”、“ArmMachine-Debug”,当您以两种模式编译要测试的内容时。在进行 LLVM 测试时,我们通常将配置的所有有用参数串联到一个机器名称中
<hardware>-<arch>-<optimization level>-<branch-name>
Tests 是基准测试,即您实际测试的内容。
Runs and Samples¶
Samples 是 LNT 收集的实际数据点。Samples 有一个值,并属于一个指标,例如 4.00 秒(值)编译时间(指标)。Runs 是提交数据的单位。一个 Run 代表一组测试的一次运行。一个 Run 具有运行它的 Order、它运行的 Machine 以及运行的一组 Tests,并且对于每个 Test 都有一个或多个样本。例如,在 Order r1234 的 ArmMachine 上的运行可能有两个 Tests,test-a 的编译时间为 4.0,执行时间为 3.5 和 3.6,而 test-b 的执行时间仅为 5.0。随着提交具有更高 Order(r1235、r1236)的新 Runs,LNT 将开始跟踪每个 Order 的每机器、每测试、每指标性能。这就是 LNT 如何跟踪代码演变过程中的性能。
测试套件¶
LNT 使用测试套件的概念来控制收集哪些指标。简单来说,测试套件充当应该存储的关于正在运行的测试的数据的定义。LNT 目前带有两个默认测试套件。“夜间测试套件”(NTS)(现在运行频率远高于夜间),每个测试收集 6 个指标:编译时间、编译状态、执行时间、执行状态、得分和大小。“编译”测试套件专注于编译质量的指标:wall、system 和 user 编译时间、编译内存使用量和代码大小。如果这些指标集不符合您的需求,则可以将其他测试套件添加到 LNT。
任何程序都可以向 LNT 提交结果数据,并指定任何测试套件。数据格式是一个简单的 JSON 文件,该文件需要使用 lnt import 或 submit 命令提交到服务器,请参阅The lnt Tool,或通过 HTTP POST 提交到 submitRun URL。
最常见的向 LNT 提交数据的程序是 LNT 客户端应用程序本身。lnt runtest nt
命令可以运行 LLVM 测试套件,并在 NTS 测试套件下提交数据。同样,lnt runtest compile
命令可以运行一组编译时间基准测试,并提交到“编译”测试套件。