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数、縦軸がかかった時間(秒)。
参考:使用したスクリプト
以下のスクリプトの 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`