6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Intel PACのAFUをGitLab CIでテストする

Last updated at Posted at 2021-12-06

はじめに

Intellectual Highway合同会社のytodaです。
Intellectual HighwayではネットワークアクセラレータIPの提供やFPGA用の回路設計受託を行っています。

この記事では、IntelのPACカード用に開発したAFUをGitLab CIで実機テストする方法を紹介します。
今回はアクセラレーションスタックに含まれるhello_afuサンプルをGitLab CIで実機テストする環境を構築してみます。

環境

以下の環境で確認しました。

アクセラレーションスタックのセットアップ

https://www.intel.com/content/www/us/en/programmable/solutions/acceleration-hub/archives.html からAcceleration Stack for DevelopmentとRequired UpdatesとなっているUpdate 1をダウンロードします。

v1.2のセットアップについてはクイックスタートガイドを、Update 1の適用についてダウンロードしたファイル内のreadmeを参照してください。

アクセラレーションスタックは/home/xxx/inteldevstackにインストールされたものとします。

hello_afuをGitLabリポジトリに登録

  1. GitLabでプロジェクト作成
  2. hello_afuをGitLabにpush
cd /home/xxx/inteldevstack/a10_gx_pac_ias_1_2_pv/hw/samples/hello_afu
git init
git remote add origin <リポジトリのURL>
git checkout -b main
git add .
git commit
git push origin main

GitLab Runnerのセットアップ

PACカードが挿入されたマシンに、GitLab Runnerをセットアップしていきます。

GitLab Runnerをセットアップすることで、PACカード用マシン上でGitLab CIのジョブを実行できるようになります。

インストール

https://docs.gitlab.com/runner/install/index.html に従ってインストールします。

# Replace ${arch} with any of the supported architectures, e.g. amd64, arm, arm64
# A full list of architectures can be found here https://gitlab-runner-downloads.s3.amazonaws.com/latest/index.html
curl -LJO "https://gitlab-runner-downloads.s3.amazonaws.com/latest/rpm/gitlab-runner_${arch}.rpm"
rpm -i gitlab-runner_${arch}.rpm

runnerの登録

インストールしたrunnerをGitLab CIに登録します。

sudo gitlab-runner register

register時に使用するURL、tokenはhello_afuリポジトリのweb画面から確認できます。

  • coodinator URL: hello_afuリポジトリ -> Settings -> CI/CD -> Runners -> Specific runners
  • token: hello_afuリポジトリ -> Settings -> CI/CD -> Runners -> Specific runners
  • description: マシン名などrunnerの説明を入力
  • tags: shell,pac (.gitlab-ci.ymlで指定するtag名)
  • executor: shell

executorをshellとすることで、CIジョブ実行時にPACカードにアクセスできるようになります。

gitlab-runnerアカウントの設定

GitLab Runnerのジョブはrunnerをインストールしたマシンのgitlab-runnerアカウントで実行されます。
gitlab-runnerアカウントでAFUのビルドと実行を行えるように設定していきます。

必要な設定は以下の通りです。

  • アクセラレーションスタックの環境変数を設定する
  • パスワードなしでsudoできるようにする
  • アクセラレーションスタックがインストールされたディレクトリにアクセス可能にする

アクセラレーションスタックの環境変数を設定する

アクセラレーションスタック環境変数を設定するためにgitlab-runnerアカウントの.bashrcに以下を追記します。
本来は.gitlab-ci.yml内で指定したいところですが、なぜかジョブがエラーになってしまうので.bashrcに直接記述することにします。

.bashrc
source /home/xxx/inteldevstack/init_env.sh > /dev/null

パスワード無しでsudoできるようにする

gitlab-runnerアカウントがパスワードなしでsudoできるようにします。

sudo visudo

で以下を追記します。

# visudo
gitlab-runner      ALL=(ALL)       NOPASSWD: ALL

上記で.bashrcに追加したinit_env.shが、内部でsudoを使用しているためにこの設定が必要になっています。
source /home/xxx/inteldevstack/init_env.shで設定される環境変数を.gitlab-ci.ymlで個別に設定してあげれば、この手順は不要になると思います。

アクセラレーションスタックのディレクトリにアクセスできるようにする

gitlab-runnerアカウントからアクセラレーションスタックがインストールされたディレクトリにアクセスできるようにします。

sudo chmod 755 /home/xxx

.gitlab-ci.yml

hello_afuリポジトリのトップに以下の内容で.gitlab-ci.ymlを作成して、push時に実機用のビルドとテストが実行されるようにします。

buildジョブでは、実機用にAFUをビルド(合成)を行います。
testジョブでは、PACカードへのバイナリの書き込み、テスト用ホストアプリケーションのビルドと実行を行います。

.gitlab-ci.yml
build:
  stage: build
  script:
    - afu_synth_setup -s hw/rtl/filelist.txt build_synth
    - cd build_synth
    - run.sh
  artifacts:
    paths:
      - build_synth/*.gbs
  tags:
    - pac
    - shell

test:
  stage: test
  dependencies:
    - build
  script:
    - fpgaconf build_synth/hello_afu.gbs
    - cd sw
    - make
    - ./hello_afu
  tags:
    - pac
    - shell

おわりに

以上で、hello_afuリポジトリへのpush時にビルドとPACカード上でのテストが行われるようになります。

実際の運用ではAFUのビルドに結構な時間がかかるので、以下の設定を行うと良いと思います。

  • リポジトリweb画面 -> CI/CD -> Schedulesからジョブの実行を1日1回にする

今回はv1.2と古いアクセラレーションスタックのバージョンを使用しましたが、最新のv1.2.1でも似たような手順でCI環境を構築できると思います。

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?