読者です 読者をやめる 読者になる 読者になる

AWS(EC2)上でのMySQL5.7ビルド時間の実験

 MySQLをビルドしたり動作させたりするための環境が手軽に手に入るようになったのが嬉しくて、いろいろ試してみています。
相変わらずビルドを繰り返し。
ビルドが必要となる要件は私にはそうそうありませんが、ここぞという時にちょこっとソースをいじってビルドできるという安心感を、この経験は与えてくれる気がしています。

ということで、今回はビルド時間編。

概要

 (1)AWSの 色々なインスタンスタイプで、ビルド時間を比べてみる
 (2)AWSの t2.2xlarge で、makeの -j オプション値を変更しながらビルド時間を比べてみる

 いずれも、この日記末尾のスクリプトを使用して測定した。
 (ここで話題にするのは makeの時間(03と04の間)のみ)


(1)AWSインスタンスタイプ差によるビルド時間の違い

 以下の表のとおり。make の -j オプションは、以下に明記のない場合はそれぞれのCPUの数に合わせた。

Type CPU Memory make時間 備考
t2.tiny 1 1 1h55'55" swapファイル使用
t2.tiny 1 1 2h12'28" swapファイル使用
t2.medium 2 4 35'43" make に j オプションなし
t2.medium 2 4 18'13" make -j 2
t2.2xlarge 8 32 4'46"
m4.10xlarge 40 160 2'20"

※t2.tiny での結果は、実施によってブレが大きかったので、両方載せた。


 4 CPU の環境での実験を行わなかったが、概ね、8CPU の環境であれば5分程度と、まぁソースを何か変更してビルドしてみるのに許容範囲かな、という気がします。


(2)makeの -j オプション値によるビルド時間の違い

 t2.2xlarge(8 CPU, 32GB memory) にて、make の j オプション(並列実行数)を変更しながら、どのようにmake時間が変化するかを見た。-j 10 と -j 12 は、おあそび。

makeオプション make時間 備考
-j 2 16'40"
-j 4 8'47"
-j 6 5'59"
-j 7 5'10"
-j 8 4'46"
-j 10 4'37 CPU数は8だけど
-j 12 4'47 CPU数は8だけど


 t2.tiny(2CPU)で -j 2 で実施したものと、本環境で -j 2 で実施したものが、17~18分程度と、ほぼ近い時間となっていますね。
"-j 10" と "-j 12" は興味本位で遊んでみたものですが、誤差の範囲と解釈して良い感じなのかな。 競合によって、もっと急激に遅くなると予想していたので、これはこれで結構意外。

 雑にプロットしたものが、以下。横軸がCPU数、縦軸がかかった時間(秒)。
f:id:sakaik:20170115235021j:plain:w400

参考:使用したスクリプト

 以下のスクリプトの make オプションの値を適宜変更してビルドを実施した。

touch ~/00start_`date +%H%M%S`
sudo yum -y install wget gcc gcc-c++ cmake libaio-devel bison ncurses-devel perl-Data-Dumper
sudo yum -y remove mariadb-libs
touch ~/01yumend_`date +%H%M%S`
mkdir mysql/
cd !$
wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.17.tar.gz
tar xvf mysql-boost-5.7.17.tar.gz
cd mysql-5.7.17
touch ~/02tarend_`date +%H%M%S`
cmake -DWITH_BOOST=./boost -DCMAKE_INSTALL_PREFIX=/home/ec2-user/mysql/mysql5717 -DBUILD_CONFIG=mysql_release
touch ~/03cmakeend_`date +%H%M%S`
make -j 8
touch ~/04makeend_`date +%H%M%S`
make install
touch ~/05allend_`date +%H%M%S`