tagomorisです。もうISUCON5決勝から1ヶ月が経ってしまいましたが、いくつか準備も整えまして、ISUCON5決勝で用いた環境のGoogle Cloud Platform用イメージを用意できましたので公開します。
HTTPS: https://storage.googleapis.com/isucon5-images/isucon5-final-1.tar.gz GCS: gs://isucon5-images/isucon5-final-1.tar.gz
ISUCON5決勝では参加者用Webアプリケーションおよびベンチマークツールの他に外部APIのサーバプロセスも必要でしたが、このイメージはそれらを全て含んでいます。インスタンスを作成して起動すればベンチマークが通る状態で起動するはずです。

Name は適当で構いません。Source は "Cloud Storage file" を選択し、その下の入力欄に
CLIからだと
起動したら
最後のコマンドが実際のベンチマーク実行です。
このコマンドでは直接のスコア算出までは行われませんが、簡単に算出できます。詳しくは以下のレギュレーション文書をご確認ください。
ISUCON5 決勝レギュレーション ルール詳細
これで作業をする準備は完了です。
API Endpointの接続先を KEN API EndpointのListen Portを KEN API EndpointのServer Process数を
また先日のエントリにて言及していたチェッカーのバグについては修正済みになっています。
決勝と同じような環境を作成したい場合、以下のような点に気をつければよいでしょう。
API, Bench, WebApp(x3) 用の5インスタンスを作成(全て同一イメージでよい) APIサーバ: n1-highcpu-16 or n1-highcpu-32 (決勝イベントでは12core, 24vCPU) APIサーバ作成時、ネットワーク設定として HTTP, HTTPS のほかに port 8081, 8082, 8988 へのアクセスを有効にする Benchサーバ: n1-highcpu-8 or n1-highcpu-16 (決勝イベントでは6core, 12vCPU) WebAppサーバ: n1-highcpu-4 (決勝イベントでは 3core, メモリ4GB) WebAppサーバの
上記構成でインスタンスを起動後、BenchサーバからWebAppサーバ(のどれか1台のIPアドレス)を指定してベンチマークを実行すれば、ほぼ決勝と同じ環境になっていると言えると思います。またごく最近、Google Compute EngineではCPU/メモリをカスタマイズしたインスタンスを作成できるようになりました。これを使って決勝の構成とぴったり同じCPU数・メモリ容量にしてみるのも良いかもしれません。
ISUCON5決勝では参加者用Webアプリケーションおよびベンチマークツールの他に外部APIのサーバプロセスも必要でしたが、このイメージはそれらを全て含んでいます。インスタンスを作成して起動すればベンチマークが通る状態で起動するはずです。
イメージの取り込み
Google Cloud Platformでは上記URLからイメージとして取り込む作業を行う必要があります。GCP Developers Consoleにログイン後、Compute EngineのImagesから[+] NEW IMAGEを開きます。

Name は適当で構いません。Source は "Cloud Storage file" を選択し、その下の入力欄に
isucon5-images/isucon5-final-1.tar.gzを入力します。正常に認識されたら
Createのボタンが有効になるはずなので、クリックすれば完了です。
CLIからだと
gcloud compute images create IMAGE_NAME --source-uri URIで行えます。URIには上述 https のURIを指定します。
インスタンス作成、ベンチマーク実行
あとはインスタンス作成時にイメージとして取り込んだ時の名前を指定して実行するだけです。インスタンスタイプなどは適当なものを使用すればよいと思います(決勝同等の環境の作成については後述)が、少なくともCPU数が4以上のものを選択すると良いと思います。Webアプリケーション・ベンチマークツールに加えてAPIサーバが複数プロセス起動するためです。1〜2CPUでは普通のスコアは出ないのではないかと思います。 また作成時には "Allow HTTP traffic" を有効にしておくと良いでしょう。起動したら
gcloud compute ssh INSTANCE_NAMEでログイン後、以下のコマンドを実行すればベンチマークが実行されます。
sudo su - isucon
cd /home/isucon/isucon5-final/bench/
export ISUCON_BENCH_DATADIR=$(pwd)/json
cat ../data/source.json | ruby -rjson -e 'puts JSON.parse(STDIN.read)[0].to_json' | gradle run -Pargs="net.isucon.isucon5f.bench.Full 127.0.0.1"
最後のコマンドが実際のベンチマーク実行です。
[0]から
[19]までの20セットが使えます。ベンチマークが走りきれば、以下のような結果が出力されるでしょう。
{
"valid" : true,
"requests" : 1079,
"elapsed" : 77266,
"done" : "[{Init},{Bootstrap},{Checker,ModifyLoader,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load,Load}]",
"responses" : {
"success" : 997,
"redirect" : 82,
"failure" : 0,
"error" : 0,
"exception" : 0
},
"violations" : [ ]
}
このコマンドでは直接のスコア算出までは行われませんが、簡単に算出できます。詳しくは以下のレギュレーション文書をご確認ください。
ISUCON5 決勝レギュレーション ルール詳細
これで作業をする準備は完了です。
イメージでの変更点
このイメージはAll-in-oneイメージとするため、以下の点についてイベント当日から修正しています。/etc/hostsの修正により
127.0.0.1に変更
/home/isucon/webapp/sql/initialize.sqlの修正により
8082に変更
64から
8に変更
また先日のエントリにて言及していたチェッカーのバグについては修正済みになっています。
決勝同等の環境の作成
All-in-oneイメージはISUCON5決勝の問題を体験するには便利ですが、スコアは実際の決勝イベントとは較べられないものになります。これはベンチマークツールやAPIサーバが同一ホスト上で動いていることなどによります。決勝と同じような環境を作成したい場合、以下のような点に気をつければよいでしょう。
/etc/hostsにおいて
api.five-final.isucon.netの行の宛先IPアドレスにAPIサーバのPublic IP Addressを記述する
上記構成でインスタンスを起動後、BenchサーバからWebAppサーバ(のどれか1台のIPアドレス)を指定してベンチマークを実行すれば、ほぼ決勝と同じ環境になっていると言えると思います。またごく最近、Google Compute EngineではCPU/メモリをカスタマイズしたインスタンスを作成できるようになりました。これを使って決勝の構成とぴったり同じCPU数・メモリ容量にしてみるのも良いかもしれません。