ISUCON11出場して予選落ちしてきた。
https://gyazo.com/0d3d4fac757f7f15a208608b03bdf5bahttps://gyazo.com/e7b75513395a58b74901df754be2a86d
手元での最終点数は6万点台、参考スコアでもこれぐらいだったのでまあそれぐらいの点数が出たということです。 全体的な感想としては、もう1改善ぐらいできたら本戦に行けたんじゃないかという感じがして悔しい感じがする……。
前日までの準備
https://gyazo.com/934daf3081144b09c86217a31ff2bcb5
環境確認がCloudFormationを流すだけでStack完成してすごい。本番の環境もすごくよくできていてよかった。運営の方々ありがとうございます。 本番でやったこと
前述の通り、準備を全くしていなかったので、始まってからMakefileでデプロイスクリプトを編んでいきます。泥縄……。
過去のISUCONでは前もって準備したitamaeでデプロイしていたこともあったが、8時間程度しか使わないならMakefileにscpコマンド並べたりしていく程度で十分ではないか と最近は思っている。 sshのコネクション切って貼ってになるな〜 とか思ったけどまぁそこで困るほどでもないからと見なかったことにした(どうせappの転送時間が主となっていたので)。
いつも
とりあえずベンチマークを回してみる。
ログを眺めて、回数が多くて重いところを探す。
そこのコードを眺めて改善する。
をループして改善している。
これをするためにalpで眺めるということを、いつも行っている。 感想戦で「ほとんどリクエスト来てなかった」って言ったら否定されて、生ログを見て「たしかに」と言っていた。
ちゃんと生ログは見よう。
この改善対象の解析をミスっていたにもかかわらず、だいたいはあっていたので、結果的にはなんとかなったが……。
最初はDB-boundであったため、appを1に、DBを3に振り分けて様子を見るが、やっぱりDB-boundだった。
GET /api/isu のN+1を解消しようとクエリを眺めてるうちに、isuconditionにindexを貼ってやると、劇的に改善する。
ここで1段階レベルが上がったという感じがして、appのほうのCPU-boundに切り替わった。
N+1がぜんぜん解消できないので、そすうさんにおしつけつつ、1と2をappにして前段2台構成にするとスコアは伸びるものの、もちろんDB-boundへと返ってきた。
このへんでだいたい最終スコアと変わらないぐらいの点数となっていた。
細かな修正をいくつか入れて若干よくなったり、そすうさんがN+1を解消してくれたりしたがあまり点数が伸びない。
このへんでログの解析ミスっていたことが効いてきてしまっていたのかもしれない?
あと1変更ぐらい跳ねられたら本戦出場もありうるかという思いで色々試みるものの、時間内にできたのはこのへんまで という感じだった。
箸にも棒にもではなくワンチャンあった ぐらいという感触で悔しい。
反省・まとめ
全くリクエストが来てないようなエンドポイントなんかたぶんないから、ALPでなさそうな感じがしても、生ログのgrepぐらいはしてもよかったと思う。
/iconは来てないし手があいたらやるか とか言っていた。
あとは単純に手が足りていなくてあと3倍高速に行動できていれば……。
来年こそは本戦行くぞ……(毎年言っている)(初回(ISUCON5)で学生枠で一度行けてから、毎年また行くぞと言っているがまだ行けていない。今年はそんなに遠くなかったと思うのでやっぱり悔しいね)。
今年の運営はめちゃくちゃスムーズだったのでよかった。ありがとうございます。