👣

M1 Macでcloud-initi&MultipassでISUCON12の環境構築を行う

2023/06/15に公開

こんにちは、株式会社Voicyでバックエンドエンジニアをしている、勝山です。
今回は11月に開催されるISUCONに向けて練習がてら過去問をしようと思いました。
昨年出場したISUCON12が公開されていたので、そちらを環境構築した手順をまとめていこうと思います。

https://github.com/matsuu/cloud-init-isucon
こちらのUsageを参考に構築しました。
Multipassという仮想化ツールを使って環境構築をしました。

Multipassとは

ローカルでUbuntuの軽量な仮想マシンを作成・管理するためのツール。
VirtualBoxやVMWareといった仮想ツールよりもシンプルなインターフェースを持っている。コマンドラインから簡単に操作でき、新しい仮想マシンの作成や既存マシンへのSSH接続、マシンの破棄などが可能。

環境構築手順

multipassのインストール

brewでmultipassをインストールします。

brew install multipass

先ほどのレポジトリをgit clone

こちらのレポジトリです。
https://github.com/matsuu/cloud-init-isucon

git clone https://github.com/matsuu/cloud-init-isucon.git
cd cloud-init-isucon

cloud-initを使って起動

今回はisucon12の予選の環境を構築したかったので、isucon12qとしています。

multipass launch --name isucon12q --cpus 2 --disk 20G --memory 4G --timeout 86400 --cloud-init isucon12q/isucon12q.cfg 22.04
オプション名 説明
name インスタンス名
cpus インスタンスに割り当てるcpuの数
disk インスタンスのディスクサイズ
memory インスタンスのメモリサイズ
22.04 Ubuntuのバージョン

起動には30分ほどかかりました。
途中で以下のようなエラーが出ますが、バックグラウンドで起動は進んでいるため、焦らずログをみましょう。

launch failed: The following errors occurred:
timed out waiting for initialization to complete

こちらのコマンドでログを見ることができます。

multipass exec isucon12q -- tail -f /var/log/cloud-init-output.log

こちらのログでdoneが出ていたら起動完了です。

1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.

Ubuntuの中に入る、ユーザー変更

以下のコマンドで立ち上げたインスタンスの中にいることができます。

multipass shell isucon12q

ISUCONのマニュアルにもある通り、ユーザーをisuconに変えましょう。

sudo -i -u isucon

ベンチマーク実行

https://github.com/isucon/isucon12-qualify
ISUCONの当日マニュアルにもある通り、以下のコマンドでベンチを回すことができます。

cd /home/isucon/bench
./bench                               # 127.0.0.1:443 に対して実行
./bench -target-addr 203.0.113.1:443  # IPアドレスを指定し別のホストに対して実行

alpの導入

Nginxのログ解析のため、alpを導入しました。
こちらよりダウンロードしたいバージョンを選択します。
https://github.com/tkuchiki/alp/releases

wget https://github.com/tkuchiki/alp/releases/download/v1.0.12/alp_linux_arm64.tar.gz
tar -zxvf alp_linux_arm64.tar.gz

実際にalpをインストールします

sudo install alp /usr/local/bin/alp

これでとりあえずベンチを回すことができました。
ここからパフォーマンス改善などに着手していきたいと思います。

Voicyテックブログ

Discussion