AWS F1インスタンス上でRISC-Vコアを動かすことのできるFireSimは、徐々にバージョンが上がっており、現在はBOOM(Berkeley Out-of Order Machine)のLinux起動もサポートできるようになっているらしい。
一度、F1インスタンスのチュートリアルはやってみたことがあるのだが、しばらく時間もたっているし、前回はRocketコアで検証した環境を、BOOMコアを使って再検証してみたい。
チュートリアルを見ながら、再度FireSimをF1インスタンス上に構築するチュートリアルを試してみることにした。以下の資料を参考にした。
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クライアントなど、どの環境を使用するかで作業方法が異なる。
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日程度かかる。
t2.nanoインスタンスを立ち上げ、コンフィグレーションコマンドを実行する
AWS外の、ローカルマシン上でAWSを制御するためのコマンドを用意しても良いのだが、設定が複雑なため、そのため、AWS上にに制御用のインスタンスを作ってそのうえで作業を行う。
このインスタンスはFireSimの設定を行うだけなので小さなインスタンスでよく、t2.nano
を使用する。
以下の作業は、すべて"North Virginia"リージョンで実行する必要がある。
EC2マネジメントコンソールから[Launch Instance]を実行する。AMIには、"Amazon Linux AMI..."を使用する。インスタンスのサイズとしたはt2.nano
を選択する。
細かな設定は必要ないので、[Review and Launch]をクリックし、最終確認ページで[Launch]をクリックする。
Launchする際にキーペアを求められますので、先ほど作成したfiresim
キーペアを指定し、起動する。
インスタンスが立ち上がると、t2.nanoインスタンスにログインします。このとき、先ほど用いたキーペアから生成した鍵を指定します。今回は、PuTTYからログインしました。ログイン名は"ec2-user"を指定すると、ログインできます。
ログインすると、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インスタンスを削除する。もうこのインスタンスは使用しないので、完全に削除してしまって構わない。