さくらのVPS v5のディスク速度を調べてみる

# イントロ
2019.11.7からさくらインターネットのVPSがリニューアルされてv5となり、ストレージはSSDが標準となった。今借りてるさくらのVPS v3がメモリ1GBで足りなく感じてたのでこれを機にメモリ2GBのプランに変更することに。

ストレージ容量が以前のものと比較して少し少なくなっているため、同じ容量にするには「[ストレージ変更オプション](https://vps-news.sakura.ad.jp/2019/10/10/vps-win-re-notice/)」が必要なのだが、**「ストレージ変更オプションを利用するとストレージ構成が変更されるため、未利用時と比べて性能差が出る場合があります。」**という気になる一文を発見。どの程度パフォーマンスに差が出るのか確認してみることに。

# ディスク情報
とりあえずバニラな2Gプランとストレージ変更オプション付き2Gプランをお試し契約してディスクを確認。
GUIDが2台で同じだがそういうものらしい。

## さくらのVPS v5 2Gプラン

```
# lshw -class disk
  *-cdrom
       description: DVD reader
       product: QEMU DVD-ROM
       vendor: QEMU
       physical id: 0.0.0
       bus info: scsi@1:0.0.0
       logical name: /dev/cdrom
       logical name: /dev/sr0
       version: 1.5.
       capabilities: removable audio dvd
       configuration: ansiversion=5 status=nodisc
  *-virtio3
       description: Virtual I/O device
       physical id: 0
       bus info: virtio@3
       logical name: /dev/vda
       size: 100GiB (107GB)
       capabilities: gpt-1.00 partitioned partitioned:gpt
       configuration: driver=virtio_blk guid=d53c0ed9-670f-4703-95af-25d1ae1381c5 logicalsectorsize=512 sectorsize=512

# fdisk -l
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

Disk /dev/vda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt
Disk identifier: D53C0ED9-670F-4703-95AF-25D1AE1381C5


#         Start          End    Size  Type            Name
 1         2048         4095      1M  BIOS boot       BIOS
 2         4096      1028095    500M  Microsoft basic Microsoft
 3      1028096      9416703      4G  Linux swap      Linux
 4      9416704    209712511   95.5G  Microsoft basic Microsoft
```

## さくらのVPS v5 2G（SSD200GB）プラン

```
# lshw -class disk
  *-cdrom
       description: DVD reader
       product: QEMU DVD-ROM
       vendor: QEMU
       physical id: 0.0.0
       bus info: scsi@1:0.0.0
       logical name: /dev/cdrom
       logical name: /dev/sr0
       version: 1.5.
       capabilities: removable audio dvd
       configuration: ansiversion=5 status=nodisc
  *-virtio3
       description: Virtual I/O device
       physical id: 0
       bus info: virtio@3
       logical name: /dev/vda
       size: 200GiB (214GB)
       capabilities: gpt-1.00 partitioned partitioned:gpt
       configuration: driver=virtio_blk guid=d53c0ed9-670f-4703-95af-25d1ae1381c5 logicalsectorsize=512 sectorsize=512

# fdisk -l
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

Disk /dev/vda: 214.7 GB, 214748364800 bytes, 419430400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt
Disk identifier: D53C0ED9-670F-4703-95AF-25D1AE1381C5


#         Start          End    Size  Type            Name
 1         2048         4095      1M  BIOS boot       BIOS
 2         4096      1028095    500M  Microsoft basic Microsoft
 3      1028096      9416703      4G  Linux swap      Linux
 4      9416704    419427711  195.5G  Microsoft basic Microsoft
```

# ベンチマーク
fioでディスクをベンチマーク。断りがない限りCentOS7。

<details><summary>fioジョブパラメータ</summary><div>

```
[seqread]
readwrite=read
blocksize=1m
size=100m
directory=./
direct=1
loops=5
 
[seqwrite]
readwrite=write
blocksize=1m
size=100m
directory=./
direct=1
loops=5
 
[seqread4]
readwrite=read
blocksize=1m
size=100m
directory=./
direct=1
numjobs=4
loops=5
group_reporting
 
[seqwrite4]
readwrite=write
blocksize=1m
size=100m
directory=./
direct=1
numjobs=4
loops=5
group_reporting
 
[randread512k]
readwrite=randread
blocksize=512k
size=100m
directory=./
direct=1
loops=5
 
[randwrite512k]
readwrite=randwrite
blocksize=512k
size=100m
directory=./
direct=1
loops=5
 
[randread4k]
readwrite=randread
blocksize=4k
size=10m
directory=./
direct=1
loops=3
 
[randwrite4k]
readwrite=randwrite
blocksize=4k
size=10m
directory=./
direct=1
loops=3
 
[randread4k32]
readwrite=randread
blocksize=4k
size=10m
directory=./
direct=1
numjobs=32
loops=3
group_reporting
 
[randwrite4k32]
readwrite=randwrite
blocksize=4k
size=10m
directory=./
direct=1
numjobs=32
loops=3
group_reporting
```

</div>

## さくらのVPS v5 2Gプラン

```
# sh fio.sh
job, bandwidth, iops
seqread, 212184, 207
seqwrite, 204718, 199
seqread4, 206701, 201
seqwrite4, 204759, 199
randread512k, 211745, 413
randwrite512k, 204636, 399
randread4k, 39792, 9948
randwrite4k, 8069, 2017
randread4k32, 40094, 10023
randwrite4k32, 7998, 1999
```

## さくらのVPS v5 2G（SSD200GB）プラン

```
# sh fio.sh
job, bandwidth, iops
seqread, 212448, 207
seqwrite, 204636, 199
seqread4, 206722, 201
seqwrite4, 204759, 199
randread512k, 211832, 413
randwrite512k, 204636, 399
randread4k, 40688, 10172
randwrite4k, 6014, 1503
randread4k32, 40092, 10023
randwrite4k32, 5997, 1499
```

rand*4k32で8kに変更して追試

```
randread8k32, 80464, 10058
randwrite8k32, 12001, 1500
```

## 参考用: さくらのVPS v3 1Gプラン（HDD 100GB）
これだけCentOS 6

```
# sh fio.sh
job, bandwidth, iops
seqread, 1054905, 1006
seqwrite, 855282, 815
seqread4, 1566207, 1493
seqwrite4, 1154183, 1100
randread512k, 740519, 1412
randwrite512k, 638596, 1218
randread4k, 28162, 6875
randwrite4k, 25206, 6153
randread4k32, 180238, 44003
randwrite4k32, 163600, 39941
```

## 参考用: 安鯖＋安物SSD(ADATA SU650)

```
# sh fio.sh
job, bandwidth, iops
seqread, 250734, 244
seqwrite, 60185, 58
seqread4, 271906, 265
seqwrite4, 88558, 86
randread512k, 234539, 458
randwrite512k, 68513, 133
randread4k, 31867, 7966
randwrite4k, 26459, 6614
randread4k32, 152622, 38155
randwrite4k32, 101637, 25409
```

# 結論
さくらのVPS v5プランではディスクIOが制限されていて、200MB/sまたはRead 10,000IOPS、Write 2,000IOPSとなっていると推測される。ストレージを変更すると制限も一部変更されてWrite 1,500IOPSになる模様。
さくらのVPS v3プランはHDDなのにSSDの新プランがほぼ全面的に負けている状態とは…

時間帯を変えて複数回テストしてみてもほぼ変わらず。また、お試し期間による制限かと考え、200GBに変更した方を本契約に切り替え、24時間以上経過したあとにも確認してみたが、変わりは無かった。