Skip to content

Instantly share code, notes, and snippets.

@acidlemon
Created August 15, 2014 07:49
Show Gist options
  • Save acidlemon/049fe8c9a790a52814fc to your computer and use it in GitHub Desktop.
Save acidlemon/049fe8c9a790a52814fc to your computer and use it in GitHub Desktop.
ISUCON 2013 本戦レギュレーション

ISUCON 2013 本戦レギュレーション

いつもの

競技は運営の用意したベンチマークのスコアの高さで優劣を競います。スコアが高くなれば高くなるほど優秀です。初期実装はGo, Javascript(Node), Perl, PHP, Python, Rubyの6言語を提供します。それ以外の言語で再実装するのは自由です。

採点基準は以下の通りです。

  • 一定時間内にリクエストを処理できた回数が多いほど高スコア
  • 特定のリクエストのレスポンスタイムが速いと高スコア(後述のベンチマーク仕様に詳細を記載しています)
  • チェッカが1回でもエラーを検出するとその回の計測は失格
  • POSTされた情報は即時反映される必要がある
  • サーバを任意のタイミングで再起動して正しくWebアプリケーションが正しく動作する

以下の項目を変更するとチェッカがFAILする可能性があります。

  • アクセス先のURI
  • レスポンス(JSON)の構造
  • ブラウザで表示した際の見た目(問題ない範囲で)
  • アプリケーションが提供するデータの一貫性の保持

以下の項目はチェッカがFAILしない限り自由に変更可能です。

  • DBスキーマの変更やインデックスの作成・削除、キャッシュ機構の追加
  • jobqueue機構の追加による遅延書き込み (レギュレーションの一貫性に関する条項を満たすこと)
  • 他の言語による再実装
  • Webサーバソフトウェアやデータベースソフトウェアの変更
  • ただしコンテスト実施上必要ないくつかのメンテナンス機能について互換性を保つこと

以下の行為は特別に禁止します。

  • 他のチームへの妨害と主催者がみなす全ての行為
  • 与えられた5台のサーバ以外の利用(他チームのサーバやクラウドサービスなど)
  • 椅子やマサカリの投擲などの物理的な攻撃、および威嚇

作業時間

  • 会場が分散しているため、全員のスタンバイを確認後に運営が開始の合図をします。合図があるまではサーバのログイン情報の書かれた封筒を開けないでください
  • 作業時間は11時(目安)から18時00分までです
  • 18時すぎに運営側で一斉再起動を行います(起動順の保証はありません)
  • 再起動後、順次3分間のベンチマークを行います
  • 運営側の本番計測結果が最終スコアとなります
  • お昼ごはんを運営側で準備していますので、是非食べてください。残っても運営が困ります。

サーバ情報

ハードウェア

以下のスペックのVMを5台用意しています。

  • CPU: 2コア
  • メモリ: 4GB
  • HDD: 20GB
  • NIC2つ: 外部用(1Gbps)と内部用(1Gbps)
  • ネットワークの注意点
    • ベンチマークは外部用NICからかかります。この際、ベンチマークからサーバへアクセスする時の帯域は1台あたり100Mbpsが上限です
    • 会場からはグローバルIPでアクセスしてください

ソフトウェア

  • CentOS 6.4 (x86_64)
  • OS/カーネルの入れ替えは自由です
  • 入れ替えに伴うトラブルについて、運営側はハングアップ時のリセットのみ対応します

サーバアカウント情報

  • 最初のレギュレーション説明時に各チームへ封筒で配布します
  • 封筒の中にはユーザ名とパスワード、およびsshで接続するためのグローバルIPとマシン間をつなぐためのローカルIPを記載しています

ベンチマーク仕様

ベンチマークシステムの概要

  • 各チームに与えられた5台からどのサーバへベンチマークをかけるかを任意に指定できます
  • 1〜5台指定可能です。複数指定した場合はラウンドロビンでアクセスします
  • 作業中は1分でスコアを計測します
  • 最終計測は3分でスコアを計測します
  • 1〜20の範囲でworkloadの指定ができます

スコア算出方法

以下の(a), (b), (c)の総和がスコアとなります。

  • (a) 投稿スピード点 = レスポンスタイムが速いほど高スコア
  • (b) タイムライン反映速度点 = 投稿したエントリの情報が反映されるのが速いほど高スコア
  • (c) その他リクエスト点 = 1点

レスポンスタイム依存のスコア(a), (b)は以下のように1リクエストのスコアを算出します。

  • log( 10 / response_time ) / log(2)
    • 5.00秒 → 1点
    • 1.00秒 → 3.3点
    • 0.10秒 → 6.64点
    • 0.01秒 → 9.9点

チェッカがFAILを検出した場合 = 最終スコア0点となります。予選と違い、FAILが出た場合は一発アウトです。

作業上の諸注意

  • データのリセット方法
    • 1台目のサーバにDBの初期データがありますので適宜mysqldumpで復元してください
    • 初期データはうっかり消すと取り返しのつかないことになります(運営では対応しません)
    • 初期データはうっかり消すと取り返しのつかないことになります(大事なことなので2回)
  • ベンチマークの順番待ち
    • ベンチマークの同時実行数には制限があります。ベンチマークをすぐ実行出来ない場合は実行コマンドがその旨表示しますのでしばらくお待ちください。

その他

  • 作業ミス等によりサーバの応答がなくなったときはご連絡ください。運営側で無慈悲なリブートを実施します。
  • ベンチマークのFAIL理由は基本的に書いてあるとおりです。もし理不尽なFAILと思われる場合(トラブルの場合)は運営側へ速やかに申し出てください。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment