Oracle Cloud: 超高パフォーマンス・ボリューム(UHP) のブロック・ボリュームをマルチパス対応の iSCSIボリュームアタッチメント構成してみてみた

ボリュームあたり最大 300,000 IOPS および 2,680 MB/秒のスループットを備えた Ultra High Performance Volumes (UHP) ブロック ボリュームを、サポートされているコンピューティング インスタンスでこのパフォーマンスを活用できます。
ということで、Oracle Cloud Infrastructure Block Volumeサービスのパフォーマンス・テストを実行するために使用できる FIOコマンド で IOPS と スループットを計測してみてみます。



# ■ 超高パフォーマンス・ボリュームのためのアタッチメントの構成
超高パフォーマンス・レベルで構成されたボリュームをアタッチして、最適なパフォーマンスを実現するには、ボリューム・アタッチメントをマルチパス対応にする必要があります。
ブロック・ボリューム・サービスでは、ボリュームをアタッチする際に、アタッチメントがマルチパス対応になるよう試行します。満たしていない前提条件があると、ボリューム・アタッチメントはマルチパス対応になりません。

## ● マルチパス対応のiSCSIアタッチメント前提条件
マルチパス対応のiSCSIボリュームアタッチメントを構成するために必要な前提条件
・[サポートされているシェイプ](https://docs.oracle.com/ja-jp/iaas/Content/Block/Tasks/configuringmultipathattachments.htm#multipath_shapes_iSCSI)
・[サポートされてるイメージ](https://docs.oracle.com/ja-jp/iaas/Content/Block/Tasks/configuringmultipathattachments.htm#multipath_images_iSCSI)
・インスタンスに、同じインスタンスの別のマルチパス対応アタッチメントが存在しないこと。
・[インスタンスのブロック・ボリューム管理プラグインを有効化](https://docs.oracle.com/ja-jp/iaas/Content/Block/Tasks/enablingblockvolumemanagementplugin.htm#enablingblockvolumemanagementplugin)
・[ブロック・ボリューム管理プラグインのパブリックIPアドレスまたはサービス・ゲートウェイを設定](https://docs.oracle.com/ja-jp/iaas/Content/Block/Tasks/enablingblockvolumemanagementplugin.htm#blockplugin-prereq__pre-req_servicegate)
・[権限の構成](https://docs.oracle.com/ja-jp/iaas/Content/Block/Tasks/enablingblockvolumemanagementplugin.htm#blockplugin-prereq__perms)
・[一貫性のあるデバイス・パスを使用](https://docs.oracle.com/ja-jp/iaas/Content/Block/References/consistentdevicepaths.htm#Connecting_to_Volumes_With_Consistent_Device_Paths)



# ■ 権限の構成
ブロック・ボリューム管理プラグインが、マルチパス対応iSCSIアタッチメントのiSCSI設定の結果をレポートできるよう、権限を構成する必要があります

### 1) 動的グループの作成
次のコード・サンプルの一致ルールを使用して動的グループを作成し、指定したコンパートメント内のすべてのインスタンスを追加します

```:例)
ANY {instance.compartment.id = '<テナンシOCID>', instance.compartment.id = '<コンパートメントOCID>'}
```

![11_動的グループ01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/255b2928-a0e9-580f-ec4c-a28c5ea9492b.jpeg)


### 2) 動的グループのポリシーの構成
前のステップで作成した動的グループに権限を付与するポリシーを構成して、インスタンス・エージェントによるアクセスを可能にし、ブロック・ボリューム・サービスをコールして、アタッチメント構成を取得できるようにします。

```:例)
Allow dynamic-group InstantAgent to use instances in tenancy <テナンシ名>
Allow dynamic-group InstantAgent to use volume-attachments in tenancy <テナンシ名>
```
![11_動的グループ02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/52a08b8b-f1ff-81a3-758b-61211291fdfe.jpeg)


# ■ サービス・ゲートウェイ設定
コンピュート・インスタンスがOracleサービス (OCN) にアクセスできるよう
サービス・ゲートウェイを作成して、インスタンス配置するサブネットの ルート・ルールへ「 All <region> Oracle Services Network Service」を設定します。
![12_ルートルール01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/e989a35d-e72c-07a7-e92d-15ee7ff55e78.jpeg)


# ■ インスタンス作成
### 1) インスタンス作成
マルチパス有効化するために 以下項目を設定して作成

    ・サポートされているシェイプ: Oracle Linux 8
    ・サポートされてるイメージ: 16 OCPU の VM.Optimized3.Flex
    ・インスタンスのブロック・ボリューム管理プラグイン: 有効化

![01_Compute作成02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/24a0e645-76df-a690-54ed-c9ad41aba46a.jpeg)



### 2) 作成完了
![01_Compute作成03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/3a3ab976-b4e8-5690-ed35-206fa9b7c8dd.jpeg)



### 3) インスタンスのブロック・ボリューム管理プラグイン 有効化確認
作成したインスタンス画面にある[Oracle Cloudエージェント]タブをクリックして、ブロック・ボリューム管理のステータスが "実行中" であることを確認
![01_Compute作成04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/8362817b-5135-baad-1745-847b362f42e8.jpeg)


# ■ UHP ブロック・ボリューム作成
### 1) ブロック・ボリューム画面
ブロック・ボリュームの作成をクリック
![02_UHPボリューム作成01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/7a9037aa-41ca-1f17-caf0-0cc7436b7d78.jpeg)


### 2) ブロック・ボリュームの作成画面

UHPのボリューム当たりの最大IOPS が出るように次を設定し、[ブロック・ボリュームの作成]をクリック

	・ボリューム・サイズ(GB): 1333 以上を設定
	・VPU/GB: 120 を設定

![02_UHPボリューム作成02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/cb995640-7f67-f366-2457-107443a2239c.jpeg)

### 2) ブロック・ボリュームの作成確認
![02_UHPボリューム作成03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/a19440c6-e3a3-eec5-b285-2fe1428ff77c.jpeg)


# ■ ブロック・ボリュームのアタッチ
## ⚫︎ インスタンスへブロック・ボリュームをアタッチ


### 1) インスタンス画面
リソース欄にある[アタッチされたブロック・ボリューム]をクリックし、[ブロック・ボリューム]のアタッチをクリック


### 2) ブロック・ボリュームのアタッチ画面
マルチパス対応のiSCSIボリュームアタッチメントを構成するように次の項目を設定し、[アタッチ]をクリック
```
・ ボリューム: アタッチするボリュームを選択
・ デバイス・パス: マルチパス条件で必要なため、任意のパスを選択
・ アタッチメント・タイプ: ここでは iSCSIを選択
・ Oracle Cloudエージェントを使用して、iSCSIでアタッチされたボリュームに自動的に接続します: チェック
・ アクセス: 任意の項目を選択
```
![03_UHPボリュームアタッチ01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/6477a34c-bbf7-c01a-2727-0cfbd96ef007.jpeg)


### 3) アタッチ確認
アタッチしたインスタンスのコンピュート画面にある[アタッチされたブロック・ボリューム]をクリックし、アタッチしたブロック・ボリュームのマルチパスの項目が ”はい”　であることを確認。'いいえ'の場合は、[ボリューム・アタッチメントがマルチパス対応かどうかのチェック](https://docs.oracle.com/ja-jp/iaas/Content/Block/Tasks/multipathcheck.htm#multipathcheck)を確認してトラブルシュートします。

![03_UHPボリュームアタッチ03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/49fe68ed-ba04-4b5c-1477-f31a4dd61ee0.jpeg)


### 4) OSコマンドで物理ボリューム確認
物理ボリュームの情報を表示して追加した /dev/oracleoci/oraclevdb があることを確認

**・ 物理ボリュームの情報**
```
[root@uhp-inst ~]# pvs -a
  PV                       VG        Fmt  Attr PSize  PFree
  /dev/oracleoci/oraclevdb                ---      0     0
  /dev/sda1                               ---      0     0
  /dev/sda2                               ---      0     0
  /dev/sda3                ocivolume lvm2 a--  45.47g    0
```

**・ 各物理ボリュームの詳細**
```
[root@uhp-inst ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda3
  VG Name               ocivolume
  PV Size               <45.48 GiB / not usable 4.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              11641
  Free PE               0
  Allocated PE          11641
  PV UUID               hEVNRk-tDES-K596-8pgT-sHjd-PonS-NmRcVJ

  --- Physical volume ---
  PV Name               /dev/oracleoci/oraclevdb
  VG Name               vg1
  PV Size               1.46 TiB / not usable 4.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              383999
  Free PE               383999
  Allocated PE          0
  PV UUID               Hc8bEB-XQha-5gdb-G64c-9O0H-jkOc-LuAgV1
```

**・ LVM ブロックデバイスをすべてスキャン**
```
[root@uhp-inst ~]# pvscan
  PV /dev/sda3                  VG ocivolume       lvm2 [45.47 GiB / 0    free]
  PV /dev/oracleoci/oraclevdb   VG vg1             lvm2 [1.46 TiB / 1.46 TiB free]
  Total: 2 [<1.51 TiB] / in use: 2 [<1.51 TiB] / in no VG: 0 [0   ]
```



**・ 物理ボリュームに使用できるブロックデバイスを一覧表示**

```
[root@uhp-inst ~]# lvmdiskscan
  /dev/sda1                [     100.00 MiB]
  /dev/sda2                [       1.00 GiB]
  /dev/sda3                [     <45.48 GiB] LVM physical volume
  /dev/oracleoci/oraclevdb [       1.46 TiB]
  1 disk
  2 partitions
  0 LVM physical volume whole disks
  1 LVM physical volume
```



**・ ブロックデバイス確認**
```
[root@uhp-inst ~]# lsblk
    NAME               MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
	sda                  8:0    0 46.6G  0 disk
	|-sda1               8:1    0  100M  0 part  /boot/efi
	|-sda2               8:2    0    1G  0 part  /boot
	`-sda3               8:3    0 45.5G  0 part
	  |-ocivolume-root 252:0    0 35.5G  0 lvm   /
	  `-ocivolume-oled 252:1    0   10G  0 lvm   /var/oled
	sdb                  8:16   0  1.5T  0 disk
	`-mpatha           252:2    0  1.5T  0 mpath
	sdc                  8:32   0  1.5T  0 disk
	`-mpatha           252:2    0  1.5T  0 mpath
	sdd                  8:48   0  1.5T  0 disk
	`-mpatha           252:2    0  1.5T  0 mpath
	sde                  8:64   0  1.5T  0 disk
	`-mpatha           252:2    0  1.5T  0 mpath
	sdf                  8:80   0  1.5T  0 disk
	`-mpatha           252:2    0  1.5T  0 mpath
	sdg                  8:96   0  1.5T  0 disk
	`-mpatha           252:2    0  1.5T  0 mpath
	sdh                  8:112  0  1.5T  0 disk
	`-mpatha           252:2    0  1.5T  0 mpath
	sdi                  8:128  0  1.5T  0 disk
	`-mpatha           252:2    0  1.5T  0 mpath
	sdj                  8:144  0  1.5T  0 disk
	`-mpatha           252:2    0  1.5T  0 mpath
	sdk                  8:160  0  1.5T  0 disk
	`-mpatha           252:2    0  1.5T  0 mpath
```


## ⚫︎ マルチパスの構成確認

**・ マルチパスのステータス確認**
```
[root@uhp-inst ~]# mpathconf
    multipath is enabled
    find_multipaths is yes
    user_friendly_names is enabled
    default property blacklist is disabled
    enable_foreign is not set (all foreign multipath devices will be shown)
    dm_multipath module is loaded
    multipathd is running
```

**・ マルチパス構成表示**
```
[root@uhp-inst ~]# sudo multipath -ll
	Aug 08 05:04:40 | /etc/multipath.conf line 15, value for fast_io_fail_tmo too small, capping at 1
	mpatha (3606e401d16b84ea7a15f336e057b986f) dm-2 ORACLE,BlockVolume
	size=1.5T features='4 queue_if_no_path retain_attached_hw_handler queue_mode bio' hwhandler='0' wp=rw
	`-+- policy='queue-length 0' prio=1 status=active
	  |- 3:0:0:2  sdb 8:16  active ready running
	  |- 4:0:0:2  sdc 8:32  active ready running
	  |- 5:0:0:2  sdd 8:48  active ready running
	  |- 6:0:0:2  sde 8:64  active ready running
	  |- 7:0:0:2  sdf 8:80  active ready running
	  |- 8:0:0:2  sdg 8:96  active ready running
	  |- 9:0:0:2  sdh 8:112 active ready running
	  |- 10:0:0:2 sdi 8:128 active ready running
	  |- 11:0:0:2 sdj 8:144 active ready running
	  `- 12:0:0:2 sdk 8:160 active ready running
```

**・ マルチパス構成ファイル確認**
```
[root@uhp-inst ~]# cat /etc/multipath.conf
defaults {
  user_friendly_names yes
  find_multipaths yes
  rr_weight uniform
  path_selector "queue-length 0"
  path_grouping_policy multibus
  polling_interval 30
  path_checker tur
  checker_timeout 300
  failback immediate
  verbosity 2
  rr_min_io 1
  rr_min_io_rq 1
  dev_loss_tmo 9000
  fast_io_fail_tmo -1
  no_path_retry queue
  skip_kpartx no
  features "2 queue_mode bio"
}
```

```
[root@uhp-inst ~]# cat /usr/share/doc/device-mapper-multipath/multipath.conf
    # This is a basic configuration file with some examples, for device mapper
	# multipath.
	#
	# For a complete list of the default configuration values, run either
	# multipath -t
	# or
	# multipathd show config
	#
	# For a list of configuration options with descriptions, see the multipath.conf
	# man page
	
	## By default, devices with vendor = "IBM" and product = "S/390.*" are
	## blacklisted. To enable mulitpathing on these devies, uncomment the
	## following lines.
	#blacklist_exceptions {
	#	device {
	#		vendor	"IBM"
	#		product	"S/390.*"
	#	}
	#}
	
	## Use user friendly names, instead of using WWIDs as names.
	defaults {
		user_friendly_names yes
		find_multipaths yes
	}
	##
	## Here is an example of how to configure some standard options.
	##
	#
	#defaults {
	#	udev_dir		/dev
	#	polling_interval 	10
	#	selector		"round-robin 0"
	#	path_grouping_policy	multibus
	#	prio			alua
	#	path_checker		readsector0
	#	rr_min_io		100
	#	max_fds			8192
	#	rr_weight		priorities
	#	failback		immediate
	#	no_path_retry		fail
	#	user_friendly_names	yes
	#}
	##
	## The wwid line in the following blacklist section is shown as an example
	## of how to blacklist devices by wwid.  The 2 devnode lines are the
	## compiled in default blacklist. If you want to blacklist entire types
	## of devices, such as all scsi devices, you should use a devnode line.
	## However, if you want to blacklist specific devices, you should use
	## a wwid line.  Since there is no guarantee that a specific device will
	## not change names on reboot (from /dev/sda to /dev/sdb for example)
	## devnode lines are not recommended for blacklisting specific devices.
	##
	#blacklist {
	#       wwid 26353900f02796769
	#	devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
	#	devnode "^hd[a-z]"
	#}
	#multipaths {
	#	multipath {
	#		wwid			3600508b4000156d700012000000b0000
	#		alias			yellow
	#		path_grouping_policy	multibus
	#		path_checker		readsector0
	#		path_selector		"round-robin 0"
	#		failback		manual
	#		rr_weight		priorities
	#		no_path_retry		5
	#	}
	#	multipath {
	#		wwid			1DEC_____321816758474
	#		alias			red
	#	}
	#}
	#devices {
	#	device {
	#		vendor			"COMPAQ  "
	#		product			"HSV110 (C)COMPAQ"
	#		path_grouping_policy	multibus
	#		path_checker		readsector0
	#		path_selector		"round-robin 0"
	#		hardware_handler	"0"
	#		failback		15
	#		rr_weight		priorities
	#		no_path_retry		queue
	#	}
	#	device {
	#		vendor			"COMPAQ  "
	#		product			"MSA1000         "
	#		path_grouping_policy	multibus
	#	}
	#}
```

# ■ FIOのインストール

### 1) install fio
Oracle LinuxまたはCentOSシステムにFIOをインストールして構成するには、次のコマンドを実行します

```
[root@uhp-inst ~]# dnf install fio -y
This system is receiving updates from OSMS server.
Last metadata expiration check: 1:52:21 ago on Mon 19 Jun 2023 06:00:03 AM GMT.
Dependencies resolved.
================================================================================================================================================
 Package                               Architecture           Version                            Repository                                Size
================================================================================================================================================
Installing:
 fio                                   x86_64                 3.19-4.el8                         ol8_appstream-x86_64                     538 k
Installing dependencies:
 boost-iostreams                       x86_64                 1.66.0-13.el8                      ol8_appstream-x86_64                      42 k
 boost-program-options                 x86_64                 1.66.0-13.el8                      ol8_appstream-x86_64                     141 k
 boost-random                          x86_64                 1.66.0-13.el8                      ol8_appstream-x86_64                      22 k
 daxctl-libs                           x86_64                 71.1-4.el8                         ol8_baseos_latest-x86_64                  42 k
 libpmem                               x86_64                 1.6.1-1.el8                        ol8_appstream-x86_64                      79 k
 libpmemblk                            x86_64                 1.6.1-1.el8                        ol8_appstream-x86_64                      92 k
 librados2                             x86_64                 1:12.2.7-9.0.1.el8                 ol8_appstream-x86_64                     2.9 M
 librbd1                               x86_64                 1:12.2.7-9.0.1.el8                 ol8_appstream-x86_64                     1.1 M
 librdmacm                             x86_64                 41.0-1.el8                         ol8_baseos_latest-x86_64                  78 k
 ndctl-libs                            x86_64                 71.1-4.el8                         ol8_baseos_latest-x86_64                  80 k

Transaction Summary
================================================================================================================================================
Install  11 Packages

Total download size: 5.0 M
Installed size: 17 M
Downloading Packages:
(1/11): ndctl-libs-71.1-4.el8.x86_64.rpm                                                                        836 kB/s |  80 kB     00:00
(2/11): libpmem-1.6.1-1.el8.x86_64.rpm                                                                           16 MB/s |  79 kB     00:00
(3/11): librdmacm-41.0-1.el8.x86_64.rpm                                                                         760 kB/s |  78 kB     00:00
(4/11): libpmemblk-1.6.1-1.el8.x86_64.rpm                                                                        22 MB/s |  92 kB     00:00
(5/11): librbd1-12.2.7-9.0.1.el8.x86_64.rpm                                                                      50 MB/s | 1.1 MB     00:00
(6/11): daxctl-libs-71.1-4.el8.x86_64.rpm                                                                       323 kB/s |  42 kB     00:00
(7/11): boost-iostreams-1.66.0-13.el8.x86_64.rpm                                                                 11 MB/s |  42 kB     00:00
(8/11): boost-random-1.66.0-13.el8.x86_64.rpm                                                                    11 MB/s |  22 kB     00:00
(9/11): fio-3.19-4.el8.x86_64.rpm                                                                                63 MB/s | 538 kB     00:00
(10/11): librados2-12.2.7-9.0.1.el8.x86_64.rpm                                                                   56 MB/s | 2.9 MB     00:00
(11/11): boost-program-options-1.66.0-13.el8.x86_64.rpm                                                         495 kB/s | 141 kB     00:00
------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                            12 MB/s | 5.0 MB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                        1/1
  Installing       : boost-random-1.66.0-13.el8.x86_64                                                                                     1/11
  Running scriptlet: boost-random-1.66.0-13.el8.x86_64                                                                                     1/11
  Installing       : boost-program-options-1.66.0-13.el8.x86_64                                                                            2/11
  Running scriptlet: boost-program-options-1.66.0-13.el8.x86_64                                                                            2/11
  Installing       : boost-iostreams-1.66.0-13.el8.x86_64                                                                                  3/11
  Running scriptlet: boost-iostreams-1.66.0-13.el8.x86_64                                                                                  3/11
  Installing       : librados2-1:12.2.7-9.0.1.el8.x86_64                                                                                   4/11
  Running scriptlet: librados2-1:12.2.7-9.0.1.el8.x86_64                                                                                   4/11
  Installing       : libpmem-1.6.1-1.el8.x86_64                                                                                            5/11
  Running scriptlet: libpmem-1.6.1-1.el8.x86_64                                                                                            5/11
  Installing       : daxctl-libs-71.1-4.el8.x86_64                                                                                         6/11
  Running scriptlet: daxctl-libs-71.1-4.el8.x86_64                                                                                         6/11
  Installing       : ndctl-libs-71.1-4.el8.x86_64                                                                                          7/11
  Running scriptlet: ndctl-libs-71.1-4.el8.x86_64                                                                                          7/11
  Installing       : libpmemblk-1.6.1-1.el8.x86_64                                                                                         8/11
  Running scriptlet: libpmemblk-1.6.1-1.el8.x86_64                                                                                         8/11
  Installing       : librbd1-1:12.2.7-9.0.1.el8.x86_64                                                                                     9/11
  Running scriptlet: librbd1-1:12.2.7-9.0.1.el8.x86_64                                                                                     9/11
  Installing       : librdmacm-41.0-1.el8.x86_64                                                                                          10/11
  Running scriptlet: librdmacm-41.0-1.el8.x86_64                                                                                          10/11
  Installing       : fio-3.19-4.el8.x86_64                                                                                                11/11
  Running scriptlet: fio-3.19-4.el8.x86_64                                                                                                11/11
  Verifying        : daxctl-libs-71.1-4.el8.x86_64                                                                                         1/11
  Verifying        : librdmacm-41.0-1.el8.x86_64                                                                                           2/11
  Verifying        : ndctl-libs-71.1-4.el8.x86_64                                                                                          3/11
  Verifying        : libpmem-1.6.1-1.el8.x86_64                                                                                            4/11
  Verifying        : libpmemblk-1.6.1-1.el8.x86_64                                                                                         5/11
  Verifying        : librados2-1:12.2.7-9.0.1.el8.x86_64                                                                                   6/11
  Verifying        : librbd1-1:12.2.7-9.0.1.el8.x86_64                                                                                     7/11
  Verifying        : boost-iostreams-1.66.0-13.el8.x86_64                                                                                  8/11
  Verifying        : boost-program-options-1.66.0-13.el8.x86_64                                                                            9/11
  Verifying        : boost-random-1.66.0-13.el8.x86_64                                                                                    10/11
  Verifying        : fio-3.19-4.el8.x86_64                                                                                                11/11

Installed:
  boost-iostreams-1.66.0-13.el8.x86_64          boost-program-options-1.66.0-13.el8.x86_64          boost-random-1.66.0-13.el8.x86_64
  daxctl-libs-71.1-4.el8.x86_64                 fio-3.19-4.el8.x86_64                               libpmem-1.6.1-1.el8.x86_64
  libpmemblk-1.6.1-1.el8.x86_64                 librados2-1:12.2.7-9.0.1.el8.x86_64                 librbd1-1:12.2.7-9.0.1.el8.x86_64
  librdmacm-41.0-1.el8.x86_64                   ndctl-libs-71.1-4.el8.x86_64

Complete!
```


# ■ 計測：FIOコマンド
## ● IOPSパフォーマンス・テスト
IOPSパフォーマンスをテストするには、次のFIOサンプル・コマンドを使用します。

**・ 順次読取りのテスト**
データベース・ワークロードなど、順次アクセス・パターンを利用できるワークロードに対しては、順次読取りをテストすることにより、このパターンのパフォーマンスを確認できます。

```:構文
fio --filename=/dev/oracleoci/oraclevdb --direct=1 --rw=read --bs=4k --ioengine=libaio --iodepth=256 --runtime=120 --numjobs=4 --time_based --group_reporting --name=iops-test-job --eta-newline=1 --readonly
```

### 1) 実行
```
[root@uhp-inst ~]# sudo fio --filename=/dev/oracleoci/oraclevdb --direct=1 --rw=read --bs=4k --ioengine=libaio --iodepth=256 --runtime=120 --numjobs=4 --time_based --group_reporting --name=iops-test-job --eta-newline=1 --readonly
iops-test-job: (g=0): rw=read, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=256
...
fio-3.19
Starting 4 processes
Jobs: 4 (f=4): [R(4)][2.5%][r=2202MiB/s][r=564k IOPS][eta 01m:58s]
Jobs: 4 (f=4): [R(4)][3.3%][r=1173MiB/s][r=300k IOPS][eta 01m:57s]
Jobs: 4 (f=4): [R(4)][4.1%][r=1172MiB/s][r=300k IOPS][eta 01m:56s]
・・・
Jobs: 4 (f=4): [R(4)][99.2%][r=1172MiB/s][r=300k IOPS][eta 00m:01s]
Jobs: 4 (f=4): [R(4)][100.0%][r=1172MiB/s][r=300k IOPS][eta 00m:00s]
Jobs: 4 (f=0): [f(4)][100.0%][r=1140MiB/s][r=292k IOPS][eta 00m:00s]
iops-test-job: (groupid=0, jobs=4): err= 0: pid=10602: Fri Jun 16 15:21:45 2023
  read: IOPS=305k, BW=1191MiB/s (1249MB/s)(140GiB/120024msec)
    slat (nsec): min=1439, max=1805.1k, avg=4589.40, stdev=2863.25
    clat (usec): min=95, max=354659, avg=3352.81, stdev=6727.57
     lat (usec): min=181, max=354662, avg=3357.51, stdev=6727.55
    clat percentiles (usec):
     |  1.00th=[   265],  5.00th=[   314], 10.00th=[   355], 20.00th=[   412],
     | 30.00th=[   465], 40.00th=[   523], 50.00th=[   594], 60.00th=[   701],
     | 70.00th=[  1020], 80.00th=[  4293], 90.00th=[ 12649], 95.00th=[ 21365],
     | 99.00th=[ 24773], 99.50th=[ 25035], 99.90th=[ 25560], 99.95th=[ 39060],
     | 99.99th=[149947]
   bw (  MiB/s): min=  424, max= 2771, per=99.99%, avg=1191.09, stdev=44.92, samples=956
   iops        : min=108728, max=709497, avg=304919.50, stdev=11500.60, samples=956
  lat (usec)   : 100=0.01%, 250=0.55%, 500=35.65%, 750=26.51%, 1000=7.02%
  lat (msec)   : 2=6.24%, 4=3.45%, 10=7.75%, 20=7.64%, 50=5.17%
  lat (msec)   : 100=0.01%, 250=0.02%, 500=0.01%
  cpu          : usr=8.53%, sys=46.80%, ctx=8094914, majf=0, minf=1084
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.1%
     issued rwts: total=36600827,0,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=256

Run status group 0 (all jobs):
   READ: bw=1191MiB/s (1249MB/s), 1191MiB/s-1191MiB/s (1249MB/s-1249MB/s), io=140GiB (150GB), run=120024-120024msec
```
 
### 2) 実行確認
iops の測定結果は次の行確認します
avg=304919.50 あることが確認できます。
```
iops        : min=108728, max=709497, avg=304919.50, stdev=11500.60, samples=956
```


## ● スループット・パフォーマンス・テスト
スループット・パフォーマンスをテストするには、次のFIOサンプル・コマンドを使用します。

**・ 順次読取りのテスト**
データベース・ワークロードなど、順次アクセス・パターンを利用できるワークロードに対しては、順次読取りをテストすることにより、このパターンのパフォーマンスを確認できます。

```:構文
sudo fio --filename=/dev/oracleoci/oraclevdb --direct=1 --rw=read --bs=64k --ioengine=libaio --iodepth=64 --runtime=120 --numjobs=4 --time_based --group_reporting --name=throughput-test-job --eta-newline=1 --readonly
```

### 1) 実行
```
[root@uhp-inst ~]# sudo fio --filename=/dev/oracleoci/oraclevdb --direct=1 --rw=read --bs=64k --ioengine=libaio --iodepth=64 --runtime=120 --numjobs=4 --time_based --group_reporting --name=throughput-test-job --eta-newline=1 --readonly
throughput-test-job: (g=0): rw=read, bs=(R) 64.0KiB-64.0KiB, (W) 64.0KiB-64.0KiB, (T) 64.0KiB-64.0KiB, ioengine=libaio, iodepth=64
...
fio-3.19
Starting 4 processes
Jobs: 4 (f=4): [R(4)][2.5%][r=4814MiB/s][r=77.0k IOPS][eta 01m:58s]
Jobs: 4 (f=4): [R(4)][3.3%][r=2618MiB/s][r=41.9k IOPS][eta 01m:57s]
Jobs: 4 (f=4): [R(4)][4.1%][r=2618MiB/s][r=41.9k IOPS][eta 01m:56s]
・・・
Jobs: 4 (f=4): [R(4)][98.3%][r=2618MiB/s][r=41.9k IOPS][eta 00m:02s]Jobs: 4 (f=4): [R(4)][99.2%][r=2618MiB/s][r=41.9k IOPS][eta 00m:01s]
Jobs: 4 (f=4): [R(4)][100.0%][r=2617MiB/s][r=41.9k IOPS][eta 00m:00s]
throughput-test-job: (groupid=0, jobs=4): err= 0: pid=14033: Fri Jun 16 15:28:41 2023
  read: IOPS=42.6k, BW=2660MiB/s (2789MB/s)(312GiB/120008msec)
    slat (usec): min=2, max=398, avg= 8.31, stdev= 3.94
    clat (usec): min=533, max=38592, avg=6006.25, stdev=1486.27
     lat (usec): min=541, max=38597, avg=6014.69, stdev=1486.03
    clat percentiles (usec):
     |  1.00th=[ 2376],  5.00th=[ 3490], 10.00th=[ 3752], 20.00th=[ 4555],
     | 30.00th=[ 5211], 40.00th=[ 5735], 50.00th=[ 6652], 60.00th=[ 6849],
     | 70.00th=[ 7046], 80.00th=[ 7308], 90.00th=[ 7439], 95.00th=[ 7504],
     | 99.00th=[ 7963], 99.50th=[ 9241], 99.90th=[13173], 99.95th=[15664],
     | 99.99th=[21890]
   bw (  MiB/s): min= 2608, max= 5895, per=99.98%, avg=2659.33, stdev=86.47, samples=956
   iops        : min=41732, max=94334, avg=42549.25, stdev=1383.52, samples=956
  lat (usec)   : 750=0.01%, 1000=0.01%
  lat (msec)   : 2=0.37%, 4=11.56%, 10=87.70%, 20=0.35%, 50=0.02%
  cpu          : usr=2.19%, sys=15.66%, ctx=3405974, majf=0, minf=2096
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%
     issued rwts: total=5107251,0,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=64

Run status group 0 (all jobs):
   READ: bw=2660MiB/s (2789MB/s), 2660MiB/s-2660MiB/s (2789MB/s-2789MB/s), io=312GiB (335GB), run=120008-120008msec
```

 
### 2) 実行確認
スループット・パフォーマンス の測定結果は次の行確認します

bw=2660MiB/s (2789MB/s) あることが確認できます。
```
READ: bw=2660MiB/s (2789MB/s), 2660MiB/s-2660MiB/s (2789MB/s-2789MB/s), io=312GiB (335GB), run=120008-120008msec
```


# ■ 超高パフォーマンス・ボリュームで 100万IOPS, 5GB/sスループット出してみる
ボリュームあたり最大 300,000 IOPS および 2,680 MB/秒のスループットを備えた Ultra High Performance Volumes (UHP) ブロック ボリュームを複数ストライプ化すれば、よりパフォーマンスが出ます。


https://qiita.com/shirok/items/d8b8ee14fd9fb371d882


# ■ 参考
・[ブロック・ボリューム・パフォーマンス](https://docs.oracle.com/ja-jp/iaas/Content/Block/Concepts/blockvolumeperformance.htm#Block_Volume_Performance)
・[iSCSIでアタッチされたボリュームのVMシェイプ](https://docs.oracle.com/ja-jp/iaas/Content/Block/Concepts/blockvolumeperformance.htm#shapes_vm_iscsi)
・[超高パフォーマンス・ボリュームのためのアタッチメントの構成](https://docs.oracle.com/ja-jp/iaas/Content/Block/Tasks/configuringmultipathattachments.htm#multipath)
・[超高パフォーマンス・ボリューム・アタッチメントのトラブルシューティング](https://docs.oracle.com/ja-jp/iaas/Content/Block/Tasks/troubleshootingmultipathattachments.htm#troubleshootuhp￥)
・[ボリューム・アタッチメントがマルチパス対応かどうかのチェック](https://docs.oracle.com/ja-jp/iaas/Content/Block/Tasks/multipathcheck.htm#multipathcheck)
・[権限の構成](https://docs.oracle.com/ja-jp/iaas/Content/Block/Tasks/enablingblockvolumemanagementplugin.htm#blockplugin-prereq__perms)
・[一貫性のあるデバイス・パスを使用したボリュームへの接続](https://docs.oracle.com/ja-jp/iaas/Content/Block/References/consistentdevicepaths.htm#Connecting_to_Volumes_With_Consistent_Device_Paths)
・[Linuxベース・インスタンスでブロック・ボリューム・パフォーマンス・テストを行うためのサンプルFIOコマンド](https://docs.oracle.com/ja-jp/iaas/Content/Block/References/samplefiocommandslinux.htm)
・[効率的なストレージのためのマルチパスの使用](https://docs.oracle.com/cd/F22978_01/stordev/stordev-UsingMultipathingforEfficientStorage.html#multipathing)