概念¶
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 秒(值)编译时间(指标)。运行是提交数据的单元。运行表示对一组测试进行的一次运行。运行具有其运行所在的订单、其运行所在的机器以及运行的一组测试,并且对于每个测试,一个或多个样本。例如,在订单 r1234 上的 ArmMachine 上运行可能有两个测试,test-a 具有 4.0 编译时间和 3.5 和 3.6 执行时间,而 test-b 仅具有 5.0 执行时间。随着具有更高订单 (r1235、r1236) 的新运行提交,LNT 将开始跟踪每个机器、每个测试、每个指标的每个订单的性能。这就是 LNT 如何跟踪代码演变过程中性能的方式。
测试套件¶
LNT 使用测试套件的概念来控制收集哪些指标。简单来说,测试套件充当要存储关于正在运行的测试的数据的定义。LNT 目前附带两个默认测试套件。夜间测试套件 (NTS)(现在运行频率远高于夜间),每个测试收集 6 个指标:编译时间、编译状态、执行时间、执行状态、分数和大小。编译(编译)测试套件专注于编译质量的指标:墙上时间、系统和用户编译时间、编译内存使用量和代码大小。如果这些指标集不满足您的需求,可以向 LNT 添加其他测试套件。
任何程序都可以向 LNT 提交结果数据,并指定任何测试套件。数据格式是简单的 JSON 文件,需要使用 lnt import 或 submit 命令(请参阅lnt 工具)或 HTTP POST 到 submitRun URL 将该文件提交到服务器。
向 LNT 提交数据的最常见程序是 LNT 客户端应用程序本身。lnt runtest nt
命令可以运行 LLVM 测试套件,并在 NTS 测试套件下提交数据。同样,lnt runtest compile
命令可以运行一组编译时间基准测试并提交到编译测试套件。