导入数据

从文本文件导入数据

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:非零值表示计算可执行文件哈希失败。

预计“运行”信息将包含以下内容

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

自定义测试套件

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

示例

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”)。

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

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