はじめに
OCIのブロック・ボリュームには、パフォーマンス・レベル という設定があります。
これは、ブロックボリュームのパフォーマンスを表す ボリューム・パフォーマンス・ユニット(VPU) をいくつ割り当てるかで パフォーマンス・レベル が決定します。
パフォーマンス・レベル には、以下4つのレベルが存在し、VPUを多く割り当てる程、高パフォーマンスをだせるようになります。
| レベル | VPU | 用途 | 
|---|---|---|
| より低いコスト | 0 | コスト最適型でシーケンシャルIOのスループット重視のワークロード向け | 
| バランス | 10 | ランダムIOを実行する様々なワークロードに最適なバランス型 | 
| より高いパフォーマンス | 20 | 超高パフォーマンスまでのパフォーマンスは必要ないが、高I/O要件のワークロード向け | 
| 超高パフォーマンス | 30-120 | I/O要件が非常に高く、最大限のパフォーマンスを必要とするワークロード向け | 
それぞれの パフォーマンス・レベル 及び VPU でのスループット等は、以下のリファレンスをご確認下さい。
超高パフォーマンスが使用できる対象について
最も高パフォーマンスとなる「超高パフォーマンス」を使用したいと思っても、全ての コンピュート・シェイプ 及び イメージ で使用できる訳ではありません。
マルチパスに対応している必要があり、ブロック・ボリュームのアタッチメントタイプによって、異なります。
アタッチメントタイプ = iSCSI の場合
対応するコンピュート・シェイプ
- VMシェイプの場合
- iSCSIでアタッチされたボリュームのVMシェイプ をご確認下さい。
 
- BMシェイプの場合
- 全てのシェイプが対象
 
対応するイメージ
- Oracle Linux、またはOracle Linuxイメージをベースとするカスタム・イメージが対象
詳細については、以下のリファレンスをご確認ください。
アタッチメントタイプ = 準仮想化 の場合
対応するコンピュート・シェイプ
- VMシェイプの場合
- 16 OCUP以上が割り当てられているインスタンスが対象
 
- BMシェイプの場合
- 全てのシェイプが対象外(※iSCSI アタッチメントのみが対象)
 
対応するイメージ
- Oracle Linux
- Ubuntu
- CentOS
- Windows
詳細については、以下のリファレンスをご確認ください。
超高パフォーマンスの使用
それでは、「超高パフォーマンス」を設定したブロックボリュームを実際に使用してみたいと思います。
コンピュート及びブロック・ボリュームは、それぞれ以下のように設定しています。
- コンピュート
| 項目 | 設定 | 
|---|---|
| シェイプ | VM.Standard.E4.Flex | 
| イメージ | Oracle Linux 8 | 
| OCPU | 16 | 
| Memory(GB) | 32 | 
- ブロック・ボリューム
| 項目 | 設定 | 
|---|---|
| アタッチメントタイプ | iSCSI | 
| VPU/GB | 30 | 
| ボリューム・サイズ | 1024 GB | 
ブロック・ボリューム管理プラグインの有効化
アタッチメントタイプ を iSCSI とする場合は、コンピュートの設定で、「Oracle Cloud エージェント」の「ブロック・ボリューム管理」を有効化する必要があります。
こちらは、デフォルトでは無効となっていますので、有効にします。
有効化処理が完了すると、/etc/multipath.conf が作成されます。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | $ ls /etc/multipath.conf /etc/multipath.conf $ 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" } | 
ブロック・ボリュームの作成
アタッチするブロック・ボリュームを作成します。
ボリューム・サイズは、デフォルトの 1024GB 、VPU は 超高パフォーマンス となるように 30 を設定します。
ブロック・ボリュームのアタッチ
作成したブロック・ボリュームをコンピュートにアタッチします。
アタッチメント・タイプは ISCSI 、デバイス・パスは /dev/oracleoci/oraclevdb としました。
アタッチ処理が完了すると、「マルチパス」が「はい」になっていることを確認します。
パーティション、ファイルシステムの作成
ブロック・ボリュームのアタッチ後にコンピュートでブロック・ボリュームをマルチパス構成で認識していることが確認できます。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # ls -l /dev/oracleoci/oraclevdb lrwxrwxrwx 1 root root 18 Mar 22 13:49 /dev/oracleoci/oraclevdb -> /dev/mapper/mpatha # lsblk /dev/oracleoci/oraclevdb NAME   MAJ:MIN RM SIZE RO TYPE  MOUNTPOINT mpatha 252:2    0   1T  0 mpath # multipath -ll mpatha Mar 22 15:17:29 | /etc/multipath.conf line 15, value for fast_io_fail_tmo too small, capping at 1 mpatha (36076702eb9214c9bb6eccd2c9ecf274c) dm-2 ORACLE,BlockVolume size=1.0T 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 | 
それでは、以下の手順に沿って、パーティション及びファイルシステムの作成を行っていきます。
まずは、パーティションの作成を行います。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | # fdisk /dev/mapper/mpatha Welcome to fdisk (util-linux 2.32.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x57c22387. Command (m for help): n Partition type    p   primary (0 primary, 0 extended, 4 free)    e   extended (container for logical partitions) Select (default p): e Partition number (1-4, default 1): First sector (2048-2147483647, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-2147483647, default 2147483647): Created a new partition 1 of type 'Extended' and of size 1024 GiB. Command (m for help): t Selected partition 1 Hex code (type L to list all codes): 83 Changed type of partition 'Extended' to 'Linux'. Command (m for help): w The partition table has been altered. Failed to add partition 1 to system: Invalid argument The kernel still uses the old partitions. The new table will be used at the next reboot. Syncing disks. | 
Failed to add partition 1 to system: Invalid argument とエラーが出力されていますが、以下は RedHat の情報になりますが、マルチパス構成の場合は必ず出力されるもので、対応不要とされています。
- RedHat Customer Portal / fdisk shows ‘Failed to add partition 1 to system: Invalid argument’ message
 ※閲覧には RedHat Customer Portalのアカウントが必要です。
パーティションが作成されていることが確認できます。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | # fdisk -l /dev/mapper/mpatha Disk /dev/mapper/mpatha: 1 TiB, 1099511627776 bytes, 2147483648 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 1048576 bytes Disklabel type: dos Disk identifier: 0x57c22387 Device              Boot Start        End    Sectors  Size Id Type /dev/mapper/mpatha1       2048 2147483647 2147481600 1024G 83 Linux # 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    1T  0 disk └─mpatha           252:2    0    1T  0 mpath   └─mpatha1        252:3    0 1024G  0 part sdc                  8:32   0    1T  0 disk └─mpatha           252:2    0    1T  0 mpath   └─mpatha1        252:3    0 1024G  0 part sdd                  8:48   0    1T  0 disk └─mpatha           252:2    0    1T  0 mpath   └─mpatha1        252:3    0 1024G  0 part sde                  8:64   0    1T  0 disk └─mpatha           252:2    0    1T  0 mpath   └─mpatha1        252:3    0 1024G  0 part sdf                  8:80   0    1T  0 disk └─mpatha           252:2    0    1T  0 mpath   └─mpatha1        252:3    0 1024G  0 part sdg                  8:96   0    1T  0 disk └─mpatha           252:2    0    1T  0 mpath   └─mpatha1        252:3    0 1024G  0 part sdh                  8:112  0    1T  0 disk └─mpatha           252:2    0    1T  0 mpath   └─mpatha1        252:3    0 1024G  0 part sdi                  8:128  0    1T  0 disk └─mpatha           252:2    0    1T  0 mpath   └─mpatha1        252:3    0 1024G  0 part sdj                  8:144  0    1T  0 disk └─mpatha           252:2    0    1T  0 mpath   └─mpatha1        252:3    0 1024G  0 part sdk                  8:160  0    1T  0 disk └─mpatha           252:2    0    1T  0 mpath   └─mpatha1        252:3    0 1024G  0 part | 
続いてファイルシステムを作成してマウントします。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | # mkfs.xfs /dev/mapper/mpatha1 meta-data=/dev/mapper/mpatha1    isize=512    agcount=4, agsize=67108800 blks          =                       sectsz=4096  attr=2, projid32bit=1          =                       crc=1        finobt=1, sparse=1, rmapbt=0          =                       reflink=1    bigtime=0 inobtcount=0 data     =                       bsize=4096   blocks=268435200, imaxpct=25          =                       sunit=0      swidth=0 blks naming   =version 2              bsize=4096   ascii-ci=0, ftype=1 log      =internal log           bsize=4096   blocks=131071, version=2          =                       sectsz=4096  sunit=1 blks, lazy-count=1 realtime =none                   extsz=4096   blocks=0, rtextents=0 Discarding blocks...Done. # mkdir /mnt/uhp # blkid /dev/sda1: SEC_TYPE="msdos" UUID="9814-8B9E" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="e673ae28-ba2f-401d-b02b-695892283475" /dev/sda2: UUID="f7cf63bd-4975-44bb-ba99-b81e037be7e1" BLOCK_SIZE="4096" TYPE="xfs" PARTUUID="3840f016-52ac-4561-835a-02dfa72af0e8" /dev/sda3: UUID="DXweFJ-3mk1-wvdP-SAud-VhKx-okGb-s7dQh1" TYPE="LVM2_member" PARTUUID="66916148-c5f5-4833-8fae-8a4de95421fd" /dev/mapper/ocivolume-root: UUID="8b8d3b19-9faa-4dee-b3ba-765c3515b283" BLOCK_SIZE="4096" TYPE="xfs" /dev/mapper/ocivolume-oled: UUID="21d53c77-7876-4a1c-b4e1-a8cd74d1938c" BLOCK_SIZE="4096" TYPE="xfs" /dev/mapper/mpatha1: UUID="65eeb2a5-c06c-42a4-b978-fd48f98ede20" BLOCK_SIZE="4096" TYPE="xfs" PARTUUID="57c22387-01" /dev/mapper/mpatha: PTUUID="57c22387" PTTYPE="dos" # echo "UUID=65eeb2a5-c06c-42a4-b978-fd48f98ede20 /mnt/uhp xfs defaults,_netdev,noatime 0 2" > /etc/fstab # mount -a # df -hT Filesystem                 Type      Size  Used Avail Use% Mounted on devtmpfs                   devtmpfs   16G     0   16G   0% /dev tmpfs                      tmpfs      16G     0   16G   0% /dev/shm tmpfs                      tmpfs      16G   17M   16G   1% /run tmpfs                      tmpfs      16G     0   16G   0% /sys/fs/cgroup /dev/mapper/ocivolume-root xfs        36G   12G   24G  34% / /dev/mapper/ocivolume-oled xfs        10G  119M  9.9G   2% /var/oled /dev/sda2                  xfs      1014M  323M  692M  32% /boot /dev/sda1                  vfat      100M  5.0M   95M   6% /boot/efi tmpfs                      tmpfs     3.2G     0  3.2G   0% /run/user/0 tmpfs                      tmpfs     3.2G     0  3.2G   0% /run/user/988 tmpfs                      tmpfs     3.2G     0  3.2G   0% /run/user/1000 /dev/mapper/mpatha1        xfs       1.0T  7.2G 1017G   1% /mnt/uhp   ★追加したボリューム | 
正常にマウントされています。
簡易検証
もう1つバランスタイプ(VPU=10)のブロック・ボリュームを同じボリュームサイズで /mnt/balance にアタッチしました。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # df -hT Filesystem                 Type      Size  Used Avail Use% Mounted on devtmpfs                   devtmpfs   16G     0   16G   0% /dev tmpfs                      tmpfs      16G     0   16G   0% /dev/shm tmpfs                      tmpfs      16G   17M   16G   1% /run tmpfs                      tmpfs      16G     0   16G   0% /sys/fs/cgroup /dev/mapper/ocivolume-root xfs        36G   12G   24G  34% / /dev/mapper/ocivolume-oled xfs        10G  131M  9.9G   2% /var/oled /dev/sda2                  xfs      1014M  323M  692M  32% /boot /dev/sda1                  vfat      100M  5.0M   95M   6% /boot/efi tmpfs                      tmpfs     3.2G     0  3.2G   0% /run/user/0 tmpfs                      tmpfs     3.2G     0  3.2G   0% /run/user/988 tmpfs                      tmpfs     3.2G     0  3.2G   0% /run/user/1000 /dev/mapper/mpatha1        xfs       1.0T  7.2G 1017G   1% /mnt/uhp /dev/sdl1                  xfs       1.0T  7.2G 1017G   1% /mnt/balance | 
両方のブロック・ボリュームに対して、以下のリファレンスに記載されているFIOを使用した「IOPSパフォーマンス・テスト」の「ランダム読取り/書込みをテスト」を実施してみました。
バランス(VPU=10)
- 
検証コマンド 123456# sudo fio --filename=/dev/sdl1 \--direct=1 --rw=randrw --bs=4k \--ioengine=libaio --iodepth=256 \--runtime=120 --numjobs=4 --time_based \--group_reporting --name=iops-test-job \--eta-newline=1 --allow_mounted_write=1
- 
結果 123iops-test-job: (groupid=0, jobs=4): err= 0: pid=86216: Thu Mar 23 16:43:24 2023read: IOPS=12.6k, BW=49.4MiB/s (51.8MB/s)(5925MiB/120016msec)write: IOPS=12.6k, BW=49.4MiB/s (51.8MB/s)(5925MiB/120016msec);
ブロック・ボリューム・パフォーマンス によると、バランス(VPU=10)では、1GB あたり 60 IOPS となるので、1024 GB × 60 = 61,440 となりますが、ボリュームあたりの最大 IOPS は 25,000 と記載されています。
read,write ともに 12.6k なので、合算した値からすると、最大IOPSで制限されているように思います。
超高パフォーマンス(VPU=30)
- 
検証コマンド 123456sudo fio --filename=/dev/mapper/mpatha1 \--direct=1 --rw=randrw --bs=4k \--ioengine=libaio --iodepth=256 \--runtime=120 --numjobs=4 --time_based \--group_reporting --name=iops-test-job \--eta-newline=1 --allow_mounted_write=1
- 
結果 123iops-test-job: (groupid=0, jobs=4): err= 0: pid=87550: Thu Mar 23 16:48:10 2023read: IOPS=37.9k, BW=148MiB/s (155MB/s)(17.4GiB/120124msec)write: IOPS=37.9k, BW=148MiB/s (155MB/s)(17.4GiB/120124msec);
超高パフォーマンス(VPU=30)では、1GB あたり 90 IOPS となるので、1024 GB × 90 = 92,160 となりますが、ボリュームあたりの最大 IOPS は 75,000 となります。
read,write ともに 37.9k なので、合算した値からすると、こちらも最大IOPSで制限されているように思いますが、バランスの3倍程度のIOPSとなっています。
まとめ
必要に応じて、ブロック・ボリュームのパフォーマンス・レベルを変更することで性能の向上が見られますが、当然、高いパフォーマンスになる程、利用価格が高くなります。
執筆時点での コスト試算ツール では、以下のようになっていますが、パフォーマンス・レベルを変更する場合は、価格の差分についても把握しておくようにしましょう。
| パフォーマンス・レベル(VPU) | 1GBあたりの月単価 | 
|---|---|
| より低いコスト(0) | 3.57円 | 
| バランス(10) | 5.95円 | 
| より高いパフォーマンス(20) | 8.33円 | 
| 超高パフォーマンス(30) | 10.71円 | 
| 超高パフォーマンス(40) | 13.09円 | 
| 超高パフォーマンス(50) | 15.47円 | 
| 超高パフォーマンス(60) | 17.85円 | 
| 超高パフォーマンス(70) | 20.03円 | 
| 超高パフォーマンス(80) | 22.61円 | 
| 超高パフォーマンス(90) | 24.99円 | 
| 超高パフォーマンス(100) | 27.37円 | 
| 超高パフォーマンス(110) | 29.75円 | 
| 超高パフォーマンス(120) | 32.13円 | 










 
		 
		 
			 
			 
			 
			 
			 
			 
			 
			