ISUCON4 予選当日マニュアル
当日の流れ
- 10:00 競技開始
- 18:00 競技終了
- 2014年9月29日 10:00 (JST) までに AMI を提出
ISUCON4 予選ポータルサイト
http://isucon4-portal.herokuapp.com/
上記リンクを開き、チームの API キーを入力してログインしてください。 benchmarker(後述)で測定したスコアはこのポータルに送られ、集計結果を見ることができます。
競技終了後、AMI の提出もこのポータルから行います。
Getting Started
はじめに以下の操作を行い、問題なく動くかを確認して下さい。
1. 指定された AMI で EC2 インスタンスを起動する
AWS のクーポンコードを利用する場合、EC2 インスタンスを起動する前に以下の URL からコードを入力してください。
https://console.aws.amazon.com/billing/home#/credits
以下の設定で EC2 インスタンスを1台起動してください。
-
Instance Type: m3.xlarge
-
EBS Optimization: なし
-
Root Volume: 8GB, Magnetic
-
Security Group:
TCP 22 (SSH)
とTCP 80 (HTTP)
をInbound 0.0.0.0/0
から利用できるようにしてください。
2. 起動したEC2インスタンスに ec2-user
ユーザで SSH ログインする
例:
ssh -i ~/.ssh/your_private_key.pem ec2-user@xx.xx.xx.xx
3. アプリケーションの動作を確認
EC2インスタンスのパブリック IP アドレスにブラウザでアクセスし、動作を確認してください。以下の画面が表示されるはずです。
例として、ここで求められる「お客様ご契約ID」は isucon1
、 「パスワード」は isuconpass1
を入力することでログインが行えます。
その他の利用可能な ID・パスワードについては、 /home/isucon/sql/dummy_users.tsv
に記載されています。
この TSV ファイルの第2カラムと第3カラムが、それぞれ「お客様ご契約ID」と「パスワード」です。
# dummy_users.tsv
1 isucon1 isuconpass1 salt1 6d7de4d284887f04c5a1d9e3431e9d7865a88bb6a7eab73ea6a22ac2d51d4db0
2 isucon2 isuconpass2 salt2 70f91bb24f94f2da37aeaeef0727a350190ce2a765d589da33d7c5f29b0039cc
3 isucon3 isuconpass3 salt3 6a303e306193775296190f831418784a59a281a3fae688d0aea0ae546a93e6c2
...
なお、ブラウザでアクセスできない場合、EC2 インスタンスの Security Group の 80 番ポートが開いていることを確認してください。
4. 負荷走行を実行
EC2 インスタンス上で以下の操作を行ってください。
[ec2-user@ip-xxx ~]$ sudo su - isucon
[isucon@ip-xxx ~]$ ls
benchmarker env.sh gocode init.sh sql webapp
[isucon@ip-xxx ~]$ ./benchmarker bench --api-key あなたのチームのAPIキー
この操作後、ポータルにて、あなたのチームのスコアが反映されているか確認して下さい。
ディレクトリ構成
参考実装のアプリケーションコードおよび、スコア計測用プログラムは /home/isucon
ディレクトリ以下にあります。
/home/isucon
├ benchmarker # スコア計測用プログラム
├ init.sh # 初期化スクリプト
├ env.sh # アプリケーション用の環境変数
├ sql/ # データベース初期化用SQL (benchmarker および init.sh で利用)
└ webapp/ # 各言語の参考実装
参考実装の言語切り替え方法
参考実装の言語は Ruby, Python, PHP, Perl, Go, Node.js が用意されており、初期状態では Ruby の実装が起動しています。
80番ポートでアクセスできるので、ブラウザから動作確認をすることができます。
起動する実装を Ruby 以外に切り替えるには、まず supervisord
を終了させます。
sudo /etc/init.d/supervisord stop
その後、 /etc/supervisord.conf
において希望の言語を autostart=true
にし、 [isucon_ruby]
を autostart=false
したうえで、
sudo /etc/init.d/supervisord start
を実行することで切り替えることができます。
PHP の場合
なお、PHP を利用する場合のみ、上記に加えて、以下の操作を行ってください。
sudo mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.orig
sudo mv /etc/nginx/nginx.php.conf /etc/nginx/nginx.conf
sudo /etc/init.d/nginx restart
benchmarker
benchmarker の help は以下のコマンドで見ることができます。
[isucon@ip-xxx ~]$ ./benchmarker help bench
(ヘルプが表示される)
benchmarker のおもな仕様は以下のとおりです。
--api-key
を指定すると、負荷走行の成功時には、ポータルにスコアが送信される。- ポータルが受理したスコアのうち最後のスコアが、そのチームのスコアとして採用される。
--workload N
オプションで負荷走行の並列度を指定することができる。並列度は1以上の整数で、どのような値を指定してもよい。--init FILE
オプションで負荷走行開始前に実行される初期化スクリプトを指定できる。デフォルト値は/home/isucon/init.sh
であり、このスクリプトではデータベースの初期化を行っているので、参考のこと。なお、初期化スクリプトは1分以内に完了しなければならない。- AMIの提出時には、最終スコアが計測された時の benchmarker の起動オプションもあわせて提出する。
- 負荷走行の最後に、 benchmarker は5秒の待ち時間をおいた後、
/report
にリクエストを行う。この/report
は1分以内にレスポンスを返さなければならない。 - benchmarker は
/home/isucon/sql/dummy_users.tsv
と/home/isucon/sql/dummy_users_used.tsv
を利用しているため、これらのファイルの中身を編集してはならない。- 初期状態のチェックサムと異なる場合、benchmarker は起動しない。
- benchmarker は
X-Forwarded-For
リクエストヘッダを変えながらアプリケーションに対しリクエストを行うので、アプリケーションではこれをリモート IP アドレスとして解釈する必要がある。
MySQL
3306 番ポートで MySQL が起動しています。初期状態では以下のユーザが設定されています。
- ユーザ名:
isucon
, パスワード:isucon
- ユーザ名:
root
, パスワードなし
なお、 /home/isucon/init.sh
を実行することで、データベースおよびテーブルのデータを初期状態に戻すことができます。
ルール詳細
ISUCON4(2014) オンライン予選レギュレーション : ISUCON公式Blog
なお、予選レギュレーションと本マニュアルの記述に矛盾がある場合、本マニュアルの記述が優先されます。
スコアについて
スコアは加算方式であり、いかなるレスポンスにおいても減点は行われません。
- 静的ファイルが期待通りのレスポンスを返す: 0.01点/req
- ただし、MD5ハッシュ値が初期状態から変化していた場合は得点に加算されない
- HTML が期待通りのレスポンスを返す: 1点/req
- ただし /report のレスポンスは得点には加算されない
- 負荷走行の完了時、スコアの小数点以下は切り上げられる
なお、以下の場合はスコアはポータルに送信されず、最終スコアとして採用されることはありません。
/report
が1分以内にレスポンスを返さない/report
のレスポンスの内容が間違っている- API キーが設定されていないか、間違っている
以下の場合は、負荷走行は実行されず、スコアは送信されません。
/home/isucon/sql/dummy_users.tsv
と/home/isucon/sql/dummy_users_used.tsv
が編集されている (初期状態のチェックサムから変化している)--init
オプションで指定したスクリプトが1分以内に完了しない
許容される行為
以下の行為は違反ではありません。
- 見た目が変化しない程度に静的ファイルを変更する行為
- なお、減色や圧縮などの最適化は許されるが、MD5ハッシュ値が変化するため、スコアには加算されなくなるので注意
- 作業用に複数のEC2インスタンスを起動する行為
- 提出したAMIを用いて、1台でスコアが再現できない場合は失格となるので注意
- 作業用にEBSボリュームを追加する行為
- 提出したAMIを用いて、ルートボリューム(8GB)のみでスコアが再現できない場合は失格となるので注意
- その他、レギュレーションで許可されている行為
AMIの提出と審査について
競技終了後にポータル画面をリロードすると、AMI の提出画面へのリンクが表示されます。そこに表示されている指示に従い、期日までに AMI を提出してください。
審査員は、提出された AMI から EC2 インスタンス(m3.xlarge、ルートボリュームは Magnetic EBS 8GB)を1台起動したうえで、AMI 提出時に指定された起動オプションで benchmarker を実行し、スコアの再現性などについて確認を行います。
以下のいずれかに当てはまる場合は、失格にすることがありますので、十分に気をつけてください。
- 期日までにAMIを提出できなかった場合
- アプリケーションの見た目や挙動が著しく変化していた場合
- 最終スコアより著しく低いスコアしか再現できなかった場合
- インスタンス起動時に自動的にアプリケーションが立ち上がらなかった場合
- その他、レギュレーションで規定された反則行為が確認された場合
当日サポートについて
競技中、別途アナウンスされる Idobata のチャットルームにて、サポートを行います。 ルールについてや、基本的なトラブルの質問にはお答えできますが、benchmarker およびアプリケーションに関する質問には原則として回答しません。予めご了承ください。
よくある質問
チャット等で問い合わせのあった質問と、その回答は以下に掲載しています。随時更新するので、質問する前に確認してみてください。