13
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Oracle Cloud MAXスピード・チャレンジ: NFS接続で I/Oスループット 200Gbps 出してみてみた

Last updated at Posted at 2025-10-07


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スループットを測定してみてみます。

■ 構成イメージ

構成図.png

■ 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 libaio.cエラー出力内容
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行
   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 スレッド数の設定

13
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?