Skip to content

AutoRunTools

Yuya Degawa edited this page Jun 5, 2023 · 3 revisions

dst/ツール/AutoRunTools.md

概要

  • 設定ファイルに従ってクラスタへのジョブの投入から,そのままグラフに使えるCSVの作成まで一括して行うツール群.

スクリプト

  • enqueue.pl

    • クラスタへジョブを投入するスクリプト
  • execscript.pl

    • ジョブ投入書式作成スクリプト
    • enqueue.pl から呼ばれる
    • execscript.pl を編集することで,研究室外の環境にも対応可能
  • statistics.pl

    • ジョブが出力したファイルを解析してCSVにするスクリプト
  • summary.pl

    • statistics.pl の出力したCSVをまとめるスクリプト
  • cfg.xml

    • 設定ファイル

ディレクトリ構成

  • スクリプト
    +-enqueue.pl     # ジョブ投入スクリプト
    +-execscript.pl  # ジョブ投入書式作成スクリプト
    +-statistics.pl  # XML->CSV解析スクリプト
    +-summary.pl     # データ集計スクリプト
    +-cfg.xml        # 設定ファイル
    
  • 出力データ
    +-result
    +--000                # 各セッションの出力(3桁の数字)
    | +-work              # クラスタで実行した際のエラーなどが置かれる    
    | +-sh                # ジョブ投入を行う際に使用するシェルスクリプト
    | +-param             # ジョブ投入時に使用したパラメータファイルのコピー
    | +-statistics000.csv # XML->CSVの出力ファイル
    |
    +-001    # 以下000と同じ
    +-002
    +-~
    |
    +-summary
    +-~データ集計出力ファイル
    

スクリプトの共通オプション

  • -c 設定XMLファイルの指定
    • SampleCfg.xml を指定する場合,以下の様にする
    • 間にスペースは入れない
      -cSampleCfg.xml
      

設定ファイルの書き方

  • cfg.sample.xmlをcfg.xmlに変更して,中身を修正
  • ~Patternとある場合,それは全て正規表現
  • とりあえず実行を試してみたい場合に,主に書き換える必要があるのは以下の場所
    • Configuration/BasePath

    • Input以下

      <?xml version="1.0" encoding="utf-8"?>
      
      <!--
      Configuration
          BasePath : ベースディレクトリ
          Onikiriのルートディレクトリを“絶対パス”で指定
          これより下の設定は全てこのパスからの相対パスとして扱われる
      -->
      <Configuration
      BasePath="/home/onikiri2/tool/AutoRunTools/"
      >
      
      <!--
          Result : 
          BasePath : 出力ファイルのディレクトリ
              上のベースディレクトリからの“相対パス”で表記
      
          FileNamePattern     : 集計対象とするファイル
          NodeNamePattern     : XML->CSVとする際に取り出すデータ
      
          ColumnHeaderPattern : 列ヘッダを出力パターン
              名前のうちパターンにマッチした部分のみを出力
              わからなければ空欄でOK 
          
          RowHeaderPattern    : 行ヘッダを出力パターン
              名前のうちパターンにマッチした部分のみを出力
              下の例は,"番号.ベンチマーク名"を取り出すための物
          />
      -->
      <Result
          BasePath="result/"
          
          FileNamePattern=".txt"
          NodeNamePattern="(IPC)|(HitRate)|(Executed)"
          ColumnHeaderPattern=""
          RowHeaderPattern="[0-9]{3}[^-]+"
      />
      
      
      <!--
          Input : ベンチマーク入力パラメータ
              各Process/Command 内の条件にマッチしたベンチマークが一回のセッションで実行される.
              複数のProcess ノードが存在した場合,それらの間の総当たりの組み合わせで実行が行われる.
              以下の場合,SPECCPU 2000 INT 内のref データセットを実行する.
      -->
      <Input
          BinaryFile="../../project/gcc/onikiri2/a.out"
      >
          <Processes>
          <Process>
              <Command
              BasePath="../../benchmark/SPECCPU2000_INT/alpha64/cmd/"
              FileNamePattern="ref.0.xml"
              />
          </Process>
          </Processes>
      </Input>
      
      <!--
          Sessions : 入力セッション
              複数のSessionエントリを続けて記述可能
              下の例の場合,param.xml を入力ファイルとして受け取り,
              一つ目のキャッシュ(L1Dキャッシュ)のレイテンシを3に設定した状態で,
              FetchWidth が3,4,5に設定された3つのセッションが実行される
      
          パスについては,以下の省略形を使用可能
          "/SS/"    -> "/Session/Simulator/"
          "/SSC/"   -> "/Session/Simulator/Configurations/"
          "/SSCD/"  -> "/Session/Simulator/Configurations/DefaultConfiguration/"
          "/SSCDP/" -> "/Session/Simulator/Configurations/DefaultConfiguration/Parameter/"
      -->
      <Sessions>
      
          <Session>
          <Parameter FileName="param.xml"/>
          <Parameter
              Node="/SSCDP/Cache[0]/@Latency"
              Value="3"
          />
          <Parameter 
              Node="/SSCDP/Fetcher/@FetchWidth" 
              Range="3,4,5"
          />
          </Session>
      
      </Sessions>
      
      </Configuration>

Sessionセクションの詳細

Parameterでは以下の書式が可能

  • <Parameter FileName="~">

    • ~の部分のファイルを読み込む
    • ここで指定されたファイルは一旦workにコピーされ,ジョブではそれが使用される
  • <Parameter Option="~">

    • ~の部分がコマンドラインオプションとして直接追加
  • <Parameter Node="~" Value="~">

    • -x Node=Valueの形に展開される
    • Valueは別に数字で無くてもかまわない
  • <Parameter Node="~" Range="~">

    • Rangeの内容を展開し,複数のセッションに展開する

Range構文詳細

  • Range="1,2"

    • Value="1"Value="2"のセッションに展開される
  • Range="1-3"

    • Value="1"Value="2"Value="3"のセッションに展開される
  • Range="[1,2],[3,2]"

    • Value="1,2"Value="3,2"のセッションに展開される
  • 複数のRangeを持つParameterが一つのSession内に複数あった場合,展開された全ての組み合わせのセッションが作られる

ジョブ投入

  • 設定ファイルを記述した上で,以下のコマンドをサーバーで実行

  • 出力先ディレクトリ(result)が作られるディレクトリをあらかじめ作成しておくこと

    perl enqueue.pl
    
  • オプション

    -t #ディレクトリやスクリプトは作成するが,ジョブ投入は行わない(テスト用)
    

XML->CSV

  • ジョブ全て完了したら,各出力ファイル(XML)からCSVを作る

    perl statistics.pl
    
  • これにより,各セッションのディレクトリ内にstatistics~.csvの名前で集計されたcsv画生成される

  • オプション一覧例

    perl statistics.pl 4       # セッション004を処理
    perl statistics.pl 1-7     # 001~007を処理
    perl statistics.pl 3,5,4   # 003,004,005を処理
    perl statistics.pl 2,9,5-7 # 002,009,005,006,007を処理
    perl statistics.pl all     # 全てのセッションを処理
    

集計

  • 各セッションディレクトリ内のCSVを集めて集計する
    perl summary.pl
    

オプション一覧と例(セッション番号指定はstatistics.plと同じ)

```
perl summary.pl -e正規表現パターン # パターンに一致したパラメータだけ出力する
perl summary.pl -eIPC            # この場合,パラメータ名にIPCがはいっていたら出力

perl summary.pl -hヘッダファイル   # セッション番号と列ヘッダ名を,ヘッダファイルを用いて変換して出力
```
  • コマンドラインから指定したセッション番号の順番に出力される

ヘッダファイル

  • 以下のようにカンマ区切りで行ごとに変換ルールを定義

    1,base
    2,Issue+1
    3,Issue+2
    
  • セッション番号001は,baseとして表示される

クイックスタート

  • cfg.sample.xmlをcfg.xmlになおして,以下のセクションを自分のパス用に書き直す

    Configuration/@BasePath
    Configuration/Result/@BasePath
    
  • ベンチマークはサンプルだとrefになっているので,必要ならデータを展開しておく

  • スクリプトがあるところに以下の内容のparam.xmlを置く(実行命令数を設定しているだけ)

    <?xml version="1.0" encoding="utf-8"?>
    <Session>
    <Simulator>
        <System SimulationInsns="1K" SimulationCycle="0" SkipInsns="1K" />
    </Simulator>
    </Session>
    
  • ジョブ投入スクリプトを編集

    • execscript.pl を各自の環境に合わせて書き直す.
  • ジョブを投入

    perl enqueue.pl
    
  • XML->CSV集計

    perl statistics.pl all
    
  • 集計

    perl summary.pl
    
Clone this wiki locally