FPGA開発日記

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

AWS F1インスタンス上のFireSimでBOOMコアをシミュレーションする試行(2. マネージャインスタンスの立ち上げ)

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

fires.im

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

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

docs.fires.im

マネージャインスタンスを立ち上げる

次は、FireSimとユーザのインタフェースとなるインスタンス、「マネージャインスタンス」を立ち上げる。マネージャインスタンスにはsshで接続する。 ここでは、マネージャインスタンスとしてc4.4xlargeインスタンスを用いている。c4.4xlargeインスタンスは比較的安価(0.796USD/時間)で使用することができるからだ。

まずはEC2マネジメントコンソールから[Launch Instance]をクリックし、インスタンスを構築する作業に入る。 AMIは"Community AMI"タブの"FPGA"から"FPGA Developer AMI - 1.5.0"を選択する。これ以外のAMIは使用できないらしいので、必ずこのAMIを指定すること。

f:id:msyksphinz:20190406013221p:plain
AMIの選択。"FPGA Developer AMI - 1.5.0 を選択する。

インスタンスタイプは"c4.4xlarge"を選択する。

f:id:msyksphinz:20190406013303p:plain
マネージャインスタンスには、c4.4xlargeを指定する。

"Configure Instance Details" ページでは、

  • "Network" : "firesim-xxx"というVPCが作られていますので、こちらを選択する。複数あっても、どれを使っても構わない。
  • さらに、"Protect against accidental termination"をチェックする。これを設定することで、突然マネージャインスタンスが落ちることを防ぐことができる。その代わり、通常の方法でマネージャインスタンスを止めるためには、この設定を解除する必要がある。
  • さらに、"Advanced Details"に以下を貼りつける (オリジナルのスクリプトは、 https://docs.fires.im/en/latest/Initial-Setup/Setting-up-your-Manager-Instance.html を参照のこと)。
#!/bin/bash
echo "machine launch script started" > /home/centos/machine-launchstatus
sudo yum install -y mosh
sudo yum groupinstall -y "Development tools"
sudo yum install -y gmp-devel mpfr-devel libmpc-devel zlib-devel vim git java java-devel
curl https://bintray.com/sbt/rpm/rpm | sudo tee /etc/yum.repos.d/bintray-sbt-rpm.repo
sudo yum install -y sbt texinfo gengetopt
sudo yum install -y expat-devel libusb1-devel ncurses-devel cmake "perl(ExtUtils::MakeMaker)"
# deps for poky
# pokyに必要なパッケージのインストール
sudo yum install -y python34 patch diffstat texi2html texinfo subversion chrpath git wget
# deps for qemu
# qemuに必要なパッケージのインストール
sudo yum install -y gtk3-devel
# deps for firesim-software (note that rsync is installed but too old)
# firesim-softwareに必要なパッケージのインストール(rsyncはインストールされるが、非常に古い)
sudo yum install -y python34-pip python34-devel rsync
# install DTC. it's not available in repos in FPGA AMI
# DTCのインストール。これはFPGA AMIのリポジトリでは入手できないので、ソースからインストールする。
DTCversion=dtc-1.4.4
wget https://git.kernel.org/pub/scm/utils/dtc/dtc.git/snapshot/$DTCversion.tar.gz
tar -xvf $DTCversion.tar.gz
cd $DTCversion
make -j16
make install
cd ..
rm -rf $DTCversion.tar.gz
rm -rf $DTCversion

# get a proper version of git
# 標準バージョンのgitをインストール
sudo yum -y remove git
sudo yum -y install epel-release
sudo yum -y install https://centos7.iuscommunity.org/ius-release.rpm
sudo yum -y install git2u

# install verilator
# Verilatorのインストール
git clone http://git.veripool.org/git/verilator
cd verilator/
git checkout v4.002
autoconf && ./configure && make -j16 && sudo make install
cd ..

# bash completion for manager
# bashの補完機能のインストール
sudo yum -y install bash-completion

# graphviz for manager
# Graphvizのインストール
sudo yum -y install graphviz python-devel

# these need to match what's in deploy/requirements.txt
# 作業に必要なPythonパッケージのインストール
sudo pip2 install fabric==1.14.0
sudo pip2 install boto3==1.6.2
sudo pip2 install colorama==0.3.7
sudo pip2 install argcomplete==1.9.3
sudo pip2 install graphviz==0.8.3
# for some of our workload plotting scripts
# 付加をプロットするためのスクリプトで使用するためのパッケージ
sudo pip2 install --upgrade --ignore-installed pyparsing
sudo pip2 install matplotlib==2.2.2
sudo pip2 install pandas==0.22.0
# this is explicitly installed to downgrade it to a version without deprec warnings
# cryptographyのインストール。deprecの警告を出さないために、明確にバージョンを指定する。
sudo pip2 install cryptography==2.2.2

sudo activate-global-python-argcomplete

# get a regular prompt
# 通常のプロンプトの設定
echo "PS1='\u@\H:\w\\$ '" >> /home/centos/.bashrc
echo "machine launch script completed" >> /home/centos/machine-launchstatus
f:id:msyksphinz:20190406013335p:plain
Configure Instance Detailのページ。

とても長いスクリプトだが、、これはインスタンスを立ち上げる際に最初に実行されるスクリプトで、これにより自動で必要なパッケージがインストールされたり、FireSimの動作に必要なツールがインストールされる。

次にストレージの追加だ。EBSのディスクボリュームを300GB程度まで引き上げる。デフォルトでは75GB程度だったが、Vivadoなどで論理合成を行ったりシミュレーションを実行するとすぐにディスクがなくなってしまうので、300GB程度まで上げておく。セカンダリの5GBのボリュームは不要なので消して良い。

f:id:msyksphinz:20190406013556p:plain
ストレージの追加。300GB程度確保しておく。

セキュリティグループの設定では、”Select an existing security group"を選択し、firesimと書かれているセキュリティグループを選択する。

f:id:msyksphinz:20190406013627p:plain
セキュリティグループの設定。firesimのセキュリティグループを選択する。

ここまで来たらインスタンスの設定は完了となる。[Review and Launch]から[Launch]をクリックする。このとき、キーペアとして、先ほど作成した"firesim"のキーペアを使用すること。

インスタンスが立ち上がると、c4.4xlargeインスタンスにアクセスできるようになる。 これは、t2.nanoインスタンスにアクセスしたときと同様に、"firesim"のキーペアを指定してログインする。 ユーザ名"centos"を入力すると、ログインできる。

f:id:msyksphinz:20190406013833p:plain
マネージャインスタンスにログインできた。

ただし、まだ上記で指定した起動時のスクリプトは実行されている最中かもしれない。~/machine-launchstatusを見て確認してみる。

cat machine-launchstatus
machine launch script started
machine launch script completed

上記のように出力されれば、初期化処理は完了していることが分かるので、手順を先に進めてよい。