日々精進

aikoと旅行とプログラミング

ISUCONの過去問に挑戦するための環境構築をした

いい感じにスピードアップするコンテストの過去問をやりたい. isucon.net 過去問のセットアップで少々躓いたのでメモ.

環境

Vagrantをインストールする

Vagrantを使用するのでインストール.

www.vagrantup.com

これのインストールについては省略.

Vagrantファイルを用意する

matsuuさんが公開されているVagrantファイルを得ます.

github.com

今回は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の予選マニュアルをみてたところ

github.com

なるほど, 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ユーザにパスワードを付加した.

$ passwd isucon

こんな感じでなんとかできた.

アプリケーションの画面

f:id:bath_poo:20170804182330p:plain トップページ思いなあなどと思う. アドレスは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氏に感謝します.