2020.09.07 13:30 禁止事項(他チームと結託する行為、問題にまつわる事項のやりとり)を追加
2020.08.31 10:00 提供予定のOSと参考実装について追記
2020.07.08 18:00 学生枠についての補足を追記
----

参加者

予選参加者(以下選手)はチームで登録するものとし、チームは1名、2名、もしくは3名での登録とする。チームは「一般枠」「学生枠」のいずれかに登録される。予選へ参加するチームの合計は 500 を超えないものとし、参加登録は先着順とする。本選参加チームは 30 チームとし、予選の競技結果から選出される。
  • 一般枠: 学生枠に該当しない参加チーム
  • 学生枠: 同一チームの選手 (チームメンバー) 全員が学生・生徒であること (年齢は問わないが社会人学生は対象外とする)
    • 参加登録時に選手はそれぞれ学生であることを自己申告する。チームメンバー全員が学生として参加登録している場合、そのチームは学生枠へ登録される (学生チーム)。申告せず一般枠で参加しても問題はない。
    • 学生であり正社員として雇用もされている場合、予選実施段階での学業比率により参加枠を判断するので運営へ問い合わせてください(例:週5日のフルタイム勤務の場合は社会人枠として参加とします)

    競技日程

    予選: 2020年9月12日(土) 10:00〜18:00(JST)
    これまで (ISUCON9 等) の 2 日開催と違い、予選は今回 1 日のみ開催する。


    連絡手段

    参加登録時に主催者から案内するサポートチャット (Discord)、もしくは主催者が運営する Web サイト (ポータル等) を連絡手段とする。原則として競技中の質問・サポート対応はポータル、競技中および競技時間前後の全体アナウンスはサポートチャットを利用する。

    全選手は必ずサポートチャットへログインし、通知等を設定するなど、連絡を確認できるようにすること。また、競技中はポータルサイトも確認すること。そして、主催者からの対応が必要な連絡に対し適切に対応しなかった場合、選手およびチームは円滑に競技へ参加できなくなる可能性について留意すること。

    主催者は質問への対応等に際し、必要に応じてサポートチャットにおいて選手およびチームとチャットを開始する場合がある。その呼び掛けを行う際、主催者は Discord 上の mention 機能を利用する。

    質問

    選手は主催者へ質問を送信することができる。競技時間中は原則としてポータルから、競技前後はサポートチャットを利用する。質問は競技内容・マニュアル・レギュレーション等に対する疑問点・明確にしたい事項の確認や、サーバー障害などのトラブル報告・サポート依頼に利用することができるが、これに限らない。主催者は質問された内容について競技の一環である場合は、回答できない旨返答することがある。

    競技時間中の質問について、主催者からの回答は全選手へ公開、あるいは個別に回答される。全選手へ公開される場合、質問内容の原文、あるいは主催者による内容の要約が公開される。未回答の質問・未公開の回答については質問した選手およびそのチームメンバー、主催者のみが確認できる。質問への回答/更新はポータルサイト上にて選手へ通知される。

    主催者は競技時間中の質問への回答について、原則として全選手へ公開する。ただし、重複する質問や、選手およびチーム個別の問題 (サーバ障害など) に対する対応の場合、この限りではない。


    ソフトウェア事項

    選手は主催者からWebアプリケーション (問題) が与えられ、選手は競技時間内にその Web アプリケーションの高速化を行う。選手は高速化された実装 (回答) を作成する時、主催者より与えられたソフトウェア (初期実装) をベースに実装しても良いし、しなくても良い。 どのプログラミング言語で初期実装が提供されるかは主催者は事前にアナウンスするが、その各々の性能が一致することは保証されない。

    2020.08.31 追記
    予選問題に使われるOSはUbuntu、提供する参考実装は Go,Node.js,Perl,PHP,Python,Ruby,Rustを予定。

    高速化の際、主催者より問題として与えられた Web アプリケーションから、以下の部分は変更しないこと。
  • アクセス先のURI、ただしサーバー側で生成する部分(IDなど)は文字種([0-9] や [0-9a-zA-Z_] など)を変えない範囲で自由に生成しても良い
  • レスポンス (HTMLのDOM, JSONオブジェクト等) の構造(表示に影響しない範囲での空白文字の増減は許可される)
  • JavaScript/CSSファイルの内容
  • 画像および動画等のメディアファイルの内容


  • 各サーバにおけるソフトウェアの入れ替え、設定の変更、アプリケーションコードの変更および入れ替えなどは一切禁止しない。 ベンチマーク中にポータル・マニュアル・レギュレーションといった、主催の指示以外で利用が認められたサーバー以外の外部リソースを使用する行為(他のインスタンスに処理を委譲するなど) は禁止する。 ただしモニタリングやテスト、開発などにおいては、PCや外部のサーバーを利用しても構わない。

    許可される事項には、例として以下のような作業が含まれる。
  • 複数台あるサーバーの役割の変更
  • DBスキーマの変更やインデックスの作成・削除
  • データベースに利用するミドルウェアの変更
  • キャッシュ機構の追加、ジョブキュー機構の追加による遅延書き込み
  • 他の言語による再実装


  • ただし以下の事項に留意すること。
  • コンテスト進行用のメンテナンスコマンドが正常に動作するよう互換性を保つこと
  • サーバ再起動後にすべてのアプリケーションコードが正常動作する状態を維持すること
  • ベンチマーク実行時にアプリケーションに書き込まれたデータは再起動後にも取得できること


  • ソフトウェア事項の詳細は競技当日に主催者より公開されるマニュアル (当日マニュアル) に記載され、当日マニュアルに記載されている内容が本レギュレーションに記載されている内容より優先される。


    サーバー事項

    選手は主催者が用意したインスタンスで Web アプリケーションを動作させ、競技へ参加する。インスタンスへの接続は踏み台サーバを経由したSSHで行う。具体的な接続方法、および資格情報は事前および当日マニュアル・ポータルなど主催者の指示に従うこと。レギュレーション公開時点では、SSH 公開鍵認証を用いる場合、主催者は公開鍵は選手の GitHub アカウントに登録されているものを利用する予定である。

    踏み台を経由した接続には ssh_config(5) の
    ProxyJump
    ProxyCommand
    LocalForwarding
    などを用いた接続をさします。例を以下に示します。なお、あくまで例示であり必ず以下の設定を利用する必要はありません。
     Host isucon-bastion
    HostName <指示された踏み台サーバ>
    User <指示されたユーザー名>

    Host isucon-server
    ProxyJump isucon-bastion
    HostName <指示されたインスタンスのアドレス>
    LocalForward localhost:10443 localhost:443

    採点

    採点は採点条件をクリアしたチームの間で、性能値 (スコア) の高さを競うものとする。

    主催者は性能計測ツール (ベンチマーカ) を選手に提供する。選手がツールへ実行リクエストを送る事で、ツールから選手に提供されているインスタンスに対し計測用の処理が実行され、スコアが記録される。 採点条件・性能値・ベンチマーカについての詳細は、当日マニュアルに記載する。

    備考

    予選終了後、主催者はインスタンスに対して再起動を含む性能計測の追試を行う。 複数台のインスタンスが提供されており、それを使用していたとしても、主催者がインスタンスを再起動する順序は保証しない。

    ここで、アプリケーションがレギュレーション・マニュアル・ベンチマーカ実装など、主催者の意図通り正常に動作しない、あるいは競技時間中に登録されたスコアに近い結果が再現されない場合、ベンチマークの結果に捏造があると判断される場合には、判断基準の公開と共にそのチームは失格とする。 失格が発生した場合や本選出場チームが何らかの理由で本選参加を辞退した場合、適宜繰り上げをおこない、本選出場チームを選出する。


    本選出場チームの選出

    競技時間中に記録されたスコアによって、本選出場する30チームが選出される。選出に用いるスコアは原則として競技時間内の最後に記録された値 (予選終了時スコア) を用いる。
    競技時間中、最後のベンチマーク実行が失敗し、スコアが記録されていなかったチームは、失格となる。

    最終スコアが同一だった場合、最高スコアが高かったチームを選出する。最高スコアも同一だった場合は、そのスコアを先に記録したチームを選出する。
  • 一般枠 (25チーム)予選終了時スコアにおける上位25チーム
  • 学生枠 (5チーム)学生チームの中で、予選終了時スコアにおける上位5チーム

  • ただし、学生チームが前述の一般枠の基準で通過できる場合、学生枠にはそのチームを含めずに5チームを選出する。


    禁止事項

    以下の行為を特に禁止する。
  • 予選の競技終了時間までに、競技の内容に関するあらゆる事項 (問題内容・計測ツールの計測方法など)を公開・共有すること(内容を推察できる発言も含む)
    • 不特定多数への公開はもちろん、他チームの選手と連絡を取り、問題内容等を共有する事 (結託行為) も禁止とする。
    • ただし主催者が Twitter, Web サイトにおいて公開している情報は除く。ポータルサイトにおけるログインを要するページにおいて記載されている内容は公開情報でない旨留意すること。
  • 主催者が他チームへの妨害、競技への支障となるとみなす全ての行為
  • 主催者が競技に不必要とみなす競技環境からのネットワークアクセス
    • 競技に必要なネットワーク利用としては、主催者の指示 (レギュレーション, マニュアル等含む) で許可・想定されている行為、提供されたインスタンスの初期状態で利用可能なサービスや、外部のバージョン管理システム (GitHub 等)、ソフトウェアパッケージのリポジトリ (apt, yum リポジトリや、docker, npm, RubyGems レジストリ, proxy.golang.org 等) が例として挙げられる。
    • 一方、提供されたインスタンスからインターネットまでの経路上にあるホスト等、選手がその選手へ提供されていないホストについて直接のアクセスを試みる行為や、外部への不正アクセスを試みる行為は、主催者により不必要と判断される場合がある。なお、例示のため、これに限らない。
  • 他チームと結託する行為 (程度を問わず)
  • 競技時間中、チーム外の人物と ISUCON10 問題にまつわる事項のやりとり (ISUCON10 参加者であるかどうかを問わない、SNS での発言も含む)

  • 本レギュレーション, ポータルサイト, また当日マニュアルにおいて禁止とされた行為 (禁止事項) への違反は、失格となる。