ISUCONの過去問に挑戦するための環境構築をした
いい感じにスピードアップするコンテストの過去問をやりたい. isucon.net 過去問のセットアップで少々躓いたのでメモ.
環境
- MacBook Pro Late 2016
- macOS 10.12.6
- Vagrant 1.9.7
- VirtualBox 5.1.24
Vagrantをインストールする
Vagrantを使用するのでインストール.
これのインストールについては省略.
Vagrantファイルを用意する
matsuuさんが公開されているVagrantファイルを得ます.
今回はisucon6-qualifierをセットアップします.
$ mkdir ISUCON $ cd ISUCON $ git clone https://github.com/matsuu/vagrant-isucon.git $ cd vagrant_isucon/isucon6-qualifier
Vagrantファイルのあるところまで移動し, 起動
$ vagrant up
しばらくまって, プロビジョニングが終わったら, ベンチマーク(bench)とアプリケーション側(image)にログイン.
$ vagrant ssh bench $ vagrant ssh image
参考実装の切り替え
初期ではPerlでの実装になっているため, Rubyへの実装へ変えようという話に. ISUCON6の予選マニュアルをみてたところ
なるほど, systemdで管理されてると言うのが分かる. よし, systemctlで変更しようと思いきや
$ systemctl stop isuda.perl.service
isuconというユーザーのパスワードが分からず断念.
あまりにもわからなかったので, matsuuさんに尋ねる. isuconユーザーでなくubuntuユーザー(vagrant sshしたときのユーザー)でsudo systemctl ... すればいけるんじゃない?とのことなのでやってみる.
$ whoami ubuntu $ sudo systemctl stop isuda.perl.service
いけた. isuconユーザーにデフォルトパスワードが設定されていなかったのが原因っぽい. DMで突然聞いたのに大変丁寧に対応してくださった. その後isuconユーザにパスワードを付加した.
$ sudo passwd isucon
こんな感じでなんとかできた.
アプリケーションの画面
トップページ思いなあなどと思う. アドレスはifconfigして適当に見た.
ベンチマークの実行
$ sudo -i -u isucon $ cd isucon6q $ ./isucon6q-bench -target http://<アドレス> 2017/08/04 17:04:55 start pre-checking 2017/08/04 17:05:04 pre-check finished and start main benchmarking 2017/08/04 17:05:55 benchmarking finished {"pass":true,"score":0,"success":941,"fail":20,"messages":["リクエストがタイムアウトしました (POST /keyword)","リクエストがタイムアウトしました (POST /login)","リクエストがタイムアウトしました (POST /stars)"]}
Rubyでの実行結果です. scoreは0. Perlだと初期実装だけでも点がでた.
丁寧に対応してくださったmatsuu氏に感謝します.