あまりにもGoogle Compute Engineのf1-microインスタンスが遅いのでベンチマーク取ったら、予想以上にあれでした。
目次
microインスタンスの負荷がすぐに上がる
以前はお名前.comの2GB/3コアCPUのプランを使っていて、最近Google Compute Engineの0.6GB/共有1コアCPU(f1-micro インスタンス)に移行しましたが、どうも動きが悪い。記事を投稿するだけでCPU負荷が大幅に上がって、オートスケールでインスタンスがガンガン立ち上がってしまう。そのせいか記事の投稿は初回一回目が必ず失敗するような不安定な状況。
構成をNginxにしたり重いプラグインを止めたり、できる限りパフォーマンス向上を画策しましたが、全然ダメ。今までだとメモリ食い過ぎてスローダウンすることが多かったのですが、今回は単純にCPUの負荷が上がるという感じで、「そもそもスペック低すぎるんじゃないのか?」という気がしてきたので、ベンチマークを取ってみました。
f1-microインスタンスがダントツに遅い
ベンチマークはUnixBenchというソフトを使いました。CPUからI/Oまで調べてくれるみたいなので、よさげです。
LinuxのDISK,CPUベンチマークを確認する – Qiita
UnixBenchは最初のバージョンが1983年に作られた歴史あるベンチマークソフト。 ダウンロード元:http://code.google.com/p/byte-unixbench/ マルチコアの場合は1CPUで実行したあとに全CPUで実行し両方の結果が表示される。 CPUそのもののベンチマークではなくOSやライブラリ、コンパイラに依存する。 ベンチマークの結果として生の数値以外に比較対象となるマシン(*)のデータ、総合評価の値が提供される。 (*)Sun SPARCstation 20 SM 61 (1995年)
こちら参考にインストールしました。サンクス!
GCEのf1-micro、g1-small、お名前.com VPS(KVM)の3コアの三つで試してみました。トータルスコアをまずはみちゃいましょう。
インスタンスの種類 | スコア |
---|---|
f1-micro | 301.1 |
g1-small | 931.3 |
n1-standard-1 | 1495.6 |
お名前.com(シングルコア) | 1414.2 |
お名前.com | 3025.9 |
なんだこりゃ、f1-micro遅すぎ。お名前.comの1/10のスコア。お名前.comは3つコアがあるので、シングルコアのみのスコアと三つのコアでのスコアの二つを書いています。
意外なのが同じ共有1コアCPUのはずのg1-smallの方が3倍ぐらい性能がいいんですよね。
こうしてみるとお名前.comのコストパフォーマンスが際立つなぁ。GCEはLBやオートスケールやGoogle Cloud Monitoringとかの連携がすごいから一概にサーバースペックだけで比較は出来ないですけどね。GCEはデータセンターを自前で簡単に構築できちゃうような感じですからね、ポテンシャルが全然違うわけですが。
以下はUnixBenchの詳細結果です。簡単な考察は最後に。
f1-micro
========================================================================
BYTE UNIX Benchmarks (Version 5.1.3)
System: web-temp-1: GNU/Linux
OS: GNU/Linux -- 3.10.0-229.20.1.el7.x86_64 -- #1 SMP Tue Nov 3 19:10:07 UTC 2015
Machine: x86_64 (x86_64)
Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
CPU 0: Intel(R) Xeon(R) CPU @ 2.50GHz (5000.0 bogomips)
Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET
13:27:35 up 6 min, 1 user, load average: 0.20, 0.14, 0.06; runlevel 3
------------------------------------------------------------------------
Benchmark Run: Sat Nov 28 2015 13:27:35 - 13:57:32
1 CPU in system; running 1 parallel copy of tests
Dhrystone 2 using register variables 7684448.4 lps (10.0 s, 7 samples)
Double-Precision Whetstone 869.0 MWIPS (16.0 s, 7 samples)
Execl Throughput 926.9 lps (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 226351.4 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 61708.1 KBps (30.2 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 314746.7 KBps (30.1 s, 2 samples)
Pipe Throughput 364565.0 lps (10.2 s, 7 samples)
Pipe-based Context Switching 65165.3 lps (10.2 s, 7 samples)
Process Creation 2999.5 lps (30.1 s, 2 samples)
Shell Scripts (1 concurrent) 827.5 lpm (60.1 s, 2 samples)
Shell Scripts (8 concurrent) 141.4 lpm (60.6 s, 2 samples)
System Call Overhead 614835.5 lps (10.1 s, 7 samples)
System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 7684448.4 658.5
Double-Precision Whetstone 55.0 869.0 158.0
Execl Throughput 43.0 926.9 215.6
File Copy 1024 bufsize 2000 maxblocks 3960.0 226351.4 571.6
File Copy 256 bufsize 500 maxblocks 1655.0 61708.1 372.9
File Copy 4096 bufsize 8000 maxblocks 5800.0 314746.7 542.7
Pipe Throughput 12440.0 364565.0 293.1
Pipe-based Context Switching 4000.0 65165.3 162.9
Process Creation 126.0 2999.5 238.1
Shell Scripts (1 concurrent) 42.4 827.5 195.2
Shell Scripts (8 concurrent) 6.0 141.4 235.7
System Call Overhead 15000.0 614835.5 409.9
========
System Benchmarks Index Score 301.1
g1-small
========================================================================
BYTE UNIX Benchmarks (Version 5.1.3)
System: web-temp3: GNU/Linux
OS: GNU/Linux -- 3.10.0-229.20.1.el7.x86_64 -- #1 SMP Tue Nov 3 19:10:07 UTC 2015
Machine: x86_64 (x86_64)
Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
CPU 0: Intel(R) Xeon(R) CPU @ 2.50GHz (5000.0 bogomips)
Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET
13:37:29 up 0 min, 1 user, load average: 0.63, 0.22, 0.08; runlevel 3
------------------------------------------------------------------------
Benchmark Run: Sat Nov 28 2015 13:37:29 - 14:05:47
1 CPU in system; running 1 parallel copy of tests
Dhrystone 2 using register variables 24809990.0 lps (10.0 s, 7 samples)
Double-Precision Whetstone 2414.1 MWIPS (11.6 s, 7 samples)
Execl Throughput 2519.8 lps (29.6 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 785511.8 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 210995.3 KBps (30.1 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 1772641.3 KBps (30.1 s, 2 samples)
Pipe Throughput 992790.0 lps (10.0 s, 7 samples)
Pipe-based Context Switching 197480.1 lps (10.0 s, 7 samples)
Process Creation 7944.8 lps (30.1 s, 2 samples)
Shell Scripts (1 concurrent) 2438.7 lpm (60.0 s, 2 samples)
Shell Scripts (8 concurrent) 371.1 lpm (60.1 s, 2 samples)
System Call Overhead 1709904.8 lps (10.0 s, 7 samples)
System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 24809990.0 2126.0
Double-Precision Whetstone 55.0 2414.1 438.9
Execl Throughput 43.0 2519.8 586.0
File Copy 1024 bufsize 2000 maxblocks 3960.0 785511.8 1983.6
File Copy 256 bufsize 500 maxblocks 1655.0 210995.3 1274.9
File Copy 4096 bufsize 8000 maxblocks 5800.0 1772641.3 3056.3
Pipe Throughput 12440.0 992790.0 798.1
Pipe-based Context Switching 4000.0 197480.1 493.7
Process Creation 126.0 7944.8 630.5
Shell Scripts (1 concurrent) 42.4 2438.7 575.2
Shell Scripts (8 concurrent) 6.0 371.1 618.5
System Call Overhead 15000.0 1709904.8 1139.9
========
System Benchmarks Index Score 931.3
n1-standard-1
========================================================================
BYTE UNIX Benchmarks (Version 5.1.3)
System: web-temp-4: GNU/Linux
OS: GNU/Linux -- 3.10.0-229.20.1.el7.x86_64 -- #1 SMP Tue Nov 3 19:10:07 UTC 2015
Machine: x86_64 (x86_64)
Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
CPU 0: Intel(R) Xeon(R) CPU @ 2.50GHz (5000.0 bogomips)
Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET
14:07:01 up 0 min, 1 user, load average: 0.77, 0.25, 0.09; runlevel 3
------------------------------------------------------------------------
Benchmark Run: Sat Nov 28 2015 14:07:01 - 14:35:08
1 CPU in system; running 1 parallel copy of tests
Dhrystone 2 using register variables 32787560.2 lps (10.0 s, 7 samples)
Double-Precision Whetstone 4172.1 MWIPS (9.8 s, 7 samples)
Execl Throughput 4005.3 lps (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 1103137.9 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 311892.5 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 2813695.6 KBps (30.0 s, 2 samples)
Pipe Throughput 1573194.5 lps (10.0 s, 7 samples)
Pipe-based Context Switching 292895.1 lps (10.0 s, 7 samples)
Process Creation 14149.7 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 4938.9 lpm (60.0 s, 2 samples)
Shell Scripts (8 concurrent) 760.5 lpm (60.0 s, 2 samples)
System Call Overhead 2420900.6 lps (10.0 s, 7 samples)
System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 32787560.2 2809.6
Double-Precision Whetstone 55.0 4172.1 758.6
Execl Throughput 43.0 4005.3 931.5
File Copy 1024 bufsize 2000 maxblocks 3960.0 1103137.9 2785.7
File Copy 256 bufsize 500 maxblocks 1655.0 311892.5 1884.5
File Copy 4096 bufsize 8000 maxblocks 5800.0 2813695.6 4851.2
Pipe Throughput 12440.0 1573194.5 1264.6
Pipe-based Context Switching 4000.0 292895.1 732.2
Process Creation 126.0 14149.7 1123.0
Shell Scripts (1 concurrent) 42.4 4938.9 1164.8
Shell Scripts (8 concurrent) 6.0 760.5 1267.4
System Call Overhead 15000.0 2420900.6 1613.9
========
System Benchmarks Index Score 1495.6
お名前.com
========================================================================
BYTE UNIX Benchmarks (Version 5.1.3)
System: v203-189-97-143.myvps.jp: GNU/Linux
OS: GNU/Linux -- 2.6.32-573.7.1.el6.x86_64 -- #1 SMP Tue Sep 22 22:00:00 UTC 2015
Machine: x86_64 (x86_64)
Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
CPU 0: Intel(R) Core(TM)2 Duo CPU T7700 @ 2.40GHz (6133.1 bogomips)
x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET
CPU 1: Intel(R) Core(TM)2 Duo CPU T7700 @ 2.40GHz (6133.1 bogomips)
x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET
CPU 2: Intel(R) Core(TM)2 Duo CPU T7700 @ 2.40GHz (6133.1 bogomips)
x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET
13:24:42 up 49 days, 14:21, 1 user, load average: 0.27, 0.12, 0.04; runlevel 3
------------------------------------------------------------------------
Benchmark Run: Sat Nov 28 2015 13:24:42 - 13:52:52
3 CPUs in system; running 1 parallel copy of tests
Dhrystone 2 using register variables 30964680.1 lps (10.0 s, 7 samples)
Double-Precision Whetstone 3593.5 MWIPS (9.8 s, 7 samples)
Execl Throughput 2713.5 lps (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 930748.8 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 265427.9 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 1333378.2 KBps (30.0 s, 2 samples)
Pipe Throughput 2009709.7 lps (10.0 s, 7 samples)
Pipe-based Context Switching 323951.6 lps (10.0 s, 7 samples)
Process Creation 5797.8 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 5575.4 lpm (60.0 s, 2 samples)
Shell Scripts (8 concurrent) 1877.1 lpm (60.0 s, 2 samples)
System Call Overhead 4088893.5 lps (10.0 s, 7 samples)
System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 30964680.1 2653.4
Double-Precision Whetstone 55.0 3593.5 653.4
Execl Throughput 43.0 2713.5 631.0
File Copy 1024 bufsize 2000 maxblocks 3960.0 930748.8 2350.4
File Copy 256 bufsize 500 maxblocks 1655.0 265427.9 1603.8
File Copy 4096 bufsize 8000 maxblocks 5800.0 1333378.2 2298.9
Pipe Throughput 12440.0 2009709.7 1615.5
Pipe-based Context Switching 4000.0 323951.6 809.9
Process Creation 126.0 5797.8 460.1
Shell Scripts (1 concurrent) 42.4 5575.4 1314.9
Shell Scripts (8 concurrent) 6.0 1877.1 3128.6
System Call Overhead 15000.0 4088893.5 2725.9
========
System Benchmarks Index Score 1414.2
------------------------------------------------------------------------
Benchmark Run: Sat Nov 28 2015 13:52:52 - 14:21:08
3 CPUs in system; running 3 parallel copies of tests
Dhrystone 2 using register variables 92298324.2 lps (10.0 s, 7 samples)
Double-Precision Whetstone 10772.5 MWIPS (9.9 s, 7 samples)
Execl Throughput 11796.3 lps (29.8 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 638268.7 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 213229.2 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 1661280.3 KBps (30.0 s, 2 samples)
Pipe Throughput 5903133.6 lps (10.0 s, 7 samples)
Pipe-based Context Switching 949999.3 lps (10.0 s, 7 samples)
Process Creation 39469.1 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 14658.7 lpm (60.0 s, 2 samples)
Shell Scripts (8 concurrent) 1840.2 lpm (60.0 s, 2 samples)
System Call Overhead 9340993.0 lps (10.0 s, 7 samples)
System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 92298324.2 7909.0
Double-Precision Whetstone 55.0 10772.5 1958.6
Execl Throughput 43.0 11796.3 2743.3
File Copy 1024 bufsize 2000 maxblocks 3960.0 638268.7 1611.8
File Copy 256 bufsize 500 maxblocks 1655.0 213229.2 1288.4
File Copy 4096 bufsize 8000 maxblocks 5800.0 1661280.3 2864.3
Pipe Throughput 12440.0 5903133.6 4745.3
Pipe-based Context Switching 4000.0 949999.3 2375.0
Process Creation 126.0 39469.1 3132.5
Shell Scripts (1 concurrent) 42.4 14658.7 3457.2
Shell Scripts (8 concurrent) 6.0 1840.2 3067.0
System Call Overhead 15000.0 9340993.0 6227.3
========
System Benchmarks Index Score 3025.9
考察
「Dhrystone 2 using register variables」の項目がCPUの処理性能テストですね。
インスタンスの種類 | lps |
---|---|
f1-micro | 7,684,448 |
g1-small | 24,809,990 |
n1-standard-1 | 32,787,560 |
お名前.com(シングルコア) | 30,964,680 |
お名前.com | 92,298,324 |
トータルスコアとだいたい比例してますね。lpsはlines per secondかな? 桁違いに遅いっす。
「File Copy 4096 bufsize 8000 maxblocks」のテストはディスクI/Oを調べる物ですが、メモリキャッシュが利いたりするので、結局CPU性能に比例してしまうらしいですね。でもお名前.comの1/5の結果になりました。
インスタンスの種類 | KBps |
---|---|
f1-micro | 314,746 |
g1-small | 1,772,641 |
n1-standard-1 | 2,813,695 |
お名前.com(シングルコア) | 1,333,378 |
お名前.com | 1,661,280 |
g1-smallを使うのが吉か?
そんなわけでベンチマークの数値見て、こりゃサーバースペックアップしないとダメかなと思いました。nginx + php-fpm + wordpressで動いた!ってのを見かけますが、たぶんWordPressは素の状態なんじゃないかな?
うちではf1-microでオートスケールをCPU80%にしていると常時2台起動している状態になります。でも、アクセスが少しでも増えると裏では5台とか立ち上がっているみたいで、結局g1-smallで運用した方が問題も起きにくくて、課金も安くなりそうな気がしています。
hhvmへの置き換えも画策していますが、ネットに落ちているrpmでCentOS7に入れて少し操作するだけで、
Nov xx 12:53:26 web-temp systemd[1]: hhvm.service: main process exited, code=killed, status=11/SEGV
Nov xx 12:53:26 web-temp systemd[1]: Unit hhvm.service entered failed state.
こんな感じでセグメントフォルトで数秒で落ちてしまうので、ソースからコンパイルしてうまくいかなければ、g1-smallに乗り換えしてみようと思います。