NFS接続で I/Oスループット 100Gbps チャレンジしてみてみた

Oracle Cloud Infrastructure (OCI) [Compute BM.Standard.E5](https://blogs.oracle.com/oracle4engineer/post/ja-e5-std-instance-4th-gen-amd-epyc-processors) で超高パフォーマンス・ボリューム(UHP)のストレージを使用して  I/Oスループットが 100Gbpsでることを[前回](https://qiita.com/shirok/items/8bdc3a1322afef3efa93)確認しました。
今回このコンピュートを２つ用意して NFSサーバー/クライアントをインストールおよび構成して fio で NFS I/Oスループット測定してみてみます。


# ■ 構成図
![構成図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/e501be38-1c7d-931b-df90-fb34f893c566.png)



# ■ NFS Server 設定

## ● NFS Server インストール
nfs-utils パッケージは、カーネル NFS (ネットワーク ファイル システム) サーバーおよび関連ツール用のデーモンを提供し、従来の Linux NFS サーバーよりも優れたパフォーマンスを提供します。

**1) Install nfs-utils**
サーバー・インスタンスに接続し、NFSユーティリティーパッケージをインストール
```
[root@bm-e5-server ~]# dnf install nfs-utils
	Last metadata expiration check: 1 day, 15:21:37 ago on Tue 03 Sep 2024 01:24:20 PM GMT.
	Package nfs-utils-1:2.5.4-25.0.2.el9.x86_64 is already installed.
	Dependencies resolved.
	Nothing to do.
	Complete!
```

**2) conf ファイル設定**
nfsd のスレッド数を増加させます (デフォルトは 8) 
性能の向上のために、NFS サーバーを設定する際には、必ず NFS スレッドを設定します。スレッド 1 つは、NFS 要求を 1 つ処理することができます。スレッドプールを大きくすることにより、サーバーは複数の NFS 要求を並行して処理することができます。プロセッサ数とネットワーク数に従って、このデフォルト値を大きくします。
```
[root@bm-e5-server ~]#vi /etc/nfs.conf
[nfsd]
threads=160
```

**3) 設定反映**
```
[root@bm-e5-server ~]# systemctl daemon-reload
[root@bm-e5-server ~]# systemctl restart nfs-mountd
```

**4) 設定反映確認**
　**・ カーネル・パラメータ確認**
```
[root@bm-e5 ~]# cat /proc/fs/nfsd/threads
    160
```

　**・ プロセス確認**
```
[root@bm-e5-server ~]# ps -ef | grep nfs
	root        5368       1  0 Sep19 ?        00:00:00 /usr/sbin/nfsdcld
	root        8308    8292  0 Sep19 ?        00:00:00 /usr/bin/python3 /var/lib/pcp/pmdas/nfsclient/pmdanfsclient.python
	root      240391       2  0 11:08 ?        00:00:00 [nfsd]
	root      240392       2  0 11:08 ?        00:00:00 [nfsd]
	root      240393       2  0 11:08 ?        00:00:00 [nfsd]
	root      240394       2  0 11:08 ?        00:00:00 [nfsd]
	root      240395       2  0 11:08 ?        00:00:00 [nfsd]
	root      240396       2  0 11:08 ?        00:00:00 [nfsd]
	root      240397       2  0 11:08 ?        00:00:00 [nfsd]
	root      240398       2  0 11:08 ?        00:00:00 [nfsd]
	root      240399       2  0 11:08 ?        00:00:00 [nfsd]
	root      240400       2  0 11:08 ?        00:00:00 [nfsd]
	root      240401       2  0 11:08 ?        00:00:00 [nfsd]
	root      240402       2  0 11:08 ?        00:00:00 [nfsd]
	root      240403       2  0 11:08 ?        00:00:00 [nfsd]
	root      240404       2  0 11:08 ?        00:00:00 [nfsd]
	root      240405       2  0 11:08 ?        00:00:00 [nfsd]
	root      240406       2  0 11:08 ?        00:00:00 [nfsd]
	root      240407       2  0 11:08 ?        00:00:00 [nfsd]
	root      240408       2  0 11:08 ?        00:00:00 [nfsd]
	root      240409       2  0 11:08 ?        00:00:00 [nfsd]
	root      240410       2  0 11:08 ?        00:00:00 [nfsd]
	root      240411       2  0 11:08 ?        00:00:00 [nfsd]
	root      240412       2  0 11:08 ?        00:00:00 [nfsd]
	root      240413       2  0 11:08 ?        00:00:00 [nfsd]
	root      240414       2  0 11:08 ?        00:00:00 [nfsd]
	root      240415       2  0 11:08 ?        00:00:00 [nfsd]
	root      240416       2  0 11:08 ?        00:00:00 [nfsd]
	root      240417       2  0 11:08 ?        00:00:00 [nfsd]
	root      240418       2  0 11:08 ?        00:00:00 [nfsd]
	root      240419       2  0 11:08 ?        00:00:00 [nfsd]
	root      240420       2  0 11:08 ?        00:00:00 [nfsd]
	root      240421       2  0 11:08 ?        00:00:00 [nfsd]
	root      240422       2  0 11:08 ?        00:00:00 [nfsd]
	root      240423       2  0 11:08 ?        00:00:00 [nfsd]
	root      240424       2  0 11:08 ?        00:00:00 [nfsd]
	root      240425       2  0 11:08 ?        00:00:00 [nfsd]
	root      240426       2  0 11:08 ?        00:00:00 [nfsd]
	root      240427       2  0 11:08 ?        00:00:00 [nfsd]
	root      240428       2  0 11:08 ?        00:00:00 [nfsd]
	root      240429       2  0 11:08 ?        00:00:00 [nfsd]
	root      240430       2  0 11:08 ?        00:00:00 [nfsd]
	root      240431       2  0 11:08 ?        00:00:00 [nfsd]
	root      240432       2  0 11:08 ?        00:00:00 [nfsd]
	root      240433       2  0 11:08 ?        00:00:00 [nfsd]
	root      240434       2  0 11:08 ?        00:00:00 [nfsd]
	root      240435       2  0 11:08 ?        00:00:00 [nfsd]
	root      240436       2  0 11:08 ?        00:00:00 [nfsd]
	root      240437       2  0 11:08 ?        00:00:00 [nfsd]
	root      240438       2  0 11:08 ?        00:00:00 [nfsd]
	root      240439       2  0 11:08 ?        00:00:00 [nfsd]
	root      240440       2  0 11:08 ?        00:00:00 [nfsd]
	root      240441       2  0 11:08 ?        00:00:00 [nfsd]
	root      240442       2  0 11:08 ?        00:00:00 [nfsd]
	root      240443       2  0 11:08 ?        00:00:00 [nfsd]
	root      240444       2  0 11:08 ?        00:00:00 [nfsd]
	root      240445       2  0 11:08 ?        00:00:00 [nfsd]
	root      240446       2  0 11:08 ?        00:00:00 [nfsd]
	root      240447       2  0 11:08 ?        00:00:00 [nfsd]
	root      240448       2  0 11:08 ?        00:00:00 [nfsd]
	root      240449       2  0 11:08 ?        00:00:00 [nfsd]
	root      240450       2  0 11:08 ?        00:00:00 [nfsd]
	root      240451       2  0 11:08 ?        00:00:00 [nfsd]
	root      240452       2  0 11:08 ?        00:00:00 [nfsd]
	root      240453       2  0 11:08 ?        00:00:00 [nfsd]
	root      240454       2  0 11:08 ?        00:00:00 [nfsd]
	root      240455       2  0 11:08 ?        00:00:00 [nfsd]
	root      240456       2  0 11:08 ?        00:00:00 [nfsd]
	root      240457       2  0 11:08 ?        00:00:00 [nfsd]
	root      240458       2  0 11:08 ?        00:00:00 [nfsd]
	root      240459       2  0 11:08 ?        00:00:00 [nfsd]
	root      240460       2  0 11:08 ?        00:00:00 [nfsd]
	root      240461       2  0 11:08 ?        00:00:00 [nfsd]
	root      240462       2  0 11:08 ?        00:00:00 [nfsd]
	root      240463       2  0 11:08 ?        00:00:00 [nfsd]
	root      240464       2  0 11:08 ?        00:00:00 [nfsd]
	root      240465       2  0 11:08 ?        00:00:00 [nfsd]
	root      240466       2  0 11:08 ?        00:00:00 [nfsd]
	root      240467       2  0 11:08 ?        00:00:00 [nfsd]
	root      240468       2  0 11:08 ?        00:00:00 [nfsd]
	root      240469       2  0 11:08 ?        00:00:00 [nfsd]
	root      240470       2  0 11:08 ?        00:00:00 [nfsd]
	root      240471       2  0 11:08 ?        00:00:00 [nfsd]
	root      240472       2  0 11:08 ?        00:00:00 [nfsd]
	root      240473       2  0 11:08 ?        00:00:00 [nfsd]
	root      240474       2  0 11:08 ?        00:00:00 [nfsd]
	root      240475       2  0 11:08 ?        00:00:00 [nfsd]
	root      240476       2  0 11:08 ?        00:00:00 [nfsd]
	root      240477       2  0 11:08 ?        00:00:00 [nfsd]
	root      240478       2  0 11:08 ?        00:00:00 [nfsd]
	root      240479       2  0 11:08 ?        00:00:00 [nfsd]
	root      240480       2  0 11:08 ?        00:00:00 [nfsd]
	root      240481       2  0 11:08 ?        00:00:00 [nfsd]
	root      240482       2  0 11:08 ?        00:00:00 [nfsd]
	root      240483       2  0 11:08 ?        00:00:00 [nfsd]
	root      240484       2  0 11:08 ?        00:00:00 [nfsd]
	root      240485       2  0 11:08 ?        00:00:00 [nfsd]
	root      240486       2  0 11:08 ?        00:00:00 [nfsd]
	root      240487       2  0 11:08 ?        00:00:00 [nfsd]
	root      240488       2  0 11:08 ?        00:00:00 [nfsd]
	root      240489       2  0 11:08 ?        00:00:00 [nfsd]
	root      240490       2  0 11:08 ?        00:00:00 [nfsd]
	root      240491       2  0 11:08 ?        00:00:00 [nfsd]
	root      240492       2  0 11:08 ?        00:00:00 [nfsd]
	root      240493       2  0 11:08 ?        00:00:00 [nfsd]
	root      240494       2  0 11:08 ?        00:00:00 [nfsd]
	root      240495       2  0 11:08 ?        00:00:00 [nfsd]
	root      240496       2  0 11:08 ?        00:00:00 [nfsd]
	root      240497       2  0 11:08 ?        00:00:00 [nfsd]
	root      240498       2  0 11:08 ?        00:00:00 [nfsd]
	root      240499       2  0 11:08 ?        00:00:00 [nfsd]
	root      240500       2  0 11:08 ?        00:00:00 [nfsd]
	root      240501       2  0 11:08 ?        00:00:00 [nfsd]
	root      240502       2  0 11:08 ?        00:00:00 [nfsd]
	root      240503       2  0 11:08 ?        00:00:00 [nfsd]
	root      240504       2  0 11:08 ?        00:00:00 [nfsd]
	root      240505       2  0 11:08 ?        00:00:00 [nfsd]
	root      240506       2  0 11:08 ?        00:00:00 [nfsd]
	root      240507       2  0 11:08 ?        00:00:00 [nfsd]
	root      240508       2  0 11:08 ?        00:00:00 [nfsd]
	root      240509       2  0 11:08 ?        00:00:00 [nfsd]
	root      240510       2  0 11:08 ?        00:00:00 [nfsd]
	root      240511       2  0 11:08 ?        00:00:00 [nfsd]
	root      240512       2  0 11:08 ?        00:00:00 [nfsd]
	root      240513       2  0 11:08 ?        00:00:00 [nfsd]
	root      240514       2  0 11:08 ?        00:00:00 [nfsd]
	root      240515       2  0 11:08 ?        00:00:00 [nfsd]
	root      240516       2  0 11:08 ?        00:00:00 [nfsd]
	root      240517       2  0 11:08 ?        00:00:00 [nfsd]
	root      240518       2  0 11:08 ?        00:00:00 [nfsd]
	root      240519       2  0 11:08 ?        00:00:00 [nfsd]
	root      240520       2  0 11:08 ?        00:00:00 [nfsd]
	root      240521       2  0 11:08 ?        00:00:00 [nfsd]
	root      240522       2  0 11:08 ?        00:00:00 [nfsd]
	root      240523       2  0 11:08 ?        00:00:00 [nfsd]
	root      240524       2  0 11:08 ?        00:00:00 [nfsd]
	root      240525       2  0 11:08 ?        00:00:00 [nfsd]
	root      240526       2  0 11:08 ?        00:00:00 [nfsd]
	root      240527       2  0 11:08 ?        00:00:00 [nfsd]
	root      240528       2  0 11:08 ?        00:00:00 [nfsd]
	root      240529       2  0 11:08 ?        00:00:00 [nfsd]
	root      240530       2  0 11:08 ?        00:00:00 [nfsd]
	root      240531       2  0 11:08 ?        00:00:00 [nfsd]
	root      240532       2  0 11:08 ?        00:00:00 [nfsd]
	root      240533       2  0 11:08 ?        00:00:00 [nfsd]
	root      240534       2  0 11:08 ?        00:00:00 [nfsd]
	root      240535       2  0 11:08 ?        00:00:00 [nfsd]
	root      240536       2  0 11:08 ?        00:00:00 [nfsd]
	root      240537       2  0 11:08 ?        00:00:00 [nfsd]
	root      240538       2  0 11:08 ?        00:00:00 [nfsd]
	root      240539       2  0 11:08 ?        00:00:00 [nfsd]
	root      240540       2  0 11:08 ?        00:00:00 [nfsd]
	root      240541       2  0 11:08 ?        00:00:00 [nfsd]
	root      240542       2  0 11:08 ?        00:00:00 [nfsd]
	root      240543       2  0 11:08 ?        00:00:00 [nfsd]
	root      240544       2  0 11:08 ?        00:00:00 [nfsd]
	root      240545       2  0 11:08 ?        00:00:00 [nfsd]
	root      240546       2  0 11:08 ?        00:00:00 [nfsd]
	root      240547       2  0 11:08 ?        00:00:00 [nfsd]
	root      240548       2  0 11:08 ?        00:00:00 [nfsd]
	root      240549       2  0 11:08 ?        00:00:00 [nfsd]
	root      240550       2  0 11:08 ?        00:00:00 [nfsd]
	root      240561  237828  0 11:08 pts/0    00:00:00 grep --color=auto nfs
```
## ● NFS 共有ストレージ作成
前回作成した LVM へ ファイルシステムを作成し、NFS用ディレクトリへマウントします。

**1) LVM 確認**

lvs コマンドを使って論理ボリュームを確認
```
[root@bm-e5-server ~]# lvscan
  ACTIVE            '/dev/ocivolume/oled' [10.00 GiB] inherit
  ACTIVE            '/dev/ocivolume/root' [35.50 GiB] inherit
  ACTIVE            '/dev/volgroup01/striped_logical_volume' [<14.65 TiB] inherit
```

**2) ファイルシステム作成**
ファイルシステムを striped_logical_volume 論理ボリューム上に作成

```
[root@bm-e5-server ~]# mkfs.xfs /dev/volgroup01/striped_logical_volume
meta-data=/dev/volgroup01/striped_logical_volume isize=512    agcount=15, agsize=268435455 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=3932149760, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=521728, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Discarding blocks...Done.
```



**3) Directory 作成と権限設定**
ここでは、NFS共有ディレクトリを/nfs/export1として設定します。
ファイルの権限は、簡単にするために chmod -R 777を使用して、すべてのユーザーに対してローカル・ファイル権限を読取り/書込み/実行に設定します。これにより、クライアント・ユーザーのUID/GUIDがサーバーと一致せず、サーバーのnobodyアカウントがデフォルトで設定される、この演習での追加のNFS共有オプションの必要性が最小限になります。

```
[root@bm-e5-server ~] mkdir /nfs/export1
[root@bm-e5-server ~] chmod 2770 /nfs/export1
[root@bm-e5-server ~] chgrp opc /nfs/export1
[root@bm-e5-server ~] ls -la /nfs/export1
	total 0
	drwxrws---. 2 root opc   6 Sep  5 04:49 .
	drwxr-xr-x. 4 root root 31 Sep  5 04:49 ..
```


**4) ファイルシステムをマウント**

```
[root@bm-e5-server ~]# mount /dev/volgroup01/striped_logical_volume /nfs/export1
```

**5) ファイルシステムをマウント確認**

```
[root@bm-e5-server ~]# mount | grep export1
    /dev/mapper/volgroup01-striped_logical_volume on /nfs/export1 type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)

[root@bm-e5-server ~]# df -hT | grep export1
    /dev/mapper/volgroup01-striped_logical_volume xfs        15T  105G   15T   1% /nfs/export1
```


**3) NFS エクスポート設定**
/etc/exportsで共有を定義します。

```
[root@bm-e5-server ~] vi /etc/exports
[root@bm-e5-server ~] cat /etc/exports
    /nfs/export1 *(rw,no_root_squash)
```

**3) 設定反映と確認**
```
[root@bm-e5-server ~] exportfs -ar
[root@bm-e5-server ~] exportfs -v
/nfs/export1  	<world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,no_root_squash,no_all_squash)

```


## ● NFS server 起動
**1) nfs-serverステータス確認**
```
[root@bm-e5-server ~]# systemctl status nfs-server
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
```


**2) nfs-server 起動**
```
[root@bm-e5-server ~]# systemctl start nfs-server.service
```


**3) nfs-server 起動ステータス確認**
```
[root@bm-e5-server ~]# systemctl status nfs-server
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
   Active: active (exited) since Thu 2024-09-05 05:03:12 GMT; 5s ago
  Process: 10259 ExecStart=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl reload gssproxy ; fi (>
  Process: 10243 ExecStart=/usr/sbin/rpc.nfsd (code=exited, status=0/SUCCESS)
  Process: 10240 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
 Main PID: 10259 (code=exited, status=0/SUCCESS)

Sep 05 05:03:12 vm-optimized3 systemd[1]: Starting NFS server and services...
Sep 05 05:03:12 vm-optimized3 systemd[1]: Started NFS server and services.
```

**4) nfs-server 起動ステータス確認**
showmountコマンドは、NFSサーバーを使用して使用可能な共有を表示
```
[root@bm-e5-server ~]# showmount -e
    Export list for bm-e5:
    /nfs/export1 *
```

## ● NFS server 自動起動設定
```
[root@bm-e5-server ~]# systemctl enable --now nfs-server
	Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /usr/lib/systemd/system/nfs-server.service.
[root@bm-e5-server ~]# systemctl is-enabled nfs-server
	enabled
```



## ● Firewalld 設定
NFSトラフィックを許可するようにファイアウォールを設定
```
[root@bm-e5-server ~] firewall-cmd --permanent --add-service nfs
	success
[root@bm-e5-server ~] firewall-cmd --reload
	success
[root@bm-e5-server ~]#  firewall-cmd --list-all | grep nfs
  services: dhcpv6-client nfs ssh vnc-server
```




# ■ NFS Client 設定
クライアント・インスタンスに接続し、NFSユーティリティーパッケージをインストール

## ⚫︎ nfs-utils インストール
**1) Install the nfs-utils package:**

```
[root@bm-e5-client ~]# dnf install nfs-utils
	Ksplice for Oracle Linux 8 (x86_64)                                                                                         46 MB/s | 8.6 MB     00:00
	MySQL 8.0 for Oracle Linux 8 (x86_64)                                                                                       67 MB/s | 4.0 MB     00:00
	MySQL 8.0 Tools Community for Oracle Linux 8 (x86_64)                                                                       19 MB/s | 805 kB     00:00
	MySQL 8.0 Connectors Community for Oracle Linux 8 (x86_64)                                                                 906 kB/s |  34 kB     00:00
	Oracle Software for OCI users on Oracle Linux 8 (x86_64)                                                                    75 MB/s | 151 MB     00:02
	Oracle Linux 8 BaseOS Latest (x86_64)                                                                                      185 MB/s |  79 MB     00:00
	Oracle Linux 8 Application Stream (x86_64)                                                                                 177 MB/s |  63 MB     00:00
	Oracle Linux 8 Addons (x86_64)                                                                                             140 MB/s |  19 MB     00:00
	Latest Unbreakable Enterprise Kernel Release 7 for Oracle Linux 8 (x86_64)                                                 169 MB/s |  41 MB     00:00
	Package nfs-utils-1:2.3.3-59.0.1.el8.x86_64 is already installed.
	Dependencies resolved.
	Nothing to do.
	Complete!
```


## ⚫︎ NFS 共有ディレクトリ・マウント
BM.E5シェイプの 100Gbps読取りスループットを最大限に活用するために、Linuxカーネルバージョン5.3以降から使用できる nconnect=16 マウントオプションを使用します。
nconnect を使用すると、より少ないクライアント マシンを使用して大規模にパフォーマンスを向上させ、総保有コスト (TCO) を削減できます。 Nconnect は、単一または複数のクライアントを使用して、1 つまたは複数の NIC で複数の TCP チャネルを使用することで、パフォーマンスを向上させます。


**1) NFSマウント・ディレクトリ作成**
```
[root@bm-e5-client ~]# mkdir /mnt/nfs
[root@bm-e5-client ~]# ls -la /mnt/nfs/
　total 0
　drwxr-xr-x. 2 root root  6 Jan 28 06:54 .
　drwxr-xr-x. 3 root root 17 Jan 28 06:54 ..
```

**2) NFSマウント**
```
[root@bm-e5-client ~]# mount -t nfs -o rw,nconnect=16 10.10.1.133:/nfs/export1 /mnt/nfs
```


**3) NFSマウント確認**
```
[root@bm-e5-client ~]# mount | grep 10.10.0.22
	10.10.0.22:/nfs/export1 on /mnt/nfs type nfs4 (rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,nconnect=16,timeo=600,retrans=2,sec=sys,clientaddr=10.10.0.23,local_lock=none,addr=10.10.0.22)
```


**4) NFS マウント・ディレクトリ確認**
```
[root@bm-e5-client ~]# df -hT | grep nfs
    10.10.0.22:/nfs/export1 nfs4       15T  4.9T  9.8T  34% /mnt/nfs
```

**5) NFS マウント・プロセス確認**
nconnect=16 マウントオプションでプロセスが16個起動していることを確認

```
[root@bm-e5-client ~]# netstat -an |grep 2049
    tcp        0      0 10.10.0.23:928          10.10.0.22:2049         ESTABLISHED
    tcp        0      0 10.10.0.23:915          10.10.0.22:2049         ESTABLISHED
    tcp        0      0 10.10.0.23:762          10.10.0.22:2049         ESTABLISHED
    tcp        0      0 10.10.0.23:974          10.10.0.22:2049         TIME_WAIT
    tcp        0      0 10.10.0.23:963          10.10.0.22:2049         ESTABLISHED
    tcp        0      0 10.10.0.23:926          10.10.0.22:2049         ESTABLISHED
    tcp        0      0 10.10.0.23:1007         10.10.0.22:2049         ESTABLISHED
    tcp        0      0 10.10.0.23:861          10.10.0.22:2049         ESTABLISHED
    tcp        0      0 10.10.0.23:745          10.10.0.22:2049         ESTABLISHED
    tcp        0      0 10.10.0.23:777          10.10.0.22:2049         ESTABLISHED
    tcp        0      0 10.10.0.23:958          10.10.0.22:2049         ESTABLISHED
    tcp        0      0 10.10.0.23:933          10.10.0.22:2049         ESTABLISHED
    tcp        0      0 10.10.0.23:673          10.10.0.22:2049         ESTABLISHED
```

# ■ FIO コマンド使用して スループット・パフォーマンス・テスト

Linuxベース・インスタンスでブロック・ボリューム・パフォーマンス・テストを行うためのサンプルFIOコマンドを参照して FIOコマンドで IOPSとスループットのパフォーマンス・テストをします。
テストするには、次のFIOサンプル・コマンドを使用します。コマンドを直接実行することも、コマンドを使用してジョブ・ファイルを作成してからそのジョブ・ファイルを実行することもできます。



## ● 順次読取りのテスト

### ・順次読取りのテスト実行
データベース・ワークロードなど、順次アクセス・パターンを利用できるワークロードに対しては、順次読取りをテストすることにより、このパターンのパフォーマンスを確認できます。
順次読取りをテストするには、次のコマンドを実行します。
Client側 OSキャッシュを使用しない --direct=1 を使用します。
ただし、初回実行時は、NFS Server 側にキャッシュが無い状態なので純粋な測定値が出ます。
2回目以降は、NFS Server 側でキャッシュされたデータが使用されるためより高速な測定値が出ます。

#### - 1回目(Non Cache)
```
[root@bm-e5-client ~]# fio --name=read_throughput --directory=/mnt/nfs --size=10g --rw=read --bs=1m --numjobs=200 --iodepth=64 --ioengine=libaio --time_based --runtime=120 --direct=1 --group_reporting --eta-newline=1 --readonly
read_throughput: (g=0): rw=read, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=libaio, iodepth=64
...
fio-3.19
Starting 200 processes
Jobs: 200 (f=200): [R(200)][2.5%][r=4491MiB/s][r=4490 IOPS][eta 01m:58s]
Jobs: 200 (f=200): [R(200)][3.3%][r=4281MiB/s][r=4280 IOPS][eta 01m:57s]
Jobs: 200 (f=200): [R(200)][4.1%][r=4240MiB/s][r=4239 IOPS][eta 01m:56s]
Jobs: 200 (f=200): [R(200)][5.0%][r=4206MiB/s][r=4205 IOPS][eta 01m:55s]
Jobs: 200 (f=200): [R(200)][5.8%][r=4154MiB/s][r=4153 IOPS][eta 01m:54s]
Jobs: 200 (f=200): [R(200)][6.6%][r=4184MiB/s][r=4183 IOPS][eta 01m:53s]
Jobs: 200 (f=200): [R(200)][7.4%][r=4148MiB/s][r=4147 IOPS][eta 01m:52s]
Jobs: 200 (f=200): [R(200)][8.3%][r=3895MiB/s][r=3895 IOPS][eta 01m:51s]
Jobs: 200 (f=200): [R(200)][9.1%][r=4130MiB/s][r=4129 IOPS][eta 01m:50s]
Jobs: 200 (f=200): [R(200)][9.9%][r=3878MiB/s][r=3878 IOPS][eta 01m:49s]
Jobs: 200 (f=200): [R(200)][10.7%][r=4069MiB/s][r=4068 IOPS][eta 01m:48s]
Jobs: 200 (f=200): [R(200)][11.6%][r=4163MiB/s][r=4162 IOPS][eta 01m:47s]
Jobs: 200 (f=200): [R(200)][12.4%][r=4127MiB/s][r=4126 IOPS][eta 01m:46s]
Jobs: 200 (f=200): [R(200)][13.2%][r=4211MiB/s][r=4210 IOPS][eta 01m:45s]
Jobs: 200 (f=200): [R(200)][14.0%][r=4145MiB/s][r=4144 IOPS][eta 01m:44s]
Jobs: 200 (f=200): [R(200)][14.9%][r=4160MiB/s][r=4159 IOPS][eta 01m:43s]
Jobs: 200 (f=200): [R(200)][15.7%][r=4131MiB/s][r=4130 IOPS][eta 01m:42s]
Jobs: 200 (f=200): [R(200)][16.5%][r=4101MiB/s][r=4100 IOPS][eta 01m:41s]
Jobs: 200 (f=200): [R(200)][17.4%][r=4109MiB/s][r=4108 IOPS][eta 01m:40s]
Jobs: 200 (f=200): [R(200)][18.2%][r=4062MiB/s][r=4061 IOPS][eta 01m:39s]
Jobs: 200 (f=200): [R(200)][19.0%][r=4123MiB/s][r=4122 IOPS][eta 01m:38s]
Jobs: 200 (f=200): [R(200)][19.8%][r=4145MiB/s][r=4144 IOPS][eta 01m:37s]
Jobs: 200 (f=200): [R(200)][20.7%][r=4116MiB/s][r=4115 IOPS][eta 01m:36s]
Jobs: 200 (f=200): [R(200)][21.5%][r=4130MiB/s][r=4129 IOPS][eta 01m:35s]
Jobs: 200 (f=200): [R(200)][22.3%][r=4127MiB/s][r=4126 IOPS][eta 01m:34s]
Jobs: 200 (f=200): [R(200)][23.1%][r=3981MiB/s][r=3981 IOPS][eta 01m:33s]
Jobs: 200 (f=200): [R(200)][24.0%][r=4092MiB/s][r=4091 IOPS][eta 01m:32s]
Jobs: 200 (f=200): [R(200)][24.8%][r=4001MiB/s][r=4000 IOPS][eta 01m:31s]
Jobs: 200 (f=200): [R(200)][25.6%][r=4104MiB/s][r=4103 IOPS][eta 01m:30s]
Jobs: 200 (f=200): [R(200)][26.4%][r=4096MiB/s][r=4095 IOPS][eta 01m:29s]
Jobs: 200 (f=200): [R(200)][27.3%][r=4109MiB/s][r=4108 IOPS][eta 01m:28s]
Jobs: 200 (f=200): [R(200)][28.1%][r=4066MiB/s][r=4065 IOPS][eta 01m:27s]
Jobs: 200 (f=200): [R(200)][28.9%][r=4066MiB/s][r=4065 IOPS][eta 01m:26s]
Jobs: 200 (f=200): [R(200)][29.8%][r=4074MiB/s][r=4073 IOPS][eta 01m:25s]
Jobs: 200 (f=200): [R(200)][30.6%][r=4080MiB/s][r=4079 IOPS][eta 01m:24s]
Jobs: 200 (f=200): [R(200)][31.4%][r=4174MiB/s][r=4173 IOPS][eta 01m:23s]
Jobs: 200 (f=200): [R(200)][32.2%][r=4143MiB/s][r=4142 IOPS][eta 01m:22s]
Jobs: 200 (f=200): [R(200)][33.1%][r=4142MiB/s][r=4141 IOPS][eta 01m:21s]
Jobs: 200 (f=200): [R(200)][33.9%][r=4131MiB/s][r=4130 IOPS][eta 01m:20s]
Jobs: 200 (f=200): [R(200)][34.7%][r=4071MiB/s][r=4070 IOPS][eta 01m:19s]
Jobs: 200 (f=200): [R(200)][35.5%][r=4133MiB/s][r=4132 IOPS][eta 01m:18s]
Jobs: 200 (f=200): [R(200)][36.4%][r=4145MiB/s][r=4144 IOPS][eta 01m:17s]
Jobs: 200 (f=200): [R(200)][37.2%][r=4083MiB/s][r=4082 IOPS][eta 01m:16s]
Jobs: 200 (f=200): [R(200)][38.0%][r=4054MiB/s][r=4053 IOPS][eta 01m:15s]
Jobs: 200 (f=200): [R(200)][38.8%][r=4077MiB/s][r=4076 IOPS][eta 01m:14s]
Jobs: 200 (f=200): [R(200)][39.7%][r=4125MiB/s][r=4124 IOPS][eta 01m:13s]
Jobs: 200 (f=200): [R(200)][40.5%][r=4071MiB/s][r=4070 IOPS][eta 01m:12s]
Jobs: 200 (f=200): [R(200)][41.3%][r=4120MiB/s][r=4119 IOPS][eta 01m:11s]
Jobs: 200 (f=200): [R(200)][42.1%][r=4111MiB/s][r=4110 IOPS][eta 01m:10s]
Jobs: 200 (f=200): [R(200)][43.0%][r=4163MiB/s][r=4162 IOPS][eta 01m:09s]
Jobs: 200 (f=200): [R(200)][43.8%][r=3968MiB/s][r=3968 IOPS][eta 01m:08s]
Jobs: 200 (f=200): [R(200)][44.6%][r=4105MiB/s][r=4104 IOPS][eta 01m:07s]
Jobs: 200 (f=200): [R(200)][45.5%][r=3900MiB/s][r=3900 IOPS][eta 01m:06s]
Jobs: 200 (f=200): [R(200)][46.3%][r=3516MiB/s][r=3516 IOPS][eta 01m:05s]
Jobs: 200 (f=200): [R(200)][47.1%][r=3247MiB/s][r=3246 IOPS][eta 01m:04s]
Jobs: 200 (f=200): [R(200)][47.9%][r=3112MiB/s][r=3111 IOPS][eta 01m:03s]
Jobs: 200 (f=200): [R(200)][48.8%][r=3442MiB/s][r=3441 IOPS][eta 01m:02s]
Jobs: 200 (f=200): [R(200)][49.6%][r=3641MiB/s][r=3641 IOPS][eta 01m:01s]
Jobs: 200 (f=200): [R(200)][50.4%][r=3552MiB/s][r=3552 IOPS][eta 01m:00s]
Jobs: 200 (f=200): [R(200)][51.2%][r=3482MiB/s][r=3481 IOPS][eta 00m:59s]
Jobs: 200 (f=200): [R(200)][52.1%][r=3443MiB/s][r=3442 IOPS][eta 00m:58s]
Jobs: 200 (f=200): [R(200)][52.9%][r=3690MiB/s][r=3690 IOPS][eta 00m:57s]
Jobs: 200 (f=200): [R(200)][53.7%][r=3692MiB/s][r=3692 IOPS][eta 00m:56s]
Jobs: 200 (f=200): [R(200)][54.5%][r=3593MiB/s][r=3593 IOPS][eta 00m:55s]
Jobs: 200 (f=200): [R(200)][55.4%][r=3754MiB/s][r=3754 IOPS][eta 00m:54s]
Jobs: 200 (f=200): [R(200)][56.2%][r=3773MiB/s][r=3773 IOPS][eta 00m:53s]
Jobs: 200 (f=200): [R(200)][57.0%][r=3722MiB/s][r=3722 IOPS][eta 00m:52s]
Jobs: 200 (f=200): [R(200)][57.9%][r=3845MiB/s][r=3845 IOPS][eta 00m:51s]
Jobs: 200 (f=200): [R(200)][58.7%][r=3798MiB/s][r=3798 IOPS][eta 00m:50s]
Jobs: 200 (f=200): [R(200)][59.5%][r=3578MiB/s][r=3578 IOPS][eta 00m:49s]
Jobs: 200 (f=200): [R(200)][60.3%][r=3750MiB/s][r=3750 IOPS][eta 00m:48s]
Jobs: 200 (f=200): [R(200)][61.2%][r=3702MiB/s][r=3702 IOPS][eta 00m:47s]
Jobs: 200 (f=200): [R(200)][62.0%][r=3621MiB/s][r=3621 IOPS][eta 00m:46s]
Jobs: 200 (f=200): [R(200)][62.8%][r=3917MiB/s][r=3917 IOPS][eta 00m:45s]
Jobs: 200 (f=200): [R(200)][63.6%][r=3931MiB/s][r=3931 IOPS][eta 00m:44s]
Jobs: 200 (f=200): [R(200)][64.5%][r=3992MiB/s][r=3992 IOPS][eta 00m:43s]
Jobs: 200 (f=200): [R(200)][65.3%][r=4027MiB/s][r=4026 IOPS][eta 00m:42s]
Jobs: 200 (f=200): [R(200)][66.1%][r=4075MiB/s][r=4074 IOPS][eta 00m:41s]
Jobs: 200 (f=200): [R(200)][66.9%][r=4141MiB/s][r=4140 IOPS][eta 00m:40s]
Jobs: 200 (f=200): [R(200)][67.8%][r=4169MiB/s][r=4168 IOPS][eta 00m:39s]
Jobs: 200 (f=200): [R(200)][68.6%][r=4183MiB/s][r=4182 IOPS][eta 00m:38s]
Jobs: 200 (f=200): [R(200)][69.4%][r=4132MiB/s][r=4131 IOPS][eta 00m:37s]
Jobs: 200 (f=200): [R(200)][70.2%][r=4078MiB/s][r=4077 IOPS][eta 00m:36s]
Jobs: 200 (f=200): [R(200)][71.1%][r=4186MiB/s][r=4185 IOPS][eta 00m:35s]
Jobs: 200 (f=200): [R(200)][71.9%][r=4174MiB/s][r=4173 IOPS][eta 00m:34s]
Jobs: 200 (f=200): [R(200)][72.7%][r=4124MiB/s][r=4123 IOPS][eta 00m:33s]
Jobs: 200 (f=200): [R(200)][73.6%][r=3995MiB/s][r=3995 IOPS][eta 00m:32s]
Jobs: 200 (f=200): [R(200)][74.4%][r=3978MiB/s][r=3978 IOPS][eta 00m:31s]
Jobs: 200 (f=200): [R(200)][75.2%][r=4106MiB/s][r=4105 IOPS][eta 00m:30s]
Jobs: 200 (f=200): [R(200)][76.0%][r=4118MiB/s][r=4117 IOPS][eta 00m:29s]
Jobs: 200 (f=200): [R(200)][76.9%][r=4149MiB/s][r=4148 IOPS][eta 00m:28s]
Jobs: 200 (f=200): [R(200)][77.7%][r=4099MiB/s][r=4098 IOPS][eta 00m:27s]
Jobs: 200 (f=200): [R(200)][78.5%][r=4089MiB/s][r=4088 IOPS][eta 00m:26s]
Jobs: 200 (f=200): [R(200)][79.3%][r=3984MiB/s][r=3984 IOPS][eta 00m:25s]
Jobs: 200 (f=200): [R(200)][80.2%][r=4090MiB/s][r=4089 IOPS][eta 00m:24s]
Jobs: 200 (f=200): [R(200)][81.0%][r=4143MiB/s][r=4142 IOPS][eta 00m:23s]
Jobs: 200 (f=200): [R(200)][81.8%][r=4131MiB/s][r=4130 IOPS][eta 00m:22s]
Jobs: 200 (f=200): [R(200)][82.6%][r=4109MiB/s][r=4108 IOPS][eta 00m:21s]
Jobs: 200 (f=200): [R(200)][83.5%][r=4112MiB/s][r=4111 IOPS][eta 00m:20s]
Jobs: 200 (f=200): [R(200)][84.3%][r=4082MiB/s][r=4081 IOPS][eta 00m:19s]
Jobs: 200 (f=200): [R(200)][85.1%][r=4134MiB/s][r=4133 IOPS][eta 00m:18s]
Jobs: 200 (f=200): [R(200)][86.0%][r=4061MiB/s][r=4060 IOPS][eta 00m:17s]
Jobs: 200 (f=200): [R(200)][86.8%][r=3959MiB/s][r=3959 IOPS][eta 00m:16s]
Jobs: 200 (f=200): [R(200)][87.6%][r=3902MiB/s][r=3902 IOPS][eta 00m:15s]
Jobs: 200 (f=200): [R(200)][88.4%][r=3949MiB/s][r=3949 IOPS][eta 00m:14s]
Jobs: 200 (f=200): [R(200)][89.3%][r=4132MiB/s][r=4131 IOPS][eta 00m:13s]
Jobs: 200 (f=200): [R(200)][90.1%][r=4100MiB/s][r=4099 IOPS][eta 00m:12s]
Jobs: 200 (f=200): [R(200)][90.9%][r=4069MiB/s][r=4068 IOPS][eta 00m:11s]
Jobs: 200 (f=200): [R(200)][91.7%][r=4091MiB/s][r=4090 IOPS][eta 00m:10s]
Jobs: 200 (f=200): [R(200)][92.6%][r=4056MiB/s][r=4055 IOPS][eta 00m:09s]
Jobs: 200 (f=200): [R(200)][93.4%][r=4198MiB/s][r=4197 IOPS][eta 00m:08s]
Jobs: 200 (f=200): [R(200)][94.2%][r=4126MiB/s][r=4125 IOPS][eta 00m:07s]
Jobs: 200 (f=200): [R(200)][95.0%][r=4134MiB/s][r=4133 IOPS][eta 00m:06s]
Jobs: 200 (f=200): [R(200)][95.9%][r=4157MiB/s][r=4156 IOPS][eta 00m:05s]
Jobs: 200 (f=200): [R(200)][96.7%][r=4180MiB/s][r=4179 IOPS][eta 00m:04s]
Jobs: 200 (f=200): [R(200)][97.5%][r=4160MiB/s][r=4159 IOPS][eta 00m:03s]
Jobs: 200 (f=200): [R(200)][98.3%][r=4099MiB/s][r=4098 IOPS][eta 00m:02s]
Jobs: 200 (f=200): [R(200)][99.2%][r=4121MiB/s][r=4120 IOPS][eta 00m:01s]
Jobs: 200 (f=200): [R(200)][100.0%][r=4121MiB/s][r=4120 IOPS][eta 00m:00s]
Jobs: 200 (f=200): [R(200)][23.7%][r=386MiB/s][r=385 IOPS][eta 06m:33s]
Jobs: 200 (f=200): [R(200)][23.7%][eta 06m:36s]
Jobs: 200 (f=200): [R(200)][23.7%][eta 06m:39s]
read_throughput: (groupid=0, jobs=200): err= 0: pid=13728: Wed Jan 29 06:20:28 2025
  read: IOPS=4017, BW=4017MiB/s (4213MB/s)(483GiB/123113msec)
    slat (usec): min=56, max=3338, avg=90.15, stdev=85.74
    clat (msec): min=14, max=6128, avg=3182.36, stdev=436.99
     lat (msec): min=14, max=6129, avg=3182.45, stdev=436.95
    clat percentiles (msec):
     |  1.00th=[ 1133],  5.00th=[ 3037], 10.00th=[ 3071], 20.00th=[ 3104],
     | 30.00th=[ 3104], 40.00th=[ 3104], 50.00th=[ 3138], 60.00th=[ 3138],
     | 70.00th=[ 3171], 80.00th=[ 3239], 90.00th=[ 3473], 95.00th=[ 3675],
     | 99.00th=[ 4933], 99.50th=[ 5537], 99.90th=[ 6007], 99.95th=[ 6074],
     | 99.99th=[ 6074]
   bw (  MiB/s): min= 2796, max= 4720, per=99.95%, avg=4015.46, stdev= 1.50, samples=48000
   iops        : min= 2796, max= 4718, avg=4012.52, stdev= 1.50, samples=48000
  lat (msec)   : 20=0.01%, 50=0.01%, 100=0.04%, 250=0.12%, 500=0.24%
  lat (msec)   : 750=0.24%, 1000=0.24%, 2000=0.90%, >=2000=98.21%
  cpu          : usr=0.01%, sys=0.19%, ctx=499327, majf=6, minf=111583
  IO depths    : 1=0.1%, 2=0.1%, 4=0.2%, 8=0.3%, 16=0.6%, 32=1.3%, >=64=97.5%
     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=494590,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=4017MiB/s (4213MB/s), 4017MiB/s-4017MiB/s (4213MB/s-4213MB/s), io=483GiB (519GB), run=123113-123113msec
```



#### - 2回目(Cached)
```
[root@bm-e5-client ~]# fio --name=read_throughput --directory=/mnt/nfs --size=10g --rw=read --bs=1m --numjobs=200 --iodepth=64 --ioengine=libaio --time_based --runtime=120 --direct=1 --group_reporting --eta-newline=1 --readonly
read_throughput: (g=0): rw=read, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=libaio, iodepth=64
...
fio-3.19
Starting 200 processes
Jobs: 200 (f=200): [R(200)][2.5%][r=8061MiB/s][r=8060 IOPS][eta 01m:58s]
Jobs: 200 (f=200): [R(200)][3.3%][r=8785MiB/s][r=8785 IOPS][eta 01m:57s]
Jobs: 200 (f=200): [R(200)][4.1%][r=8920MiB/s][r=8920 IOPS][eta 01m:56s]
Jobs: 200 (f=200): [R(200)][5.0%][r=10.5GiB/s][r=10.8k IOPS][eta 01m:55s]
Jobs: 200 (f=200): [R(200)][5.8%][r=10.2GiB/s][r=10.4k IOPS][eta 01m:54s]
Jobs: 200 (f=200): [R(200)][6.6%][r=10.0GiB/s][r=10.3k IOPS][eta 01m:53s]
Jobs: 200 (f=200): [R(200)][7.4%][r=10.3GiB/s][r=10.6k IOPS][eta 01m:52s]
Jobs: 200 (f=200): [R(200)][8.3%][r=9387MiB/s][r=9386 IOPS][eta 01m:51s]
Jobs: 200 (f=200): [R(200)][9.1%][r=8875MiB/s][r=8875 IOPS][eta 01m:50s]
Jobs: 200 (f=200): [R(200)][9.9%][r=8955MiB/s][r=8955 IOPS][eta 01m:49s]
Jobs: 200 (f=200): [R(200)][10.7%][r=9612MiB/s][r=9612 IOPS][eta 01m:48s]
Jobs: 200 (f=200): [R(200)][11.6%][r=9177MiB/s][r=9176 IOPS][eta 01m:47s]
Jobs: 200 (f=200): [R(200)][12.4%][r=8584MiB/s][r=8584 IOPS][eta 01m:46s]
Jobs: 200 (f=200): [R(200)][13.2%][r=9551MiB/s][r=9551 IOPS][eta 01m:45s]
Jobs: 200 (f=200): [R(200)][14.0%][r=8527MiB/s][r=8527 IOPS][eta 01m:44s]
Jobs: 200 (f=200): [R(200)][14.9%][r=9497MiB/s][r=9496 IOPS][eta 01m:43s]
Jobs: 200 (f=200): [R(200)][15.7%][r=9113MiB/s][r=9112 IOPS][eta 01m:42s]
Jobs: 200 (f=200): [R(200)][16.5%][r=8266MiB/s][r=8265 IOPS][eta 01m:41s]
Jobs: 200 (f=200): [R(200)][17.4%][r=9828MiB/s][r=9828 IOPS][eta 01m:40s]
Jobs: 200 (f=200): [R(200)][18.2%][r=8698MiB/s][r=8698 IOPS][eta 01m:39s]
Jobs: 200 (f=200): [R(200)][19.0%][r=9049MiB/s][r=9048 IOPS][eta 01m:38s]
Jobs: 200 (f=200): [R(200)][19.8%][r=8784MiB/s][r=8784 IOPS][eta 01m:37s]
Jobs: 200 (f=200): [R(200)][20.7%][r=9796MiB/s][r=9796 IOPS][eta 01m:36s]
Jobs: 200 (f=200): [R(200)][21.5%][r=7888MiB/s][r=7888 IOPS][eta 01m:35s]
Jobs: 200 (f=200): [R(200)][22.3%][r=10.1GiB/s][r=10.4k IOPS][eta 01m:34s]
Jobs: 200 (f=200): [R(200)][23.1%][r=8623MiB/s][r=8623 IOPS][eta 01m:33s]
Jobs: 200 (f=200): [R(200)][24.0%][r=10.2GiB/s][r=10.5k IOPS][eta 01m:32s]
Jobs: 200 (f=200): [R(200)][24.8%][r=9838MiB/s][r=9838 IOPS][eta 01m:31s]
Jobs: 200 (f=200): [R(200)][25.6%][r=10.8GiB/s][r=11.0k IOPS][eta 01m:30s]
Jobs: 200 (f=200): [R(200)][26.4%][r=9587MiB/s][r=9587 IOPS][eta 01m:29s]
Jobs: 200 (f=200): [R(200)][27.3%][r=9201MiB/s][r=9200 IOPS][eta 01m:28s]
Jobs: 200 (f=200): [R(200)][28.1%][r=8385MiB/s][r=8384 IOPS][eta 01m:27s]
Jobs: 200 (f=200): [R(200)][28.9%][r=8936MiB/s][r=8936 IOPS][eta 01m:26s]
Jobs: 200 (f=200): [R(200)][29.8%][r=8193MiB/s][r=8192 IOPS][eta 01m:25s]
Jobs: 200 (f=200): [R(200)][30.6%][r=9583MiB/s][r=9583 IOPS][eta 01m:24s]
Jobs: 200 (f=200): [R(200)][31.4%][r=9779MiB/s][r=9779 IOPS][eta 01m:23s]
Jobs: 200 (f=200): [R(200)][32.2%][r=9424MiB/s][r=9423 IOPS][eta 01m:22s]
Jobs: 200 (f=200): [R(200)][33.1%][r=9221MiB/s][r=9220 IOPS][eta 01m:21s]
Jobs: 200 (f=200): [R(200)][33.9%][r=9772MiB/s][r=9772 IOPS][eta 01m:20s]
Jobs: 200 (f=200): [R(200)][34.7%][r=7570MiB/s][r=7570 IOPS][eta 01m:19s]
Jobs: 200 (f=200): [R(200)][35.5%][r=8686MiB/s][r=8686 IOPS][eta 01m:18s]
Jobs: 200 (f=200): [R(200)][36.4%][r=9591MiB/s][r=9591 IOPS][eta 01m:17s]
Jobs: 200 (f=200): [R(200)][37.2%][r=9597MiB/s][r=9597 IOPS][eta 01m:16s]
Jobs: 200 (f=200): [R(200)][38.0%][r=9327MiB/s][r=9326 IOPS][eta 01m:15s]
Jobs: 200 (f=200): [R(200)][38.8%][r=9229MiB/s][r=9228 IOPS][eta 01m:14s]
Jobs: 200 (f=200): [R(200)][39.7%][r=8392MiB/s][r=8391 IOPS][eta 01m:13s]
Jobs: 200 (f=200): [R(200)][40.5%][r=8716MiB/s][r=8716 IOPS][eta 01m:12s]
Jobs: 200 (f=200): [R(200)][41.3%][r=10.4GiB/s][r=10.7k IOPS][eta 01m:11s]
Jobs: 200 (f=200): [R(200)][42.1%][r=9.82GiB/s][r=10.1k IOPS][eta 01m:10s]
Jobs: 200 (f=200): [R(200)][43.0%][r=10.1GiB/s][r=10.4k IOPS][eta 01m:09s]
Jobs: 200 (f=200): [R(200)][43.8%][r=9446MiB/s][r=9445 IOPS][eta 01m:08s]
Jobs: 200 (f=200): [R(200)][44.6%][r=9155MiB/s][r=9154 IOPS][eta 01m:07s]
Jobs: 200 (f=200): [R(200)][45.5%][r=8840MiB/s][r=8840 IOPS][eta 01m:06s]
Jobs: 200 (f=200): [R(200)][46.3%][r=8911MiB/s][r=8911 IOPS][eta 01m:05s]
Jobs: 200 (f=200): [R(200)][47.1%][r=8457MiB/s][r=8456 IOPS][eta 01m:04s]
Jobs: 200 (f=200): [R(200)][47.9%][r=9334MiB/s][r=9333 IOPS][eta 01m:03s]
Jobs: 200 (f=200): [R(200)][48.8%][r=8777MiB/s][r=8777 IOPS][eta 01m:02s]
Jobs: 200 (f=200): [R(200)][49.6%][r=8082MiB/s][r=8081 IOPS][eta 01m:01s]
Jobs: 200 (f=200): [R(200)][50.4%][r=10.2GiB/s][r=10.4k IOPS][eta 01m:00s]
Jobs: 200 (f=200): [R(200)][51.2%][r=11.0GiB/s][r=11.3k IOPS][eta 00m:59s]
Jobs: 200 (f=200): [R(200)][52.1%][r=8522MiB/s][r=8522 IOPS][eta 00m:58s]
Jobs: 200 (f=200): [R(200)][52.9%][r=8892MiB/s][r=8892 IOPS][eta 00m:57s]
Jobs: 200 (f=200): [R(200)][53.7%][r=7874MiB/s][r=7874 IOPS][eta 00m:56s]
Jobs: 200 (f=200): [R(200)][54.5%][r=9.85GiB/s][r=10.1k IOPS][eta 00m:55s]
Jobs: 200 (f=200): [R(200)][55.4%][r=9958MiB/s][r=9958 IOPS][eta 00m:54s]
Jobs: 200 (f=200): [R(200)][56.2%][r=7622MiB/s][r=7622 IOPS][eta 00m:53s]
Jobs: 200 (f=200): [R(200)][57.0%][r=7918MiB/s][r=7918 IOPS][eta 00m:52s]
Jobs: 200 (f=200): [R(200)][57.9%][r=9118MiB/s][r=9117 IOPS][eta 00m:51s]
Jobs: 200 (f=200): [R(200)][58.7%][r=9053MiB/s][r=9052 IOPS][eta 00m:50s]
Jobs: 200 (f=200): [R(200)][59.5%][r=9300MiB/s][r=9299 IOPS][eta 00m:49s]
Jobs: 200 (f=200): [R(200)][60.3%][r=8864MiB/s][r=8864 IOPS][eta 00m:48s]
Jobs: 200 (f=200): [R(200)][61.2%][r=9.81GiB/s][r=10.0k IOPS][eta 00m:47s]
Jobs: 200 (f=200): [R(200)][62.0%][r=9528MiB/s][r=9528 IOPS][eta 00m:46s]
Jobs: 200 (f=200): [R(200)][62.8%][r=9506MiB/s][r=9506 IOPS][eta 00m:45s]
Jobs: 200 (f=200): [R(200)][63.6%][r=11.3GiB/s][r=11.6k IOPS][eta 00m:44s]
Jobs: 200 (f=200): [R(200)][64.5%][r=8846MiB/s][r=8846 IOPS][eta 00m:43s]
Jobs: 200 (f=200): [R(200)][65.3%][r=9292MiB/s][r=9291 IOPS][eta 00m:42s]
Jobs: 200 (f=200): [R(200)][66.1%][r=8727MiB/s][r=8727 IOPS][eta 00m:41s]
Jobs: 200 (f=200): [R(200)][66.9%][r=10.4GiB/s][r=10.7k IOPS][eta 00m:40s]
Jobs: 200 (f=200): [R(200)][67.8%][r=10.7GiB/s][r=10.9k IOPS][eta 00m:39s]
Jobs: 200 (f=200): [R(200)][68.6%][r=10.8GiB/s][r=11.1k IOPS][eta 00m:38s]
Jobs: 200 (f=200): [R(200)][69.4%][r=10.5GiB/s][r=10.8k IOPS][eta 00m:37s]
Jobs: 200 (f=200): [R(200)][70.2%][r=8535MiB/s][r=8535 IOPS][eta 00m:36s]
Jobs: 200 (f=200): [R(200)][71.1%][r=9654MiB/s][r=9654 IOPS][eta 00m:35s]
Jobs: 200 (f=200): [R(200)][71.9%][r=10.5GiB/s][r=10.7k IOPS][eta 00m:34s]
Jobs: 200 (f=200): [R(200)][72.7%][r=8782MiB/s][r=8782 IOPS][eta 00m:33s]
Jobs: 200 (f=200): [R(200)][73.6%][r=8771MiB/s][r=8771 IOPS][eta 00m:32s]
Jobs: 200 (f=200): [R(200)][74.4%][r=9072MiB/s][r=9071 IOPS][eta 00m:31s]
Jobs: 200 (f=200): [R(200)][75.2%][r=9973MiB/s][r=9973 IOPS][eta 00m:30s]
Jobs: 200 (f=200): [R(200)][76.0%][r=11.2GiB/s][r=11.5k IOPS][eta 00m:29s]
Jobs: 200 (f=200): [R(200)][76.9%][r=9517MiB/s][r=9517 IOPS][eta 00m:28s]
Jobs: 200 (f=200): [R(200)][77.7%][r=10.8GiB/s][r=11.0k IOPS][eta 00m:27s]
Jobs: 200 (f=200): [R(200)][78.5%][r=9889MiB/s][r=9889 IOPS][eta 00m:26s]
Jobs: 200 (f=200): [R(200)][79.3%][r=8993MiB/s][r=8993 IOPS][eta 00m:25s]
Jobs: 200 (f=200): [R(200)][80.2%][r=9453MiB/s][r=9452 IOPS][eta 00m:24s]
Jobs: 200 (f=200): [R(200)][81.0%][r=7805MiB/s][r=7805 IOPS][eta 00m:23s]
Jobs: 200 (f=200): [R(200)][81.8%][r=9.95GiB/s][r=10.2k IOPS][eta 00m:22s]
Jobs: 200 (f=200): [R(200)][82.6%][r=10.1GiB/s][r=10.4k IOPS][eta 00m:21s]
Jobs: 200 (f=200): [R(200)][83.5%][r=4258MiB/s][r=4257 IOPS][eta 00m:20s]
Jobs: 200 (f=200): [R(200)][84.3%][r=4267MiB/s][r=4266 IOPS][eta 00m:19s]
Jobs: 200 (f=200): [R(200)][85.1%][r=4225MiB/s][r=4224 IOPS][eta 00m:18s]
Jobs: 200 (f=200): [R(200)][86.0%][r=4184MiB/s][r=4183 IOPS][eta 00m:17s]
Jobs: 200 (f=200): [R(200)][86.8%][r=4166MiB/s][r=4165 IOPS][eta 00m:16s]
Jobs: 200 (f=200): [R(200)][87.6%][r=4162MiB/s][r=4161 IOPS][eta 00m:15s]
Jobs: 200 (f=200): [R(200)][88.4%][r=4104MiB/s][r=4103 IOPS][eta 00m:14s]
Jobs: 200 (f=200): [R(200)][89.3%][r=4026MiB/s][r=4025 IOPS][eta 00m:13s]
Jobs: 200 (f=200): [R(200)][90.1%][r=4196MiB/s][r=4195 IOPS][eta 00m:12s]
Jobs: 200 (f=200): [R(200)][90.9%][r=4208MiB/s][r=4207 IOPS][eta 00m:11s]
Jobs: 200 (f=200): [R(200)][91.7%][r=4143MiB/s][r=4142 IOPS][eta 00m:10s]
Jobs: 200 (f=200): [R(200)][92.6%][r=4119MiB/s][r=4118 IOPS][eta 00m:09s]
Jobs: 200 (f=200): [R(200)][93.4%][r=4204MiB/s][r=4203 IOPS][eta 00m:08s]
Jobs: 200 (f=200): [R(200)][94.2%][r=4141MiB/s][r=4140 IOPS][eta 00m:07s]
Jobs: 200 (f=200): [R(200)][95.0%][r=4171MiB/s][r=4170 IOPS][eta 00m:06s]
Jobs: 200 (f=200): [R(200)][95.9%][r=4217MiB/s][r=4216 IOPS][eta 00m:05s]
Jobs: 200 (f=200): [R(200)][96.7%][r=4133MiB/s][r=4132 IOPS][eta 00m:04s]
Jobs: 200 (f=200): [R(200)][97.5%][r=4140MiB/s][r=4139 IOPS][eta 00m:03s]
Jobs: 200 (f=200): [R(200)][98.3%][r=4186MiB/s][r=4185 IOPS][eta 00m:02s]
Jobs: 200 (f=200): [R(200)][99.2%][r=4209MiB/s][r=4208 IOPS][eta 00m:01s]
Jobs: 200 (f=200): [R(200)][100.0%][r=4211MiB/s][r=4210 IOPS][eta 00m:00s]
Jobs: 200 (f=200): [R(200)][50.0%][r=322MiB/s][r=321 IOPS][eta 02m:02s]
Jobs: 200 (f=200): [R(200)][50.0%][eta 02m:03s]
Jobs: 200 (f=200): [R(200)][50.0%][eta 02m:04s]
read_throughput: (groupid=0, jobs=200): err= 0: pid=16892: Wed Jan 29 06:40:26 2025
  read: IOPS=8363, BW=8364MiB/s (8770MB/s)(1005GiB/123088msec)
    slat (usec): min=56, max=14594, avg=92.13, stdev=86.18
    clat (msec): min=9, max=6045, avg=1529.04, stdev=591.74
     lat (msec): min=10, max=6045, avg=1529.14, stdev=591.73
    clat percentiles (msec):
     |  1.00th=[ 1083],  5.00th=[ 1167], 10.00th=[ 1200], 20.00th=[ 1267],
     | 30.00th=[ 1301], 40.00th=[ 1351], 50.00th=[ 1385], 60.00th=[ 1418],
     | 70.00th=[ 1452], 80.00th=[ 1502], 90.00th=[ 1636], 95.00th=[ 3071],
     | 99.00th=[ 3608], 99.50th=[ 4866], 99.90th=[ 5805], 99.95th=[ 5940],
     | 99.99th=[ 6074]
   bw (  MiB/s): min= 2770, max=11950, per=100.00%, avg=8472.20, stdev=11.44, samples=48000
   iops        : min= 2770, max=11950, avg=8471.71, stdev=11.44, samples=48000
  lat (msec)   : 10=0.01%, 50=0.01%, 100=0.03%, 250=0.11%, 500=0.29%
  lat (msec)   : 750=0.21%, 1000=0.19%, 2000=89.94%, >=2000=9.23%
  cpu          : usr=0.02%, sys=0.41%, ctx=1037454, majf=2, minf=111844
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.2%, 16=0.3%, 32=0.6%, >=64=98.8%
     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=1029474,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=8364MiB/s (8770MB/s), 8364MiB/s-8364MiB/s (8770MB/s-8770MB/s), io=1005GiB (1079GB), run=123088-123088msec
```

### ・順次読取りのテスト結果
- 1回目の NFS Server で Cache されてない状態のスループット・パフォーマンスは、次の bw 行を見ると、max= 4720 (MiB/s) = 39.594 Gbps であることを確認できます。

```:bw行
   bw (  MiB/s): min= 2796, max= 4720, per=99.95%, avg=4015.46, stdev= 1.50, samples=48000
```



- 2回目の NFS Server で Cache された、スループット・パフォーマンスは、次の bw 行を見ると、max= 11950 (MiB/s) = 100.243 Gbps であることを確認できます。

```:bw行
   bw (  MiB/s): min= 2770, max=11950, per=100.00%, avg=8472.20, stdev=11.44, samples=48000
```



# ■ 参考
　・ [Oracle LinuxでのNFSサーバーの作成](https://docs.oracle.com/ja/learn/create_nfs_linux/#introduction)
　・ [Sample FIO Commands for Block Volume Performance Tests on Linux-based Instances](https://docs.oracle.com/en-us/iaas/Content/Block/References/samplefiocommandslinux.htm)
　・ [fio - Flexible I/O tester](https://fio.readthedocs.io/en/latest/fio_doc.html)
　・ [Package nfs-utils](https://www.mankier.com/package/nfs-utils)
　・ [nconnectを使用してNFSのパフォーマンスを簡単に向上させる](https://medium.com/@emilypotyraj/use-nconnect-to-effortlessly-increase-nfs-performance-4ceb46c64089)
　・ [NFS スレッド数の設定](https://docs.oracle.com/cd/E19455-01/806-3908/z40005dc673b/index.html)