83

GitHub - isucon/isucon7-qualify: ISUCON7 予選問題の参照実装とベンチマーカー

 6 years ago
source link: https://github.com/isucon/isucon7-qualify
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

ISUCON7 予選問題

予選マニュアル

感想戦用、1VMでの動かし方

ディレクトリ構成

db      - データベーススキーマ等
bench   - ベンチマーカー、初期データ生成器
webapp  - 各種言語実装
files   - 各種設定ファイル

Ubuntu 16.04 のものをなるべくデフォルトで使います。

まずは isucon ユーザーを作り、そのホームディレクトリ配下の isubata ディレクトリに リポジトリをチェックアウトします。

$ sudo apt install git
$ git clone https://github.com/isucon/isucon7-qualify.git isubata

nginx と MySQL は Ubuntu の標準のものを使います。

$ sudo apt install mysql-server nginx

各言語は xbuild で最新安定版をインストールします。まず xbuild が必要とするライブラリをインストールします。

$ sudo apt install -y git curl libreadline-dev pkg-config autoconf automake build-essential libmysqlclient-dev \
	libssl-dev python3 python3-dev python3-venv openjdk-8-jdk-headless libxml2-dev libcurl4-openssl-dev \
        libxslt1-dev re2c bison libbz2-dev libreadline-dev libssl-dev gettext libgettextpo-dev libicu-dev \
	libmhash-dev libmcrypt-dev libgd-dev libtidy-dev

xbuildで言語をインストールします。ベンチマーカーのために、Goは必ずインストールしてください。 他の言語は使わないのであればスキップしても問題ないと思います。

cd
git clone https://github.com/tagomoris/xbuild.git

mkdir local
xbuild/ruby-install   -f 2.4.2   /home/isucon/local/ruby
xbuild/perl-install   -f 5.26.1  /home/isucon/local/perl
xbuild/node-install   -f v6.11.4 /home/isucon/local/node
xbuild/go-install     -f 1.9     /home/isucon/local/go
xbuild/python-install -f 3.6.2   /home/isucon/local/python
xbuild/php-install    -f 7.1.9   /home/isucon/local/php -- --disable-phar --with-pcre-regex --with-zlib --enable-fpm --enable-pdo --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-openssl --with-pcre-regex --with-pcre-dir --with-libxml-dir --enable-opcache --enable-bcmath --with-bz2 --enable-calendar --enable-cli --enable-shmop --enable-sysvsem --enable-sysvshm --enable-sysvmsg --enable-mbregex --enable-mbstring --with-mcrypt --enable-pcntl --enable-sockets --with-curl --enable-zip --with-pearAA

ベンチマーカーの準備

Goを使うのでこれだけは最初に環境変数を設定しておく

export PATH=$HOME/local/go/bin:$HOME/go/bin:$PATH
go get github.com/constabulary/gb/...   # 初回のみ
cd ~/isubata/bench
gb vendor restore
make

初期データ生成

cd ~/isubata/bench
./bin/gen-initial-dataset   #isucon7q-initial-dataset.sql.gz ができる

データベース初期化

データベース初期化、アプリが動くのに最低限必要なデータ投入

$ sudo ./db/init.sh
$ sudo mysql
mysql> CREATE USER isucon@'%' IDENTIFIED BY 'isucon';
mysql> GRANT ALL on *.* TO isucon@'%';
mysql> CREATE USER isucon@'localhost' IDENTIFIED BY 'isucon';
mysql> GRANT ALL on *.* TO isucon@'localhost';

初期データ投入

zcat ~/isubata/bench/isucon7q-initial-dataset.sql.gz | sudo mysql isubata

デフォルトだとTCPが127.0.0.1しかbindしてないので、複数台構成に対応するには /etc/mysql/mysql.conf.d/mysqld.cnfbind-address = 127.0.0.1 になっている 場所を bind-address = 0.0.0.0 に書き換える。

nginx

$ sudo cp ~/isubata/files/app/nginx.* /etc/nginx/sites-available
$ cd /etc/nginx/sites-enabled
$ sudo unlink default
$ sudo ln -s ../sites-available/nginx.conf  # php の場合は nginx.php.conf
$ sudo systemctl restart nginx

参考実装(python)を動かす

$ cd ~/isubata/webapp/python
$ ./setup.sh
export ISUBATA_DB_HOST=127.0.0.1
export ISUBATA_DB_USER=isucon
export ISUBATA_DB_PASSWORD=isucon
./venv/bin/gunicorn --workers=10 -b '127.0.0.1:5000' app:app

予選本番では、 /etc/hosts に各ホスト名を書いて、環境変数は systemd から env.sh ファイルを読み込んでいました。 この辺は適当に使いやすいように設定してください。

ベンチマーク実行

$ cd bench
$ ./bin/bench -h # ヘルプ確認
$ ./bin/bench -remotes=127.0.0.1 -output result.json

結果を見るには sudo apt install jq で jq をインストールしてから、

$ jq . < result.json

systemd に置く設定ファイルなどは files/ ディレクトリから探してください。

使用データの取得元


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK