データのインポート

テキストファイルでのデータのインポート

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ファイルをサーバーのスキーマディレクトリに配置(またはシンボリックリンク)する必要があります。

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で優先的に処理されるかを宣言するだけです。