[OCI] Cloudharmony に基づいた Block Volume の性能計測環境の構築

OCI のブロック・ボリュームの性能情報は、
https://docs.oracle.com/ja-jp/iaas/Content/Block/Concepts/blockvolumeperformance.htm#Block_Volume_Performance
に載っています。ここで使用している性能情報は Cloudharmony が提供する性能計測ツールを使って計測しています。
Cloudharmony とは会社名であり、クラウドベンダー毎に、Block Volume の計測手法等が異なると性能が比較しにくいということで、同じ手法で計測して、クラウドベンダー間での差を均して、より公正な性能比較することを推進していて、そのツール名でもあります。
そこで、ここでは、Cloudharmony を使った性能計測環境を構築してみます。
# 手順

## テスト対象 OCI インスタンスの起動

OS イメージは、今回は Oracle Linux 7.9 を使用しました、Oracle イメージの中から "Oracle Cloud Developer Image"を選んでもいいかもしれません、その場合、git が事前に install されている、wkhtmltopdf が最初から yum で install できる REPO の設定になっているなどのメリットがあります。

## Block Volume の追加

計測したい形式の Block Volume を追加します、
ここでの注意点は、Compute と同一の Fault Domain に作ることくらいです。

Block Volume を追加したら `lsblk` で追加されたことを確認します。
例えば下記の様な Block Volume 情報が見えると思います。
ここでは`sda`は OS が格納されているローカル NVMe Volume、`sdb`が
テスト対象の Block Volume です。

```
$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb      8:16   0   50G  0 disk
sda      8:0    0 46.6G  0 disk
├─sda2   8:2    0    8G  0 part [SWAP]
├─sda3   8:3    0 38.4G  0 part /
└─sda1   8:1    0  200M  0 part /boot/efi
```

Block Volume の準備はこれで完了です、fdisk とか filesystem を導入する必要はありません、テストは Block Volume 全体に対して dd の様に実行されます。`sdb`がテスト対象です。

## 前提ツールのインストール

前提ツールを、まとめて install します

```sh
sudo yum install php-cli fio gnuplot -y
```

wkhtmltopdf も pdf 作成に必要ですが、repo にないので下記コマンドでインストールします

```sh
sudo yum -y install libXrender libXext
wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
tar Jxfv wkhtmltox-0.12.4_linux-generic-amd64.tar.xz

sudo cp wkhtmltox/bin/wkhtmltoimage /usr/bin/
sudo cp wkhtmltox/bin/wkhtmltopdf /usr/bin/
```

## github から Cloudharmony 入手

```sh
git clone https://github.com/cloudharmony/block-storage
cd block-storage
```

## 性能計測

それでは、Oracle のサイトで示していたテストスクリプトと同じものを動かしてみます。ここでのテスト対象 Block Volume は`/dev/sdb`です。
ドキュメントでも事前のバックアップが強弁されていますが、間違って/dev/sda を対象に run.sh を動かすと、OS 区画に対して read write テストを上書きすることになります。

```sh
sudo ./run.sh --nopurge --noprecondition --fio_direct=1 --fio_size=10g --target /dev/sdb --test iops --skip_blocksize 512b
```

上記コマンドを実行しばらく待つ、すると実行した block-storage のディレクトリに report.zip, report.pdf, fio-iops.json, iops.json の 4 つのファイルができていることが分かります。

report.pdf は最終的な報告書

report.zip はpdf 化した報告書の素材

\*.json は pdf のテンプレートエンジンに投入する元データのようです。

PC 側の opnSSH などの scp コマンドで以下のファイルをダウンロードします、
pdfはそのまま性能検証報告に使えそうです。

```powershell
scp opc@<Computeのipアドレス>:/home/opc/block-storage/report.* .
scp opc@<Computeのipアドレス>:/home/opc/block-storage/*.json .
```


# 計測結果書式

6 ページからなる、iops ベースの性能情報が記載された pdf と、その元データがダウンロードできました。以下は、1ページ目です。

![rapture_20210127073627-1611700666852.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3968/fa13b4b0-817e-4ae4-0331-8cd79c0901a5.jpeg)
グラフを最初から作ってくれるのは良いですね。
# Troubleshoot

- 実行時に json_decode() エラーが出たら

```
PHP Fatal error:  Uncaught Error: Call to undefined function json_decode() in /home/opc/block-storage/lib/BlockStorageTest.php:352
```
json parser がないと言われているので json parser を適当にみつくろって install します。

# まとめ

- Cloudharmony のテストツールを使うと Block Volume の性能が、どのクラウドベンダーに対しても統一された形式の pdf で出力されるので、相互に比較しやすい。
- wkhtmltopdf というテンプレートエンジンを php-cli から呼び出す形式で pdf を生成している。本当に必要なデータは json 形式で作られた性能情報。このデータがあれば測定結果の再集計も可能。
- 性能計測は Block Volume としてテストされ、ext4 などのファイルシステムとしての性能をテストしているものではない。
- Windows OS で計測する場合は ATP(Active Thread Protection)が性能を低下させるので性能評価時は Bearmetal を使い、ATP なしで計測するという情報については、Bearmetal の Windows を使う可能性が低そうなので検証せず。
- `--test iops` というオプションは random read writeの意味。
- テスト手法の考え方は SNIA SSS PTS という標準に基づいている。SSDに向いたテスト形式が考えてある。

## links

wkhtmltopdf の別なインストール方法
https://qiita.com/ucan-lab/items/5ba8c8fac4407239f19f

ブロック・ボリュームの概要
https://docs.oracle.com/ja-jp/iaas/Content/Block/Concepts/overview.htm

wkhtmltopdf の直接ダウンロードのサイト
https://wkhtmltopdf.org/downloads.html

Baremetal の性能についての調査情報
https://www.storagereview.com/review/oracle-cloud-infrastructure-compute-bare-metal-instances-review

クラウドベンチマークを無償で公開する CloudHarmony。その理由と手法を聞いた
https://www.publickey1.jp/blog/12/prcloudharmony.html

SNIA SSS PTS (Storage Networking Industry Association Solid State storage Performance Test Specification)
SNIA: SSDを対象とした性能計測手法などの標準化を進めている団体

https://www.snia.org/tech_activities/standards/curr_standards/pts

-- 以上