こんばんは.chigichan24です.
この前の土曜日,ISUCON7の本選に参加してきました.
チームはもちろん予選のときと変わらず,k5342 と euglena1215 です.
予選のエントリは,
前日
チームの人と5,6限の授業おなじだったので授業後にちょっとだけ話しました.まあぶっちゃけ,予選から何もしてなかった(別のことで忙しかったという言い訳)のでやばいねという話や.とりあえずredisでオンメモリ(笑)みたいなのはやめようとか,レギュレーションきちんと読もう(予選で帯域制限のことを考えられなかった)とかそこら辺を話しました.
土曜日の集合は朝早く,どう考えても起床でfailしそうだったので,ホテル( @tanishi345 宅)に泊まりました.
当日
インターンシップ以来のミライナタワー.一ヶ月新宿生活してたので,駅で迷うこともなく流れるようにオフィスへ行けました(天才)
久しぶりに来た(ISUCON本戦) (@ LINE株式会社 新宿オフィス in 新宿区, 東京都) https://t.co/D3i8bh0S7K
— 無能なので優しくしてください (@chigichan24) 2017年11月25日
去年同様,スーパーかっこいいカードが配られました.スーパーかっこいい.
壊さないようにしていきたい #isucon pic.twitter.com/vc8mPoTj5p
— k5342 (@k5342) 2017年11月25日
問題
(設定が)社長だったか,取締役だったか誰だったか忘れたけどまあ8時間後にリリースするから(笑)適当に高速化してくれ,みたいなおもしろ動画が流れた後詳細の説明がありました.
クッキークリッカーを複数人でやるみたいなゲームの高速化でした.その複数人でできるルームは複数個作られるといった感じでした.
コードもなにも読んでいないときの印象はwebsocket周りの高速化ゲーなのかなぁと思ったりしてました.
サーバーは4台構成でした.
やったこと
なにもできなかった......
というと,あれなんですが取り敢えずDBの設定見たりnginxの設定を見ても明らかに問題のある箇所が少ない.というか,DBとか複数カラムでPrimaryKeyになってて他のカラムはほぼinsert時にしか使わないみたいな感じになってるお陰でindexも貼れないし,nginxも一応静的コンテンツをキャッシュしたりしたけど,なにも変わらなくてなるほど,これはアプリケーションの改変ゲーか!?!?みたいになりました.インフラの仕事ほぼゼロやんけ....
インフラの仕事が無くなると k5342 パワーが使えないので悲しい事になりました.それでも途中までは彼にいい感じにチューニングしてもらって,スコアが7000前後に安定するようにしてもらいました.
一方私はいろいろ眺めていたら,m_itemsなるtableがDBに置いとく必要もなさそうだったので,全部オンメモリ上に吐けそうと気がついたので,euglena に投げました.
なんやかんやしていたら(まじで記憶がない),m_itemsの移植に失敗してつらそうだったので,取り敢えず放置して,一番重そうな calc_status
を倒そうと話し出しました.
こいつは total_milli_isu
と total_power
という2つの値を計算しているのですが,差分で計算できそうなのにいちいちはじめの状態から再計算していて頭が悪そうだったので差分で計算できるようにしようと話しました. 0.5[sec]ごとに処理が走るくせに,こんな激重っぽいやつが動いていたら出るスコアも出ねぇよ(名推理)みたいな気持ちでした.これをeuglenaに投げました.
一方私は,1000[ms]先の状態をシミュレートして未来の状態のタイムスタンプを生やしてjsonをぶん投げるという部分が,1msごとにイベントが起きるか判定して,このjsonを作っていたのですが,これは明らかに頭が悪くて,イベントごとに処理できるように書き換えるのをやりました.
まあ,ところがこいつらを改変しようとするといろんなところの依存がすごすぎて回収不可能(死亡)みたいになりました.
最後の30分くらいでk5がサクッとdiff_baseで一部を移植していたので,早いとこ彼に投げればよかったとなりました.
最後は例のごとく再起動テストをしてみたり,変な落ち方をしないか確認したりしてました.
で,最後の数分はスコアガチャをしてました.スコアが全然上がらなくて4000点くらいを叩き出していて,これは初期実装投げるほうがスコアが高いやんけという悲しい気持ちになりながら,ガチャガチャしてましたがタイムアップ,maxは9800くらいだったのに,最終スコア4000位でフィニッシュしました.
完全にお通夜状態でした.終了直後のみんなのツイート
はい.壊れた #isucon
— 無能なので優しくしてください (@chigichan24) 2017年11月25日
何もしちょらんのに壊れたとかいうふざけたチーム名でやってたんですが,本当に何もしてないのにスコアが地底に落ちたので報告します. #isucon
— k5342 (@k5342) 2017年11月25日
弁当おいしかった #isucon
— てっぺー (@euglena1215) 2017年11月25日
解説 & 懇親会
作問の方からの講評を聞きました.「最初のステップとしてルームをポートで分けて処理を分散するこれは皆さんやりましたよね?」とか言っていて完全にお気持ちになりました.なにそれ...このステップを越えると私達が戦っていたcalc_state
をどうにかする話になり,さらに進むとBigInt
との戦いになったらしい.やべぇ何もできてない.
懇親会は,あんまり他のチームと喋れなかったのですが,インターンシップで一緒だった人を発見して適当にお話したり,優勝チームが何やったか聞いたり,作問の方が他の人と喋っているのを聞いてはぇええとなったり,W社の方と少しお話したりしました.
そうこうしていると,全チームのスコアが出ました.下から自分のチームの名前を探しているとなかなか見つからないので,あれっってなっていたら,19位にいました.普通に惨敗なんですが,ビリだと思っていたのでなんか嬉しかったです.救われた気分でした.
全体だと19位,学生だと8位みたいです.
予選だと全体29位,学生11位だったので若干上がっている..
反省
反省点は大量にあります.実装担当だったはずなのに何もできなかったのがただただ悔しいです.プログラミングやってますと公言できるように精進します.しばらくはプログラミングやったことありませんって言うか....
感謝
何はともあれ,まずチームを組んでくれた k5342 君と euglena1215 君ありがとう!!!二人のやっていることをタダぼーっと椅子に座ってたらいつの間にか本選まで行けてました.
そして,作問をしてくださったKLabさん,サーバー提供のさくらインターネットさん,会場提供のLINEさんありがとうございました.とってもとっても楽しいISUCON7でした.
流石に去年よりはまともになったので,次はもっとまともになってISUCON8に臨む(あわよくばまた二人とチームを組みたいね)
最後に
今回のおもしろPR
ってだいたいchigichan24がふざけてるだけやんけ.....