概念

LNTのデータモデルは非常にシンプルで、クイックスタートガイドに従うだけで、パフォーマンステストを開始できます。さらに進むためには、LNTのいくつかのコア概念を理解しておくと役立ちます。これは、LNTを最大限に活用するのに役立ちます。

オーダー、マシン、テスト

LNTのデータモデルは、システムのパフォーマンスをその進化における多くの構成で追跡するように設計されています。LNTでは、オーダーはパフォーマンスグラフのx軸です。それは変化しているものです。一般的なオーダーの例としては、ソフトウェアのバージョン、Subversionリビジョン、タイムスタンプなどがあります。オーダーは、a/bのような処理を表すためにも使用できます。Pythonのソート関数でソートできる限り、LNTに任意のものをオーダーとして入れることができます。

LNTのマシンは、結果が分類される論理的なバケットです。同じマシンからの結果を比較するのは簡単ですが、異なるマシン間での比較はより困難です。マシンは文字通りマシンである場合もありますが、より抽象的には、追跡に関心のある任意の構成にすることができます。たとえば、Armテストマシンからの結果を格納するには、「ArmMachine」というマシンを作成できます。ただし、テスト対象のものを2つのモードでコンパイルする場合、「ArmMachine-Release」「ArmMachine-Debug」のようにマシンをさらに分割したい場合があります。LLVMのテストを行う場合、多くの場合、構成のすべての有用なパラメーターを1つのマシン名にまとめます。

<hardware>-<arch>-<optimization level>-<branch-name>

テストは、実際にテストしているベンチマークです。

実行とサンプル

サンプルは、LNTが収集する実際のデータポイントです。サンプルには値があり、メトリックに属しています。たとえば、4.00秒(値)のコンパイル時間(メトリック)などです。実行は、データが送信される単位です。実行は、一連のテストを1回実行することを表します。実行には、実行されたオーダー、実行されたマシン、および実行された一連のテストがあり、各テストには1つ以上のサンプルがあります。たとえば、オーダーr1234のArmMachineでの実行には、4.0のコンパイル時間、3.5と3.6の実行時間を持つtest-aと、5.0の実行時間のみを持つtest-bの2つのテストが含まれる場合があります。新しい実行が後のオーダー(r1235、r1236)で送信されると、LNTは各オーダーの、マシンごと、テストごと、メトリックごとのパフォーマンスを追跡し始めます。これが、LNTがコードの進化に伴うパフォーマンスを追跡する方法です。

テストスイート

LNTは、収集するメトリックを制御するためにテストスイートの概念を使用します。簡単に言うと、テストスイートは、実行されているテストに関して保存する必要があるデータの定義として機能します。現在、LNTには2つのデフォルトのテストスイートが付属しています。Nightly Test Suite(NTS)(現在は夜間よりもはるかに頻繁に実行されます)は、テストごとに6つのメトリック(コンパイル時間、コンパイルステータス、実行時間、実行ステータス、スコア、サイズ)を収集します。Compile(compile)テストスイートは、コンパイル品質に関するメトリック(ウォール時間、システムおよびユーザーのコンパイル時間、コンパイルメモリ使用量、コードサイズ)に焦点を当てています。これらのメトリックセットがニーズに合わない場合は、他のテストスイートをLNTに追加できます。

任意のプログラムがLNTに結果データを送信し、任意のテストスイートを指定できます。データ形式は単純なJSONファイルで、そのファイルはlnt importまたはsubmitコマンドを使用してサーバーに送信するか、submitRun URLにHTTP POSTする必要があります。lntツールを参照してください。

LNTにデータを送信する最も一般的なプログラムは、LNTクライアントアプリケーション自体です。lnt runtest nt コマンドは、LLVMテストスイートを実行し、NTSテストスイートの下でデータを送信できます。同様に、lnt runtest compileコマンドは、一連のコンパイル時間ベンチマークを実行し、Compileテストスイートに送信できます。