カテゴリー
サイト構築

GCEが重いのでベンチマークしたら驚きの結果に

20151122gce 01

 あまりにも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-micro301.1
g1-small931.3
n1-standard-11495.6
お名前.com(シングルコア)1414.2
お名前.com3025.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の処理性能テストですね。

Dhrystone 2 using register variables
インスタンスの種類lps
f1-micro7,684,448
g1-small24,809,990
n1-standard-132,787,560
お名前.com(シングルコア)30,964,680
お名前.com92,298,324

 トータルスコアとだいたい比例してますね。lpsはlines per secondかな? 桁違いに遅いっす。

 「File Copy 4096 bufsize 8000 maxblocks」のテストはディスクI/Oを調べる物ですが、メモリキャッシュが利いたりするので、結局CPU性能に比例してしまうらしいですね。でもお名前.comの1/5の結果になりました。

File Copy 4096 bufsize 8000 maxblocks
インスタンスの種類KBps
f1-micro314,746
g1-small1,772,641
n1-standard-12,813,695
お名前.com(シングルコア)1,333,378
お名前.com1,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に乗り換えしてみようと思います。

この記事を書いた人: A-tak

A-tak.com(えいたっく どっとこむ)の管理人。
Apple野郎なおっさんでしたが、ちょっと最近のAppleには飽き気味。
A-tak.comは2002年2月から運営(前身のサイトは1999年3月から)。今年で18年目!

Youtube / Twitter / Mastodon / Facebook