导入数据

在文本文件中导入数据

LNT importreport 命令将导入简单文本文件格式的数据。该命令接受空格分隔的键值文件,并创建一个 LNT 报告文件,该文件可以提交到 LNT 服务器。示例输入文件

foo.exec 123
bar.size 456
foo/bar/baz.size 789

格式为 “test-name.metric”,因此 exec 和 size 是您要提交到的测试套件的有效指标。

示例

echo -n "foo.exec 25\nbar.score 24.2\nbar/baz.size 110.0\n" > results.txt
lnt importreport --machine=my-machine-name --order=1234 --testsuite=nts results.txt report.json
lnt submit http://mylnt.com/db_default/submitRun report.json

LNT 报告文件格式

lnt importreport 工具是将数据导入 LNT 测试格式的简便方法。您也可以直接创建 LNT 报告数据以获得额外的灵活性。

首先,请确保您已理解 LNT 使用的底层概念

{
    "format_version": "2",
    "machine": {
        "name": _String_      // machine name, mandatory
        (_String_: _String_)* // optional extra info
    },
    "run": {
        ("start_time": "%Y-%m-%dT%H:%M:%S",)? // optional, ISO8061 timestamp
        ("end_time": "%Y-%m-%dT%H:%M:%S",)?   // optional, ISO8061 timestamp, can equal start_time if not known.
        (_String_: _String_,)* // optional extra info about the run.
        // At least one of the extra fields is used as ordering and is
        // mandatory. For the 'nts' and 'Compile' schemas this is the
        // 'llvm_project_revision' field.
    },
    "tests": [
        {
            "name": _String_,   // test name mandatory
            (_String_: _Data_)* // List of metrics, _Data_ allows:
                                // number, string or list of numbers
        }+
    ]
}

一个具体的简单示例如下

{
    "format_version": "2",
    "machine": {
       "name": "LNT-AArch64-A53-O3__clang_DEV__aarch64",
       "hardware": "HAL 9000"
    },
    "run": {
       "end_time": "2017-07-18T11:28:23.991076",
       "start_time": "2017-07-18T11:28:33.00000",
       "llvm_project_revision": "265649",
       "compiler_version": "clang 4.0"
    },
    "tests": [
       {
           "name": "benchmark1",
           "execution_time": [ 0.1056, 0.1055 ],
           "hash": "49333a87d501b0aea2191830b66b5eec"
       },
       {
           "name": "benchmark2",
           "compile_time": 13.12,
           "execution_time": 0.2135,
           "hash": "c321727e7e0dfef279548efdb8ab2ea6"
       }
    ]
}

鉴于制作自己的结果并将其发送到 LNT 非常简单,因此通常根本不使用 LNT 客户端应用程序,而只是让自定义脚本运行您的测试并将数据提交到 LNT 服务器。有关如何执行此操作的详细信息,请参阅 lnt.testing

默认测试套件 (NTS)

默认测试套件模式称为 NTS。它最初是为 llvm 测试套件的夜间测试运行而设计的。但是,它也应该适用于许多其他基准测试套件。以下指标受测试支持

  • execution_time:执行时间,以秒为单位;值越低越好。

  • score:基准测试分数;值越高越好。

  • compile_time:编译时间,以秒为单位;值越低越好。

  • hash:包含可执行文件哈希值的字符串(通常是剥离二进制文件的 md5sum)

  • mem_bytes:执行期间的内存使用量,以字节为单位;值越低越好。

  • code_size:代码大小(通常是文本段的大小),以字节为单位;值越低越好。

  • execution_status:非零值表示执行失败。

  • compile_status:非零值表示编译失败。

  • hash_status:非零值表示计算可执行文件哈希值失败。

run 信息应包含以下内容

  • llvm_project_revision:用于测试的编译器的修订版或版本。用于对运行进行排序。

自定义测试套件

LNT 测试套件模式定义了可以为测试跟踪哪些指标,以及关于运行和机器的哪些额外信息是已知的。您可以在 yaml 文件中定义自己的测试套件模式。LNT 管理员必须将此 yaml 文件放置(或符号链接)到服务器的 schema 目录中。

示例

format_version: '2'
name: my_suite
metrics:
- name: text_size
  bigger_is_better: false
  type: Real
- name: data_size
  bigger_is_better: false
  type: Real
- name: score
  bigger_is_better: true
  type: Real
- name: hash
  type: Hash
run_fields:
- name: llvm_project_revision
  order: true
machine_fields:
- name: hardware
- name: os
  • LNT 当前支持以下指标类型

    • Real:8 字节 IEEE 浮点值。

    • Hash:字符串值;限制为 256,sqlite 未强制执行该限制。

    • Status:StatusKind 枚举值(目前仅限于 ‘PASS’、‘FAIL’、‘XFAIL’)。

  • 您需要将至少 1 个运行字段标记为 order: true,以便 LNT 知道如何对运行进行排序。

  • 请注意,运行不限于模式中为运行和机器信息定义的字段。模式中的字段仅声明哪些键在数据库中获得自己的列以及在 UI 中的首选处理方式。