Oracle Cloud Infrastructure (OCI) Compute BM.Standard.E6 で超高パフォーマンス・ボリューム(UHP)のストレージを使用して I/Oスループットが 200Gbpsでることを前回確認しました。
今回、2つの BM.Standard.E6 間ネットワーク帯域も 200Gbps 出るかどうかを確認するために、前回使用したコンピュートを NFSサーバーにして、新に NFSクライアント用途で BM.Standard.E6 を追加した構成で、NFS Client/Server接続の I/Oスループットを測定してみてみます。
■ 構成イメージ
■ NFS Server 設定
Local Storage で I/Oスピード 200Gbps 出る前回使用したコンピュートを使用して NFS Serverへ構成します。
● NFS Server インストール
nfs-utils パッケージは、カーネル NFS (ネットワーク ファイル システム) サーバーおよび関連ツール用のデーモンを提供し、従来の Linux NFS サーバーよりも優れたパフォーマンスを提供します。
1) Install nfs-utils
サーバー・インスタンスに接続し、NFSユーティリティーパッケージをインストール
[root@bm-e6 ~]# dnf install nfs-utils
Last metadata expiration check: 0:50:30 ago on Mon 29 Sep 2025 06:21:44 AM GMT.
Package nfs-utils-1:2.5.4-34.0.1.el9.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
2) conf ファイル設定
nfsd のスレッド数を増加させます (デフォルトは 8)
性能の向上のために、NFS サーバーを設定する際には、必ず NFS スレッドを設定します。スレッド 1 つは、NFS 要求を 1 つ処理することができます。スレッドプールを大きくすることにより、サーバーは複数の NFS 要求を並行して処理することができます。プロセッサ数とネットワーク数に従って、このデフォルト値を大きくします。
[root@bm-e6 ~]# vi /etc/nfs.conf
[nfsd]
threads=160
3) 設定反映
[root@bm-e6 ~]# systemctl daemon-reload
[root@bm-e6 ~]#systemctl restart nfs-mountd
4) 設定反映確認
・ カーネル・パラメータ確認
[root@bm-e6 ~]# cat /proc/fs/nfsd/threads
160
・ プロセス確認
[root@bm-e6 ~]# ps -ef | grep nfs
root 10419 10383 0 02:04 ? 00:00:00 /usr/bin/python3 /var/lib/pcp/pmdas/nfsclient/pmdanfsclient.python
root 187843 1 0 07:16 ? 00:00:00 /usr/sbin/nfsdcld
root 187860 2 0 07:16 ? 00:00:00 [nfsd]
root 187861 2 0 07:16 ? 00:00:00 [nfsd]
root 187862 2 0 07:16 ? 00:00:00 [nfsd]
root 187863 2 0 07:16 ? 00:00:00 [nfsd]
root 187864 2 0 07:16 ? 00:00:00 [nfsd]
root 187865 2 0 07:16 ? 00:00:00 [nfsd]
root 187866 2 0 07:16 ? 00:00:00 [nfsd]
root 187867 2 0 07:16 ? 00:00:00 [nfsd]
root 187868 2 0 07:16 ? 00:00:00 [nfsd]
root 187869 2 0 07:16 ? 00:00:00 [nfsd]
root 187870 2 0 07:16 ? 00:00:00 [nfsd]
root 187871 2 0 07:16 ? 00:00:00 [nfsd]
root 187872 2 0 07:16 ? 00:00:00 [nfsd]
root 187873 2 0 07:16 ? 00:00:00 [nfsd]
root 187874 2 0 07:16 ? 00:00:00 [nfsd]
root 187875 2 0 07:16 ? 00:00:00 [nfsd]
root 187876 2 0 07:16 ? 00:00:00 [nfsd]
root 187877 2 0 07:16 ? 00:00:00 [nfsd]
root 187878 2 0 07:16 ? 00:00:00 [nfsd]
root 187879 2 0 07:16 ? 00:00:00 [nfsd]
root 187880 2 0 07:16 ? 00:00:00 [nfsd]
root 187881 2 0 07:16 ? 00:00:00 [nfsd]
root 187882 2 0 07:16 ? 00:00:00 [nfsd]
root 187883 2 0 07:16 ? 00:00:00 [nfsd]
root 187884 2 0 07:16 ? 00:00:00 [nfsd]
root 187885 2 0 07:16 ? 00:00:00 [nfsd]
root 187886 2 0 07:16 ? 00:00:00 [nfsd]
root 187887 2 0 07:16 ? 00:00:00 [nfsd]
root 187888 2 0 07:16 ? 00:00:00 [nfsd]
root 187889 2 0 07:16 ? 00:00:00 [nfsd]
root 187890 2 0 07:16 ? 00:00:00 [nfsd]
root 187891 2 0 07:16 ? 00:00:00 [nfsd]
root 187892 2 0 07:16 ? 00:00:00 [nfsd]
root 187893 2 0 07:16 ? 00:00:00 [nfsd]
root 187894 2 0 07:16 ? 00:00:00 [nfsd]
root 187895 2 0 07:16 ? 00:00:00 [nfsd]
root 187896 2 0 07:16 ? 00:00:00 [nfsd]
root 187897 2 0 07:16 ? 00:00:00 [nfsd]
root 187898 2 0 07:16 ? 00:00:00 [nfsd]
root 187899 2 0 07:16 ? 00:00:00 [nfsd]
root 187900 2 0 07:16 ? 00:00:00 [nfsd]
root 187901 2 0 07:16 ? 00:00:00 [nfsd]
root 187902 2 0 07:16 ? 00:00:00 [nfsd]
root 187903 2 0 07:16 ? 00:00:00 [nfsd]
root 187904 2 0 07:16 ? 00:00:00 [nfsd]
root 187905 2 0 07:16 ? 00:00:00 [nfsd]
root 187906 2 0 07:16 ? 00:00:00 [nfsd]
root 187907 2 0 07:16 ? 00:00:00 [nfsd]
root 187908 2 0 07:16 ? 00:00:00 [nfsd]
root 187909 2 0 07:16 ? 00:00:00 [nfsd]
root 187910 2 0 07:16 ? 00:00:00 [nfsd]
root 187911 2 0 07:16 ? 00:00:00 [nfsd]
root 187912 2 0 07:16 ? 00:00:00 [nfsd]
root 187913 2 0 07:16 ? 00:00:00 [nfsd]
root 187914 2 0 07:16 ? 00:00:00 [nfsd]
root 187915 2 0 07:16 ? 00:00:00 [nfsd]
root 187916 2 0 07:16 ? 00:00:00 [nfsd]
root 187917 2 0 07:16 ? 00:00:00 [nfsd]
root 187918 2 0 07:16 ? 00:00:00 [nfsd]
root 187919 2 0 07:16 ? 00:00:00 [nfsd]
root 187920 2 0 07:16 ? 00:00:00 [nfsd]
root 187921 2 0 07:16 ? 00:00:00 [nfsd]
root 187922 2 0 07:16 ? 00:00:00 [nfsd]
root 187923 2 0 07:16 ? 00:00:00 [nfsd]
root 187924 2 0 07:16 ? 00:00:00 [nfsd]
root 187925 2 0 07:16 ? 00:00:00 [nfsd]
root 187926 2 0 07:16 ? 00:00:00 [nfsd]
root 187927 2 0 07:16 ? 00:00:00 [nfsd]
root 187928 2 0 07:16 ? 00:00:00 [nfsd]
root 187929 2 0 07:16 ? 00:00:00 [nfsd]
root 187930 2 0 07:16 ? 00:00:00 [nfsd]
root 187931 2 0 07:16 ? 00:00:00 [nfsd]
root 187932 2 0 07:16 ? 00:00:00 [nfsd]
root 187933 2 0 07:16 ? 00:00:00 [nfsd]
root 187934 2 0 07:16 ? 00:00:00 [nfsd]
root 187935 2 0 07:16 ? 00:00:00 [nfsd]
root 187936 2 0 07:16 ? 00:00:00 [nfsd]
root 187937 2 0 07:16 ? 00:00:00 [nfsd]
root 187938 2 0 07:16 ? 00:00:00 [nfsd]
root 187939 2 0 07:16 ? 00:00:00 [nfsd]
root 187940 2 0 07:16 ? 00:00:00 [nfsd]
root 187941 2 0 07:16 ? 00:00:00 [nfsd]
root 187942 2 0 07:16 ? 00:00:00 [nfsd]
root 187943 2 0 07:16 ? 00:00:00 [nfsd]
root 187944 2 0 07:16 ? 00:00:00 [nfsd]
root 187945 2 0 07:16 ? 00:00:00 [nfsd]
root 187946 2 0 07:16 ? 00:00:00 [nfsd]
root 187947 2 0 07:16 ? 00:00:00 [nfsd]
root 187948 2 0 07:16 ? 00:00:00 [nfsd]
root 187949 2 0 07:16 ? 00:00:00 [nfsd]
root 187950 2 0 07:16 ? 00:00:00 [nfsd]
root 187951 2 0 07:16 ? 00:00:00 [nfsd]
root 187952 2 0 07:16 ? 00:00:00 [nfsd]
root 187953 2 0 07:16 ? 00:00:00 [nfsd]
root 187954 2 0 07:16 ? 00:00:00 [nfsd]
root 187955 2 0 07:16 ? 00:00:00 [nfsd]
root 187956 2 0 07:16 ? 00:00:00 [nfsd]
root 187957 2 0 07:16 ? 00:00:00 [nfsd]
root 187958 2 0 07:16 ? 00:00:00 [nfsd]
root 187959 2 0 07:16 ? 00:00:00 [nfsd]
root 187960 2 0 07:16 ? 00:00:00 [nfsd]
root 187961 2 0 07:16 ? 00:00:00 [nfsd]
root 187962 2 0 07:16 ? 00:00:00 [nfsd]
root 187963 2 0 07:16 ? 00:00:00 [nfsd]
root 187964 2 0 07:16 ? 00:00:00 [nfsd]
root 187965 2 0 07:16 ? 00:00:00 [nfsd]
root 187966 2 0 07:16 ? 00:00:00 [nfsd]
root 187967 2 0 07:16 ? 00:00:00 [nfsd]
root 187968 2 0 07:16 ? 00:00:00 [nfsd]
root 187969 2 0 07:16 ? 00:00:00 [nfsd]
root 187970 2 0 07:16 ? 00:00:00 [nfsd]
root 187971 2 0 07:16 ? 00:00:00 [nfsd]
root 187972 2 0 07:16 ? 00:00:00 [nfsd]
root 187973 2 0 07:16 ? 00:00:00 [nfsd]
root 187974 2 0 07:16 ? 00:00:00 [nfsd]
root 187975 2 0 07:16 ? 00:00:00 [nfsd]
root 187976 2 0 07:16 ? 00:00:00 [nfsd]
root 187977 2 0 07:16 ? 00:00:00 [nfsd]
root 187978 2 0 07:16 ? 00:00:00 [nfsd]
root 187979 2 0 07:16 ? 00:00:00 [nfsd]
root 187980 2 0 07:16 ? 00:00:00 [nfsd]
root 187981 2 0 07:16 ? 00:00:00 [nfsd]
root 187982 2 0 07:16 ? 00:00:00 [nfsd]
root 187983 2 0 07:16 ? 00:00:00 [nfsd]
root 187984 2 0 07:16 ? 00:00:00 [nfsd]
root 187985 2 0 07:16 ? 00:00:00 [nfsd]
root 187986 2 0 07:16 ? 00:00:00 [nfsd]
root 187987 2 0 07:16 ? 00:00:00 [nfsd]
root 187988 2 0 07:16 ? 00:00:00 [nfsd]
root 187989 2 0 07:16 ? 00:00:00 [nfsd]
root 187990 2 0 07:16 ? 00:00:00 [nfsd]
root 187991 2 0 07:16 ? 00:00:00 [nfsd]
root 187992 2 0 07:16 ? 00:00:00 [nfsd]
root 187993 2 0 07:16 ? 00:00:00 [nfsd]
root 187994 2 0 07:16 ? 00:00:00 [nfsd]
root 187995 2 0 07:16 ? 00:00:00 [nfsd]
root 187996 2 0 07:16 ? 00:00:00 [nfsd]
root 187997 2 0 07:16 ? 00:00:00 [nfsd]
root 187998 2 0 07:16 ? 00:00:00 [nfsd]
root 187999 2 0 07:16 ? 00:00:00 [nfsd]
root 188000 2 0 07:16 ? 00:00:00 [nfsd]
root 188001 2 0 07:16 ? 00:00:00 [nfsd]
root 188002 2 0 07:16 ? 00:00:00 [nfsd]
root 188003 2 0 07:16 ? 00:00:00 [nfsd]
root 188004 2 0 07:16 ? 00:00:00 [nfsd]
root 188005 2 0 07:16 ? 00:00:00 [nfsd]
root 188006 2 0 07:16 ? 00:00:00 [nfsd]
root 188007 2 0 07:16 ? 00:00:00 [nfsd]
root 188008 2 0 07:16 ? 00:00:00 [nfsd]
root 188009 2 0 07:16 ? 00:00:00 [nfsd]
root 188010 2 0 07:16 ? 00:00:00 [nfsd]
root 188011 2 0 07:16 ? 00:00:00 [nfsd]
root 188012 2 0 07:16 ? 00:00:00 [nfsd]
root 188013 2 0 07:16 ? 00:00:00 [nfsd]
root 188014 2 0 07:16 ? 00:00:00 [nfsd]
root 188015 2 0 07:16 ? 00:00:00 [nfsd]
root 188016 2 0 07:16 ? 00:00:00 [nfsd]
root 188017 2 0 07:16 ? 00:00:00 [nfsd]
root 188018 2 0 07:16 ? 00:00:00 [nfsd]
root 188019 2 0 07:16 ? 00:00:00 [nfsd]
root 188034 134022 0 07:16 pts/0 00:00:00 grep --color=auto nfs
● NFS 共有ストレージ作成
前回作成した LVM へ ファイルシステムを作成し、NFS用ディレクトリへマウントします。
1) LVM 確認
lvs コマンドを使って論理ボリュームを確認
[root@bm-e6 ~]# lvscan
ACTIVE '/dev/ocivolume/oled' [15.00 GiB] inherit
ACTIVE '/dev/ocivolume/root' [29.50 GiB] inherit
ACTIVE '/dev/volgroup01/striped_logical_volume' [28.71 TiB] inherit
2) ファイルシステム作成
ファイルシステムを striped_logical_volume 論理ボリューム上に作成
[root@bm-e6 ~]# mkfs.xfs /dev/volgroup01/striped_logical_volume
meta-data=/dev/volgroup01/striped_logical_volume isize=512 agcount=512, agsize=15052758 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1 nrext64=0
= exchange=0
data = bsize=4096 blocks=7707012096, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1, parent=0
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-e6 ~]# mkdir -p /nfs/export1
[root@bm-e6 ~]# chmod 2770 /nfs/export1
[root@bm-e6 ~]# chgrp opc /nfs/export1
[root@bm-e6 ~]# ls -ld /nfs/export1
drwxrws---. 2 root opc 6 Sep 29 07:23 /nfs/export1
[root@bm-e6 ~]# ls -la /nfs/export1
total 0
drwxrws---. 2 root opc 6 Sep 29 07:23 .
drwxr-xr-x. 3 root root 21 Sep 29 07:23 ..
4) ファイルシステムをマウント
[root@bm-e6 ~]# mount /dev/volgroup01/striped_logical_volume /nfs/export1
5) ファイルシステムをマウント確認
[root@bm-e6 ~]# 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-e6 ~]# df -hT | grep export1
/dev/mapper/volgroup01-striped_logical_volume xfs 29T 206G 29T 1% /nfs/export1
3) NFS エクスポート設定
/etc/exportsで共有を定義します。
[root@bm-e6 ~]# vi /etc/exports
[root@bm-e6 ~]# cat /etc/exports
/nfs/export1 *(rw,no_root_squash)
3) 設定反映と確認
[root@bm-e6 ~]# exportfs -ar
[root@bm-e6 ~]# exportfs -v
/nfs/export1 <world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
● NFS Server 起動
1) nfs-serverステータス確認
[root@bm-e6 ~]# 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-e6 ~]# systemctl start nfs-server.service
3) nfs-server 起動ステータス確認
[root@bm-e6 ~]# systemctl status nfs-server
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; preset: disabled)
Active: active (exited) since Mon 2025-09-29 07:16:28 GMT; 11min ago
Docs: man:rpc.nfsd(8)
man:exportfs(8)
Process: 187845 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
Process: 187847 ExecStart=/usr/sbin/rpc.nfsd (code=exited, status=0/SUCCESS)
Process: 188020 ExecStart=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl reload gssproxy ; fi (code=exited, status=0/SUCCESS)
Main PID: 188020 (code=exited, status=0/SUCCESS)
CPU: 35ms
Sep 29 07:16:27 bm-e6 systemd[1]: Starting NFS server and services...
Sep 29 07:16:28 bm-e6 systemd[1]: Finished NFS server and services.
4) nfs-server 起動ステータス確認
showmountコマンドは、NFSサーバーを使用して使用可能な共有を表示
[root@bm-e6 ~]# showmount -e
Export list for bm-e6:
/nfs/export1 *
● NFS server 自動起動設定
[root@bm-e6 ~]# 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-e6 ~]# systemctl is-enabled nfs-server
enabled
● Firewalld 設定
NFSトラフィックを許可するようにファイアウォールを設定
[root@bm-e6 ~]# firewall-cmd --permanent --add-service nfs
success
[root@bm-e6 ~]# firewall-cmd --reload
success
[root@bm-e6 ~]# firewall-cmd --list-all | grep nfs
services: dhcpv6-client nfs ssh
● NFS RPCサービスの状態確認
[root@bm-e6 ~]# rpcinfo
program version netid address service owner
100000 4 tcp6 ::.0.111 portmapper superuser
100000 3 tcp6 ::.0.111 portmapper superuser
100000 4 udp6 ::.0.111 portmapper superuser
100000 3 udp6 ::.0.111 portmapper superuser
100000 4 tcp 0.0.0.0.0.111 portmapper superuser
100000 3 tcp 0.0.0.0.0.111 portmapper superuser
100000 2 tcp 0.0.0.0.0.111 portmapper superuser
100000 4 udp 0.0.0.0.0.111 portmapper superuser
100000 3 udp 0.0.0.0.0.111 portmapper superuser
100000 2 udp 0.0.0.0.0.111 portmapper superuser
100000 4 local /run/rpcbind.sock portmapper superuser
100000 3 local /run/rpcbind.sock portmapper superuser
■ NFS Client 設定
クライアント・インスタンスに接続し、NFSユーティリティーパッケージをインストール
⚫︎ nfs-utils インストール
1) Install the nfs-utils package:
[root@bm-e6-client ~]# dnf install nfs-utils
Last metadata expiration check: 0:56:38 ago on Mon 29 Sep 2025 06:33:32 AM GMT.
Package nfs-utils-1:2.5.4-34.0.1.el9.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
⚫︎ NFS 共有ディレクトリ・マウント
BM.E6シェイプの 200Gbps読取りスループットを最大限に活用するために、Linuxカーネルバージョン5.3以降から使用できる nconnect=16 マウントオプションを使用します。
nconnect を使用すると、より少ないクライアント マシンを使用して大規模にパフォーマンスを向上させ、総保有コスト (TCO) を削減できます。 Nconnect は、単一または複数のクライアントを使用して、1 つまたは複数の NIC で複数の TCP チャネルを使用することで、パフォーマンスを向上させます。
1) NFSマウント・ディレクトリ作成
[root@bm-e6-client ~]# mkdir /mnt/nfs
[root@bm-e6-client ~]# ls -ld /mnt/nfs/
drwxr-xr-x. 2 root root 6 Sep 29 07:30 /mnt/nfs/
[root@bm-e6-client ~]# ls -la /mnt/nfs/
total 0
drwxr-xr-x. 2 root root 6 Sep 29 07:30 .
drwxr-xr-x. 3 root root 17 Sep 29 07:30 ..
2) NFSマウント
[root@bm-e6-client ~]# mount -t nfs -o nconnect=16 10.100.0.251:/nfs/export1 /mnt/nfs
[root@bm-e6-client ~]# mount | grep nfs
rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
10.100.0.251:/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.100.0.104,local_lock=none,addr=10.100.0.251)
[root@bm-e6-client ~]# nfsstat -m
/mnt/nfs from 10.100.0.251:/nfs/export1
Flags: rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,nconnect=16,timeo=600,retrans=2,sec=sys,clientaddr=10.100.0.104,local_lock=none,addr=10.100.0.251
3) NFSマウント確認
[root@bm-e6-client ~]# mount | grep 10.100.0.251
10.100.0.251:/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.100.0.104,local_lock=none,addr=10.100.0.251)
4) NFS マウント・ディレクトリ確認
[root@bm-e6-client ~]# df -hT | grep nfs
10.100.0.251:/nfs/export1 nfs4 29T 206G 29T 1% /mnt/nfs
5) NFS マウント・プロセス確認
nconnect=16 マウントオプションで NFSサーバー・ポート:2049 に対して 16個の TCP接続が起動していることを確認
[root@bm-e6-client ~]# netstat -an |grep 2049
tcp 0 0 10.100.0.104:872 10.100.0.251:2049 ESTABLISHED
tcp 0 0 10.100.0.104:710 10.100.0.251:2049 ESTABLISHED
tcp 0 0 10.100.0.104:717 10.100.0.251:2049 ESTABLISHED
tcp 0 0 10.100.0.104:792 10.100.0.251:2049 ESTABLISHED
tcp 0 0 10.100.0.104:1000 10.100.0.251:2049 ESTABLISHED
tcp 0 0 10.100.0.104:866 10.100.0.251:2049 ESTABLISHED
tcp 0 0 10.100.0.104:694 10.100.0.251:2049 ESTABLISHED
tcp 0 0 10.100.0.104:930 10.100.0.251:2049 ESTABLISHED
tcp 0 0 10.100.0.104:747 10.100.0.251:2049 ESTABLISHED
tcp 0 0 10.100.0.104:828 10.100.0.251:2049 ESTABLISHED
tcp 0 0 10.100.0.104:932 10.100.0.251:2049 ESTABLISHED
■ FIO コマンド使用して スループット・パフォーマンス・テスト
Linuxベース・インスタンスでブロック・ボリューム・パフォーマンス・テストを行うためのサンプルFIOコマンドを参照して FIOコマンドで IOPSとスループットのパフォーマンス・テストをします。
テストするには、次のFIOサンプル・コマンドを使用します。コマンドを直接実行することも、コマンドを使用してジョブ・ファイルを作成してからそのジョブ・ファイルを実行することもできます。
● fio で libaio.c エラー対応
・参考: libaio init failed due to resource temporarily unavailable
fio: pid=66990, err=11/file:engines/libaio.c:487, func=io_queue_init, error=Resource temporarily unavailable
Linuxカーネルは、非同期ノンブロッキングI/O(AIO)機能を提供します。この機能により、プロセスは複数のI/O操作を同時に開始することができ、いずれのI/O操作も完了するまで待つ必要がありません。これにより、処理とI/Oをオーバーラップさせるアプリケーションのパフォーマンスが向上します。
パフォーマンスは、procファイルシステム内の/proc/sys/fs/aio-max-nr仮想ファイルを使用して調整できます。aio-max-nrパラメータは、許容される同時リクエストの最大数を決定します。
aio-max-nr 値を設定するには、/etc/sysctl.conf ファイルに次の行を追加します。
[root@linux ~]# cat /proc/sys/fs/aio-max-nr
65536
[root@linux ~]# vi /etc/sysctl.conf
[root@linux ~]# cat /etc/sysctl.conf | grep fs.aio-max-nr
fs.aio-max-nr = 1048576
[root@linux ~]# sysctl -p /etc/sysctl.conf
・・・
fs.aio-max-nr = 1048576
[root@linux ~]# cat /proc/sys/fs/aio-max-nr
1048576
● 順次読取りのテスト
・順次読取りのテスト実行
データベース・ワークロードなど、順次アクセス・パターンを利用できるワークロードに対しては、順次読取りをテストすることにより、このパターンのパフォーマンスを確認できます。
順次読取りをテストするには、次のコマンドを実行します。
OSキャッシュを使用しない --direct=1 を使用します。
[root@bm-e6-client ~]# fio --filename=/mnt/nfs/fio500G.file --size=500GB --direct=1 --rw=read --bs=1m --ioengine=libaio --iodepth=64 --runtime=160 --numjobs=160 --time_based --group_reporting --name=throughput-test-job
throughput-test-job: (g=0): rw=read, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=libaio, iodepth=64
...
fio-3.35
Starting 160 processes
Jobs: 160 (f=160): [R(160)][100.0%][r=22.9GiB/s][r=23.5k IOPS][eta 00m:00s]
throughput-test-job: (groupid=0, jobs=160): err= 0: pid=52820: Thu Oct 2 03:07:59 2025
read: IOPS=23.4k, BW=22.8GiB/s (24.5GB/s)(3666GiB/160440msec)
slat (usec): min=21, max=4729, avg=65.73, stdev=34.49
clat (msec): min=8, max=865, avg=437.50, stdev=17.27
lat (msec): min=9, max=865, avg=437.56, stdev=17.26
clat percentiles (msec):
| 1.00th=[ 430], 5.00th=[ 435], 10.00th=[ 435], 20.00th=[ 439],
| 30.00th=[ 439], 40.00th=[ 439], 50.00th=[ 439], 60.00th=[ 439],
| 70.00th=[ 439], 80.00th=[ 439], 90.00th=[ 439], 95.00th=[ 443],
| 99.00th=[ 443], 99.50th=[ 447], 99.90th=[ 701], 99.95th=[ 785],
| 99.99th=[ 844]
bw ( MiB/s): min=19282, max=23875, per=100.00%, avg=23401.30, stdev= 1.99, samples=51200
iops : min=19244, max=23854, avg=23397.89, stdev= 2.00, samples=51200
lat (msec) : 10=0.01%, 20=0.01%, 50=0.01%, 100=0.03%, 250=0.10%
lat (msec) : 500=99.64%, 750=0.16%, 1000=0.07%
cpu : usr=0.05%, sys=0.97%, ctx=3745980, majf=0, minf=112207
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=99.7%
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=3753742,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=22.8GiB/s (24.5GB/s), 22.8GiB/s-22.8GiB/s (24.5GB/s-24.5GB/s), io=3666GiB (3936GB), run=160440-160440msec
・順次読取りのテスト結果
スループット・パフォーマンスは、次の bw 行を見ると、max= 23875 (MiB/s) = 200.28 Gbps であることを確認できます。
bw ( MiB/s): min=19282, max=23875, per=100.00%, avg=23401.30, stdev= 1.99, samples=51200
■ まとめ
今回の検証では、Oracle Cloud Infrastructure (OCI) の BM.Standard.E6 コンピュート と 超高パフォーマンス・ブロックボリューム (UHP) を組み合わせ、NFS 経由でも 200Gbps クラスの I/O スループット を実現できることを確認しました。
nfsd スレッドの最適化、nconnect=16 の並列化、そして FIO による緻密な実測。
そのすべてが噛み合い、OCI ストレージの“本気の性能”を引き出すことができました。
数字の向こうに見えたのは、クラウドでもオンプレでもない、新しいインフラのその先です。
そして今、OCI は単なるクラウドではなく、AIインフラストラクチャ(AI Infrastructure) として世界最大級のスケールと性能を提供しています。「First Principles Zettascale OCI Superclusters」でも語られているように、AI時代のコンピューティングを支えるための設計思想そのものが、OCIの中核にあります。
👉 AI Infrastructure: First Principles Zettascale OCI Superclusters
さらに、OCI は 世界で唯一提供している「パフォーマンスSLA」 によって、この性能が“理論値ではなく保証された実力”であることも特徴です。
👉 Oracle Cloud Infrastructure Service Level Agreements (SLA)
確かな設計思想と保証された性能。
その両輪が揃うことで、OCI は企業システムからAI基盤まで、“信頼して利用できるプラットフォーム”になっています。
200Gbps の壁を越えた今回のチャレンジは、そのポテンシャルの一端を体感するものでした。エンジニアとして、このスピードとスケールの中に立ち会えたことに、ただワクワクします。
OCI、マジ速い。
■ 参考
・ Oracle LinuxでのNFSサーバーの作成
・ Sample FIO Commands for Block Volume Performance Tests on Linux-based Instances
・ fio - Flexible I/O tester
・ Package nfs-utils
・ nconnectを使用してNFSのパフォーマンスを簡単に向上させる
・ NFS スレッド数の設定