ISUCON6に参加して惨敗しました。
チーム「AppArmorGo」という名前で今年も @matsuu @ishikawa84g ご両人と共に参戦。 去年はバグ情報でGoを避けて惨敗したので今年はGoでいこう、と事前に話して準備万端。 結果的にGoで突破できませんでした。
結構練習はできていたのだけどダメでした。。。 この夏に双子が産まれてとにかく時間がなかったのだけど、ヨメが義父(私の父)にかけあって子守参加週末に時間を作ってくれたのでひとり喫茶店で練習したり。 前回は惨敗で家庭不和とか体調不良で大変だったので会場(会社)近くに前泊しました。 お陰で体調バッチリで臨むことができました。ダメだったけど。
流れは チームメイトmatsuuさんが書いてくれてる通り でした。 strings.Replacer
にはたどり着けず。最終スコアは24000。ラスト90分でperlに乗り換えて出したスコアとしてはまあまあでした。
sshrcを使ってスムーズに環境構築できたし、 とにかく予習バッチリだったのでAzure・プロビジョニングまわりはノートラブルだったのがよかった。
libpcre3を使ったGolangのregexp実装について
結論から言うと martinolsen/go-pcre: PCRE bindings for go で実装できました。と思います。
時間内では以下のエラーが出て解決できなかったんですが、事後に解決しました。
regular expression is too largegoroutine 8 [running]:
largegoroutine
って出てきたのでこれでぐぐってたんですが、これ実は regular expression is too large
と goroutine
がくっついただけだったんですね。なんだもよー、という感じ。
んで、このエラーメッセージからもわかるとおり、単に適用するだけじゃダメです。
--with-link-size=3
というconfigureオプションをつけてlibpcre3をリビルドする必要があります。
手順は以下の通り。
なお sudo
コマンドで libpcre.so.3 が必要なので、最後の rm
〜 ln
あたりはrootになっておかないと詰みます。
sudo apt-get install devscripts
sudo apt-get build-dep libpcre3
sudo apt-get source libpcre3
cd pcre3-8.38/
sudo vim debian/rules # configureオプションに --with-link-size=3 を追加
sudo dpkg-buildpackage -r -uc -b
sudo cp -a .libs/libpcre.so.3.13.2 /lib/x86_64-linux-gnu/libpcre.so.3.13.2a
sudo su -
rm /lib/x86_64-linux-gnu/libpcre.so.3
ln -s /lib/x86_64-linux-gnu/libpcre.so.3.13.2a /lib/x86_64-linux-gnu/libpcre.so.3
でも肝心の ReplaceAllStringFunc
はあんまり速くならなかったみたいで、このあたりはまだ検証が必要そう。
まとめ
運営ありがとうございました。お疲れさまでした。 来年もがんばりたい。
See also
- #isucon チーム「ウー馬場ーイー222」でISUCON13本選に参加し30位になりました
- 「SRE≠インフラなんだけどもう誤解されちゃってるから、DevOps新実装としてSite Production Engineeringはいかがでしょう?」でJAWS DAYS 2022に登壇しました #jawsdays #jawsug
- #isucon チーム「シン・ウー馬場ーイー2」でISUCON12本選に進出し12位になりました
- #isucon チーム「シン・ウー馬場ーイー2」でISUCON12予選に参加し2位で予選突破しました
- 「非ITの事業会社にSREと言わずにSREを持ち込んだ」SRE NEXT 2022で登壇しました #srenext