以下の内容はhttps://msyksphinz.hatenablog.com/entry/2025/12/13/040000より取得しました。


GitHub ActionsでSPEC CPU2006の実行を自動化する (1. ワークフローの構築)

SPEC CPU2006のSimPoint解析までをGitHub Actionsで自動化する必要があった。 セルフホステッドランナーとDockerを使って実装したので、その作業ログを残しておく。

まずは、GitHub Actionsのワークフローファイルを作成した。最初は以下のような構成にした。

jobs:
  simpoint:
    runs-on: self-hosted
    container:
      image: simpoint-runner:latest
    steps:
      - name: Run analysis
        run: make run_simpoint

しかし、これだとcontainer:キーワードがDockerHubからイメージをプルしようとしてしまう。 セルフホステッドランナー上でローカルにビルドしたイメージを使いたいので、この方法は使えない。

Dockerイメージのビルド

リポジトリのDockerfileからイメージをビルドするジョブを追加した。

build-docker:
  runs-on: self-hosted
  steps:
    - name: Checkout repository
      uses: actions/checkout@v4
    
    - name: Build Docker image
      run: |
        docker build -t simpoint-runner:latest \
          --build-arg RISCV_ARG=/riscv-linux \
          -f Dockerfile .

これで、セルフホステッドランナー上で直接Dockerイメージをビルドできるようになった。DockerHubにプッシュする必要はない。

Dockerコンテナでの実行

container:キーワードが使えないので、docker runコマンドで明示的にコンテナを実行するようにした。

simpoint:
  runs-on: self-hosted
  needs: build-docker
  steps:
    - name: Checkout repository
      uses: actions/checkout@v4
    
    - name: Run analysis
      run: |
        docker run --rm \
          -v ${{ github.workspace }}:/workspace \
          -w /workspace/spec2006_work \
          simpoint-runner:latest bash -c "make run_simpoint"

これで、ローカルでビルドしたイメージを使って実行できるようになった。

ISOファイルのマウント

SPEC CPU2006のISOファイルがサーバー上の/home/msyksphinz/spec_bechmarks/SPECCPU_2006_v1.1.isoにある。 これをコンテナ内で読み込めるようにする必要があった。

最初は、ISOファイルをワークスペースにコピーしようとしたが、数GBあるので時間がかかりすぎる。 代わりに、Dockerのボリュームマウントを使うことにした。

docker run --rm \
  -v ${{ github.workspace }}:/workspace \
  -v /home/kimura/spec_bechmarks:/home/msyksphinz/spec_bechmarks:ro \
  -w /workspace/spec2006_work \
  simpoint-runner:latest bash -c "..."

:roオプションで読み取り専用にしている。 これで、コンテナ内から/home/msyksphinz/spec_bechmarks/SPECCPU_2006_v1.1.isoにアクセスできるようになった。

QEMUとRISC-Vツールチェーンを使うために、環境変数を設定する必要があった。

-e RISCV=/riscv-linux
-e PATH=/workspace/qemu-9.2.4/build:/riscv-linux/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

RISCVはRISC-Vツールチェーンのルートパスを指定する。PATHには、QEMUとRISC-Vツールチェーンを優先的に使用するように設定した。

最初は、並列ジョブ数を固定で-j8にしていた。しかし、実行サーバのCPU数に応じて調整したいと思った。

NPROC=$((nproc / 2))
make build -j${NPROC}

nprocコマンドでCPU数を取得し、その半分を使用するようにした。




以上の内容はhttps://msyksphinz.hatenablog.com/entry/2025/12/13/040000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14