FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

AWS F1インスタンス上のFireSimでBOOMコアをシミュレーションする試行(1. 環境の立ち上げ)

AWS F1インスタンス上でRISC-Vコアを動かすことのできるFireSimは、徐々にバージョンが上がっており、現在はBOOM(Berkeley Out-of Order Machine)のLinux起動もサポートできるようになっているらしい。

fires.im

一度、F1インスタンスチュートリアルはやってみたことがあるのだが、しばらく時間もたっているし、前回はRocketコアで検証した環境を、BOOMコアを使って再検証してみたい。

チュートリアルを見ながら、再度FireSimをF1インスタンス上に構築するチュートリアルを試してみることにした。以下の資料を参考にした。

docs.fires.im

FireSimを使用するためには、以下のインスタンスを用意する必要がある。

  • マネージャインスタンス : SSHでユーザがログインして操作をおコアぬためのインスタンスです。FireSimのリポジトリのクローンや、FireSimマネージャを使用してデザインのビルドやシミュレーションを行います。
  • ビルドファーム : FireSimにより起動・終了されるインスタンスで、FPGAデザインのビルドのために使われます。このインスタンス内でVivadoが起動し、FPGA向けのデザインが生成されます。
  • ランファーム : F1インスタンスとM4インスタンスの集合体で、シミュレーションが行われるのがこのインスタンスです。ランファームを同時に複数立ち上げて、並列シミュレーションを実行することも可能です。

FireSimは、基本的に以下の方法で立ち上げる。

まずはF1インスタンスを使用するための環境構築をおこなう。

FireSimを使用するためには、F1インスタンスが使用できるAWSりーじょうん内で作業が必要で、F1インスタンスが使用できるAWSリージョンは、

  • US East(North Virginia) : us-east-1
  • US West(Oregon) : us-west-2
  • EU West(Ireland) : eu-west-1

が使用可能となっている。Tokyoリージョンは使用できないので、今回はNorth Virginiaリージョンを使用しました。

North Virginiaのリージョンを使用したことがない場合、インスタンスにアクセスするためのSSHキーペアを作成する必要がある。 これにはEC2マネジメントコンソールから、"Key Pairs"をクリックし、"firesim"という名前のキーペアを作成する。そして暗号鍵であるfiresim.pemをダウンロードし、マネージャインスタンスにアクセスするために使用する。 詳細は、AWS EC2インスタンスSSHアクセス方法を確認すること。コンソールからログイン、PuTTYなどのWindowsクライアントなど、どの環境を使用するかで作業方法が異なる。

f:id:msyksphinz:20190405011237p:plain
North VirginaリージョンでSSHのキーペアを作成する。firesimキーペアを作成した。

EC2インスタンスの制限解除

North Virginaリージョンでも、デフォルトではF1インスタンスは使用できないようになっているため、まずはNorth VirginiaリージョンにおいてFireSimで使用するインスタンスの上限を解放する。 f1.2xlargeインスタンスは1つ、c4.4xlargeインスタンスは2つ使用できるように解放する。

この解放作業を行うためには、https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-resource-limits.htmlを参照する必要がある。 EC2マネジメントコンソールにログインし、[Limits]ページから該当するインスタンスの[Current Limit]の欄を確認する。 これが0ならば、[Request limit increase]をクリックし、制限を解除するためのリクエストを行う。この制限の解除作業には、1日程度かかる。

f:id:msyksphinz:20190405011503p:plain
F1インスタンスの制限解除

t2.nanoインスタンスを立ち上げ、コンフィグレーションコマンドを実行する

AWS外の、ローカルマシン上でAWSを制御するためのコマンドを用意しても良いのだが、設定が複雑なため、そのため、AWS上にに制御用のインスタンスを作ってそのうえで作業を行う。 このインスタンスはFireSimの設定を行うだけなので小さなインスタンスでよく、t2.nanoを使用する。

以下の作業は、すべて"North Virginia"リージョンで実行する必要がある。

EC2マネジメントコンソールから[Launch Instance]を実行する。AMIには、"Amazon Linux AMI..."を使用する。インスタンスのサイズとしたはt2.nanoを選択する。 細かな設定は必要ないので、[Review and Launch]をクリックし、最終確認ページで[Launch]をクリックする。

f:id:msyksphinz:20190405011543p:plain
AMIの選択。Amazon Linuxを使用する。
f:id:msyksphinz:20190405011615p:plain
t2.nanoインスタンス上で作業を行う。

Launchする際にキーペアを求められますので、先ほど作成したfiresimキーペアを指定し、起動する。

f:id:msyksphinz:20190405011643p:plain
キーペアの指定。firesimキーペアを指定する。

インスタンスが立ち上がると、t2.nanoインスタンスにログインします。このとき、先ほど用いたキーペアから生成した鍵を指定します。今回は、PuTTYからログインしました。ログイン名は"ec2-user"を指定すると、ログインできます。

f:id:msyksphinz:20190405011734p:plain
t2.nanoインスタンスにログインする。

ログインすると、awsのユーザアカウントの設定を行う。この設定を行うことで、Linuxのコンソール画面からAWSの様々なサービスを制御できるようになる。

$ aws configure

次に、Amazon Linux上で必要なパッケージをインストールする。

sudo yum -y install python-pip
sudo pip install boto3

次に、FireSimを構成するためのスクリプトを実行する。このスクリプトGitHub上に置かれているので、ダウンロードし、実行する。

wget https://raw.githubusercontent.com/firesim/firesim/master/scripts/aws-setup.py
python aws-setup.py

このスクリプトは何をしているかというと、AWSのユーザアカウント上にfiresim用のVPC(Virtual Private Cloud)を作成し、さらにfiresimという名前のセキュリティグループを作成しているらしい。

[ec2-user@ip-xxx ~]$ wget https://raw.githubusercontent.com/firesim/firesim/master/scripts/aws-setup.py
--2019-04-04 15:12:41--  https://raw.githubusercontent.com/firesim/firesim/master/scripts/aws-setup.py
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.248.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.248.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2800 (2.7K) [text/plain]
Saving to: ‘aws-setup.py’

100%[=========================================================================================================================================================================>] 2,800       --.-K/s   in 0s

2019-04-04 15:12:41 (77.3 MB/s) - ‘aws-setup.py’ saved [2800/2800]

[ec2-user@ip-xxx ~]$ python aws-setup.py
Creating VPC for FireSim...
Success!
Creating a subnet in the VPC for each availability zone...
Success!
Creating a security group for FireSim...
Success!
[ec2-user@ip-xxx ~]$

最後に、作業用に使用したt2.nanoインスタンスを削除する。もうこのインスタンスは使用しないので、完全に削除してしまって構わない。