わたねこコーリング

野良プログラマ発、日々のアウトプット

ConoHa VPS V2 と V3 のパフォーマンスを比較

ドル高圧力に耐えかねて、プライベート用のサーバを AWS EC2 から ConoHa VPS に移行したのが二ヶ月ほど前のこと。それが先日、コンパネをいじっていたらメニューの一番下に「バージョン切替」というボタンが出来ていて、「ナニコレ?」とポチってみたら「新バージョン(Ver.3.0)と旧バージョン(Ver.2.0)の管理画面を切り替えることができます」とのダイアログ。

実際に切り替えしてみたらサーバリストに契約中のものが表示されなくなったので、先だって立てたサーバは Ver.2 だったようです。調べてみたら 12/22 までのリニューアルキャンペーンが行われているので、ここ暫くの間にサービスがメジャーアップデートされたってこと? アナウンスメールも来てないし、聞いてないぞそれ。

結局 V2 と V3 の違いはよく分かりませんでしたが、サービスの基本形は従来とさほど変わらないようなので、実際にサーバを立てて両者の基本性能を比較してみることにしました。私が立てたサーバのタイプは「メモリ 1GB/CPU 2Core」(Ubuntu 20.4 LTS)なので、これと同様のものを。V3 でサーバ追加しようとしたら Ubuntu に 22.04 LTS が追加されてますね。今どき 20 系はちょっと古いんでね? と思ってたのでこれは嬉しい。折角なのでこちらを選択してポチッとして、さてリモートログイン。

まず lscpu で両者のプロセッサを確認。

v2:~$ lscpu
Architecture:                       x86_64
CPU op-mode(s):                     32-bit, 64-bit
Byte Order:                         Little Endian
Address sizes:                      46 bits physical, 48 bits virtual
CPU(s):                             2
On-line CPU(s) list:                0,1
Thread(s) per core:                 1
Core(s) per socket:                 1
Socket(s):                          2
NUMA node(s):                       1
Vendor ID:                          GenuineIntel
CPU family:                         6
Model:                              85
Model name:                         Intel(R) Xeon(R) Gold 6230 CPU @ 2.10GHz
Stepping:                           7
CPU MHz:                            2095.078
BogoMIPS:                           4190.15
Hypervisor vendor:                  KVM
Virtualization type:                full
L1d cache:                          64 KiB
L1i cache:                          64 KiB
L2 cache:                           8 MiB
L3 cache:                           32 MiB
NUMA node0 CPU(s):                  0,1
(後略)
v3:~$ lscpu
Architecture:            x86_64
  CPU op-mode(s):        32-bit, 64-bit
  Address sizes:         40 bits physical, 57 bits virtual
  Byte Order:            Little Endian
CPU(s):                  2
  On-line CPU(s) list:   0,1
Vendor ID:               GenuineIntel
  Model name:            Intel Xeon Processor (Icelake)
    CPU family:          6
    Model:               134
    Thread(s) per core:  1
    Core(s) per socket:  1
    Socket(s):           2
    Stepping:            0
    BogoMIPS:            4000.00
(中略)
Virtualization features: 
  Virtualization:        VT-x
  Hypervisor vendor:     KVM
  Virtualization type:   full
Caches (sum of all):     
  L1d:                   64 KiB (2 instances)
  L1i:                   64 KiB (2 instances)
  L2:                    8 MiB (2 instances)
  L3:                    32 MiB (2 instances)
(後略)

なるほど、プロセッサは Xeon Gold 6230 から Icelake に変わったと。最近のプロセッサ事情には疎いので、性能的にどう違うのかはよく分かりません。なので、sysbench でベンチマーキング。

v2:~$ sysbench cpu run
sysbench 1.0.18 (using system LuaJIT 2.1.0-beta3)

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time


Prime numbers limit: 10000

Initializing worker threads...

Threads started!

CPU speed:
    events per second:   681.13

General statistics:
    total time:                          10.0012s
    total number of events:              6814

Latency (ms):
         min:                                    1.32
         avg:                                    1.47
         max:                                    7.86
         95th percentile:                        1.58
         sum:                                 9991.04

Threads fairness:
    events (avg/stddev):           6814.0000/0.00
    execution time (avg/stddev):   9.9910/0.00
v3:~$ sysbench cpu run
sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time


Prime numbers limit: 10000

Initializing worker threads...

Threads started!

CPU speed:
    events per second:  2500.00

General statistics:
    total time:                          10.0010s
    total number of events:              25007

Latency (ms):
         min:                                    0.40
         avg:                                    0.40
         max:                                    1.73
         95th percentile:                        0.41
         sum:                                 9995.00

Threads fairness:
    events (avg/stddev):           25007.0000/0.00
    execution time (avg/stddev):   9.9950/0.00

すごいです。「CPU speed」は約3.7倍の数値。ではメモリ操作は?

v2:~$ sysbench memory run
sysbench 1.0.18 (using system LuaJIT 2.1.0-beta3)

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time


Running memory speed test with the following options:
  block size: 1KiB
  total size: 102400MiB
  operation: write
  scope: global

Initializing worker threads...

Threads started!

Total operations: 32082406 (3207346.87 per second)

31330.47 MiB transferred (3132.17 MiB/sec)


General statistics:
    total time:                          10.0002s
    total number of events:              32082406

Latency (ms):
         min:                                    0.00
         avg:                                    0.00
         max:                                    6.21
         95th percentile:                        0.00
         sum:                                 4801.21

Threads fairness:
    events (avg/stddev):           32082406.0000/0.00
    execution time (avg/stddev):   4.8012/0.00
v3:~$ sysbench memory run
sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time


Running memory speed test with the following options:
  block size: 1KiB
  total size: 102400MiB
  operation: write
  scope: global

Initializing worker threads...

Threads started!

Total operations: 51360071 (5135146.49 per second)

50156.32 MiB transferred (5014.79 MiB/sec)


General statistics:
    total time:                          10.0001s
    total number of events:              51360071

Latency (ms):
         min:                                    0.00
         avg:                                    0.00
         max:                                    0.84
         95th percentile:                        0.00
         sum:                                 3884.90

Threads fairness:
    events (avg/stddev):           51360071.0000/0.00
    execution time (avg/stddev):   3.8849/0.00

プロセッサの能力向上のせいでしょうか。転送速度が1.6倍に向上してます。次にファイル入出力を。

v2:~$ sysbench fileio --file-test-mode=seqwr run
sysbench 1.0.18 (using system LuaJIT 2.1.0-beta3)

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time


Extra file open flags: (none)
128 files, 16MiB each
2GiB total file size
Block size 16KiB
Periodic FSYNC enabled, calling fsync() each 100 requests.
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing sequential write (creation) test
Initializing worker threads...

Threads started!


File operations:
    reads/s:                      0.00
    writes/s:                     8030.15
    fsyncs/s:                     10278.69

Throughput:
    read, MiB/s:                  0.00
    written, MiB/s:               125.47

General statistics:
    total time:                          10.0098s
    total number of events:              183185

Latency (ms):
         min:                                    0.01
         avg:                                    0.05
         max:                                   11.42
         95th percentile:                        0.08
         sum:                                 9887.20

Threads fairness:
    events (avg/stddev):           183185.0000/0.00
    execution time (avg/stddev):   9.8872/0.00
v3:~$ sysbench fileio --file-test-mode=seqwr run
sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time


Extra file open flags: (none)
128 files, 16MiB each
2GiB total file size
Block size 16KiB
Periodic FSYNC enabled, calling fsync() each 100 requests.
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing sequential write (creation) test
Initializing worker threads...

Threads started!


File operations:
    reads/s:                      0.00
    writes/s:                     10705.59
    fsyncs/s:                     13712.75

Throughput:
    read, MiB/s:                  0.00
    written, MiB/s:               167.27

General statistics:
    total time:                          10.0051s
    total number of events:              244213

Latency (ms):
         min:                                    0.01
         avg:                                    0.04
         max:                                   35.71
         95th percentile:                        0.03
         sum:                                 9918.30

Threads fairness:
    events (avg/stddev):           244213.0000/0.00
    execution time (avg/stddev):   9.9183/0.00

総合的に1.3倍程向上してるようです。最後に MySQL での入出力を。事前の準備(CREATE DATABASE や GRANT 等)については省略します。

v2:~$ sysbench --db-driver=mysql --mysql-user=sysbench --mysql-password=******** --mysql-host=localhost --mysql-db=sysbench oltp_read_write run
sysbench 1.0.18 (using system LuaJIT 2.1.0-beta3)

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time


Initializing worker threads...

Threads started!

SQL statistics:
    queries performed:
        read:                            35378
        write:                           10108
        other:                           5054
        total:                           50540
    transactions:                        2527   (252.57 per sec.)
    queries:                             50540  (5051.32 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          10.0026s
    total number of events:              2527

Latency (ms):
         min:                                    2.44
         avg:                                    3.95
         max:                                   24.78
         95th percentile:                        5.28
         sum:                                 9992.98

Threads fairness:
    events (avg/stddev):           2527.0000/0.00
    execution time (avg/stddev):   9.9930/0.00
v3:~$ sysbench --db-driver=mysql --mysql-user=sysbench --mysql-password=******** --mysql-host=localhost --mysql-db=sysbench oltp_read_write run
sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time


Initializing worker threads...

Threads started!

SQL statistics:
    queries performed:
        read:                            91098
        write:                           26028
        other:                           13014
        total:                           130140
    transactions:                        6507   (650.48 per sec.)
    queries:                             130140 (13009.58 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          10.0016s
    total number of events:              6507

Latency (ms):
         min:                                    1.20
         avg:                                    1.54
         max:                                   10.59
         95th percentile:                        2.00
         sum:                                 9989.15

Threads fairness:
    events (avg/stddev):           6507.0000/0.00
    execution time (avg/stddev):   9.9891/0.00

こちらも2.6倍の向上というご機嫌な結果に。

まぁ単純なベンチマーキングなので、アプリケーションの体感等にどの程度現れてくるかは分かりませんが、これなら V2 ユーザは V3 に移行して損はないようです。ConoHa さんももうちょっと積極的にプッシュしたらエエのでは。