背景
NFS(Network File System)はネットワークを介してファイルシステムにアクセスするためのプロトコルです。NFSを使用する際、NFSサーバのパフォーマンスと実際のディスクI/Oのパフォーマンスがどの程度一致するかを理解するために、NFSv3の操作数(nfsstatの値)とディスクI/O操作数(iostatの値)の相関関係を検証してみました。
検証環境
-
NFSサーバ
- OS: RHEL 9
- 構成: 1台のHDDを使用
- ホスト名: nfssv
- IPアドレス: 192.168.11.48
- NFS export用ディレクトリ: /srv/nfs
-
NFSクライアント
- OS: RHEL 9
- ホスト名: nfscl
- IPアドレス: 192.168.11.49
- NFSサーバマウントポイント: /mnt/nfs
設定手順
NFSサーバの設定
1.NFSサーバのインストール
sudo yum install -y nfs-utils
[root@nfssv ~]# yum install -y nfs-utils
サブスクリプション管理リポジトリーを更新しています。
メタデータの期限切れの最終確認: 1:54:05 前の 2024年07月13日 01時58分43秒 に実施 しました。
依存関係が解決しました。
================================================================================
パッケージ Arch バージョン リポジトリー サイズ
================================================================================
インストール:
nfs-utils x86_64 1:2.5.4-25.el9 rhel-9-for-x86_64-baseos-rpms 463 k
依存関係のインストール:
gssproxy x86_64 0.8.4-6.el9 rhel-9-for-x86_64-baseos-rpms 114 k
keyutils x86_64 1.6.3-1.el9 rhel-9-for-x86_64-baseos-rpms 78 k
libev x86_64 4.33-5.el9 rhel-9-for-x86_64-baseos-rpms 56 k
libnfsidmap x86_64 1:2.5.4-25.el9 rhel-9-for-x86_64-baseos-rpms 66 k
libverto-libev x86_64 0.3.2-3.el9 rhel-9-for-x86_64-baseos-rpms 15 k
rpcbind x86_64 1.2.6-7.el9 rhel-9-for-x86_64-baseos-rpms 62 k
sssd-nfs-idmap x86_64 2.9.4-6.el9_4 rhel-9-for-x86_64-baseos-rpms 46 k
トランザクションの概要
================================================================================
インストール 8 パッケージ
ダウンロードサイズの合計: 899 k
インストール後のサイズ: 2.1 M
パッケージのダウンロード:
(1/8): keyutils-1.6.3-1.el9.x86_64.rpm 197 kB/s | 78 kB 00:00
(2/8): libverto-libev-0.3.2-3.el9.x86_64.rpm 27 kB/s | 15 kB 00:00
(3/8): libev-4.33-5.el9.x86_64.rpm 98 kB/s | 56 kB 00:00
(4/8): gssproxy-0.8.4-6.el9.x86_64.rpm 506 kB/s | 114 kB 00:00
(5/8): libnfsidmap-2.5.4-25.el9.x86_64.rpm 260 kB/s | 66 kB 00:00
(6/8): nfs-utils-2.5.4-25.el9.x86_64.rpm 1.5 MB/s | 463 kB 00:00
(7/8): rpcbind-1.2.6-7.el9.x86_64.rpm 196 kB/s | 62 kB 00:00
(8/8): sssd-nfs-idmap-2.9.4-6.el9_4.x86_64.rpm 209 kB/s | 46 kB 00:00
--------------------------------------------------------------------------------
合計 871 kB/s | 899 kB 00:01
トランザクションを確認しています
トランザクションの確認に成功しました。
トランザクションをテストしています
トランザクションのテストに成功しました。
トランザクションを実行しています
準備中 : 1/1
インストール中 : libnfsidmap-1:2.5.4-25.el9.x86_64 1/8
scriptletの実行中: rpcbind-1.2.6-7.el9.x86_64 2/8
インストール中 : rpcbind-1.2.6-7.el9.x86_64 2/8
scriptletの実行中: rpcbind-1.2.6-7.el9.x86_64 2/8
Created symlink /etc/systemd/system/multi-user.target.wants/rpcbind.service → /usr/lib/systemd/system/rpcbind.service.
Created symlink /etc/systemd/system/sockets.target.wants/rpcbind.socket → /usr/lib/systemd/system/rpcbind.socket.
インストール中 : keyutils-1.6.3-1.el9.x86_64 3/8
インストール中 : libev-4.33-5.el9.x86_64 4/8
インストール中 : libverto-libev-0.3.2-3.el9.x86_64 5/8
インストール中 : gssproxy-0.8.4-6.el9.x86_64 6/8
scriptletの実行中: gssproxy-0.8.4-6.el9.x86_64 6/8
scriptletの実行中: nfs-utils-1:2.5.4-25.el9.x86_64 7/8
インストール中 : nfs-utils-1:2.5.4-25.el9.x86_64 7/8
scriptletの実行中: nfs-utils-1:2.5.4-25.el9.x86_64 7/8
インストール中 : sssd-nfs-idmap-2.9.4-6.el9_4.x86_64 8/8
scriptletの実行中: sssd-nfs-idmap-2.9.4-6.el9_4.x86_64 8/8
検証中 : libev-4.33-5.el9.x86_64 1/8
検証中 : libverto-libev-0.3.2-3.el9.x86_64 2/8
検証中 : keyutils-1.6.3-1.el9.x86_64 3/8
検証中 : gssproxy-0.8.4-6.el9.x86_64 4/8
検証中 : libnfsidmap-1:2.5.4-25.el9.x86_64 5/8
検証中 : nfs-utils-1:2.5.4-25.el9.x86_64 6/8
検証中 : rpcbind-1.2.6-7.el9.x86_64 7/8
検証中 : sssd-nfs-idmap-2.9.4-6.el9_4.x86_64 8/8
インストール済みの製品が更新されています。
インストール済み:
gssproxy-0.8.4-6.el9.x86_64 keyutils-1.6.3-1.el9.x86_64
libev-4.33-5.el9.x86_64 libnfsidmap-1:2.5.4-25.el9.x86_64
libverto-libev-0.3.2-3.el9.x86_64 nfs-utils-1:2.5.4-25.el9.x86_64
rpcbind-1.2.6-7.el9.x86_64 sssd-nfs-idmap-2.9.4-6.el9_4.x86_64
完了しました!
2.iostatとnfsstatのインストール
sudo yum install -y sysstat
[root@nfssv nfs]# sudo yum install -y sysstat
サブスクリプション管理リポジトリーを更新しています。
メタデータの期限切れの最終確認: 2:04:04 前の 2024年07月13日 01時58分43秒 に実施 しました。
依存関係が解決しました。
================================================================================
パッケージ Arch バージョン リポジトリー サイズ
================================================================================
インストール:
sysstat x86_64 12.5.4-7.el9 rhel-9-for-x86_64-appstream-rpms 485 k
依存関係のインストール:
lm_sensors-libs x86_64 3.6.0-10.el9 rhel-9-for-x86_64-appstream-rpms 44 k
pcp-conf x86_64 6.2.0-2.el9_4 rhel-9-for-x86_64-appstream-rpms 32 k
pcp-libs x86_64 6.2.0-2.el9_4 rhel-9-for-x86_64-appstream-rpms 637 k
トランザクションの概要
================================================================================
インストール 4 パッケージ
ダウンロードサイズの合計: 1.2 M
インストール後のサイズ: 3.2 M
パッケージのダウンロード:
(1/4): pcp-conf-6.2.0-2.el9_4.x86_64.rpm 112 kB/s | 32 kB 00:00
(2/4): sysstat-12.5.4-7.el9.x86_64.rpm 1.4 MB/s | 485 kB 00:00
(3/4): lm_sensors-libs-3.6.0-10.el9.x86_64.rpm 113 kB/s | 44 kB 00:00
(4/4): pcp-libs-6.2.0-2.el9_4.x86_64.rpm 2.4 MB/s | 637 kB 00:00
--------------------------------------------------------------------------------
合計 2.2 MB/s | 1.2 MB 00:00
トランザクションを確認しています
トランザクションの確認に成功しました。
トランザクションをテストしています
トランザクションのテストに成功しました。
トランザクションを実行しています
準備中 : 1/1
インストール中 : pcp-conf-6.2.0-2.el9_4.x86_64 1/4
インストール中 : pcp-libs-6.2.0-2.el9_4.x86_64 2/4
インストール中 : lm_sensors-libs-3.6.0-10.el9.x86_64 3/4
インストール中 : sysstat-12.5.4-7.el9.x86_64 4/4
scriptletの実行中: sysstat-12.5.4-7.el9.x86_64 4/4
Created symlink /etc/systemd/system/multi-user.target.wants/sysstat.service → /usr/lib/systemd/system/sysstat.service.
Created symlink /etc/systemd/system/sysstat.service.wants/sysstat-collect.timer → /usr/lib/systemd/system/sysstat-collect.timer.
Created symlink /etc/systemd/system/sysstat.service.wants/sysstat-summary.timer → /usr/lib/systemd/system/sysstat-summary.timer.
検証中 : lm_sensors-libs-3.6.0-10.el9.x86_64 1/4
検証中 : sysstat-12.5.4-7.el9.x86_64 2/4
検証中 : pcp-conf-6.2.0-2.el9_4.x86_64 3/4
検証中 : pcp-libs-6.2.0-2.el9_4.x86_64 4/4
インストール済みの製品が更新されています。
インストール済み:
lm_sensors-libs-3.6.0-10.el9.x86_64 pcp-conf-6.2.0-2.el9_4.x86_64
pcp-libs-6.2.0-2.el9_4.x86_64 sysstat-12.5.4-7.el9.x86_64
完了しました!
3.共有ディレクトリの作成と権限設定
sudo mkdir -p /srv/nfs
sudo chown nobody:nobody /srv/nfs
sudo chmod 755 /srv/nfs
4.エクスポート設定
sudo vi /etc/exports
以下の行を追加:
/srv/nfs *(rw,sync,no_root_squash,no_subtree_check)
[root@nfssv etc]# pwd
/etc
[root@nfssv etc]# cat exports
/srv/nfs *(rw,sync,no_root_squash,no_subtree_check)
5.NFSサーバの起動と有効化
sudo systemctl enable nfs-server
sudo systemctl start nfs-server
[root@nfssv etc]# sudo systemctl enable nfs-server
Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /usr/lib/systemd/system/nfs-server.service.
[root@nfssv etc]# sudo systemctl start nfs-server
[root@nfssv etc]# sudo systemctl status nfs-server
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; prese>
Drop-In: /run/systemd/generator/nfs-server.service.d
mqorder-with-mounts.conf
Active: active (exited) since Sat 2024-07-13 03:56:30 JST; 5s ago
Docs: man:rpc.nfsd(8)
man:exportfs(8)
Process: 33946 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SU>
Process: 33947 ExecStart=/usr/sbin/rpc.nfsd (code=exited, status=0/SUCCESS)
Process: 33967 ExecStart=/bin/sh -c if systemctl -q is-active gssproxy; the>
Main PID: 33967 (code=exited, status=0/SUCCESS)
CPU: 14ms
7月 13 03:56:30 nfssv systemd[1]: Starting NFS server and s>
7月 13 03:56:30 nfssv systemd[1]: Finished NFS server and s>
6.NFSバージョンの設定
NFSv3を使用するため、/etc/sysconfig/nfs
に以下の行を追加:
RPCNFSDARGS="-N 4 -N 4.1"
[root@nfssv sysconfig]# pwd
/etc/sysconfig
[root@nfssv sysconfig]# cat nfs
RPCNFSDARGS="-N 4 -N 4.1"
これにより、NFSv3のみを使用するように設定します。
7.ファイアウォールの設定
sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd --permanent --add-service=rpc-bind
sudo firewall-cmd --permanent --add-service=mountd
sudo firewall-cmd --reload
[root@nfssv sysconfig]# sudo firewall-cmd --permanent --add-service=nfs
success
[root@nfssv sysconfig]# sudo firewall-cmd --permanent --add-service=rpc-bind
success
[root@nfssv sysconfig]# sudo firewall-cmd --permanent --add-service=mountd
success
[root@nfssv sysconfig]# sudo firewall-cmd --reload
success
NFSクライアントの設定
1.NFSクライアントのインストール
sudo yum install -y nfs-utils
[root@nfscl ~]# sudo yum install -y nfs-utils
サブスクリプション管理リポジトリーを更新しています。
メタデータの期限切れの最終確認: 1:59:56 前の 2024年07月13日 01時58分43秒 に実施 しました。
依存関係が解決しました。
================================================================================
パッケージ Arch バージョン リポジトリー サイズ
================================================================================
インストール:
nfs-utils x86_64 1:2.5.4-25.el9 rhel-9-for-x86_64-baseos-rpms 463 k
依存関係のインストール:
gssproxy x86_64 0.8.4-6.el9 rhel-9-for-x86_64-baseos-rpms 114 k
keyutils x86_64 1.6.3-1.el9 rhel-9-for-x86_64-baseos-rpms 78 k
libev x86_64 4.33-5.el9 rhel-9-for-x86_64-baseos-rpms 56 k
libnfsidmap x86_64 1:2.5.4-25.el9 rhel-9-for-x86_64-baseos-rpms 66 k
libverto-libev x86_64 0.3.2-3.el9 rhel-9-for-x86_64-baseos-rpms 15 k
rpcbind x86_64 1.2.6-7.el9 rhel-9-for-x86_64-baseos-rpms 62 k
sssd-nfs-idmap x86_64 2.9.4-6.el9_4 rhel-9-for-x86_64-baseos-rpms 46 k
トランザクションの概要
================================================================================
インストール 8 パッケージ
ダウンロードサイズの合計: 899 k
インストール後のサイズ: 2.1 M
パッケージのダウンロード:
(1/8): libverto-libev-0.3.2-3.el9.x86_64.rpm 47 kB/s | 15 kB 00:00
(2/8): keyutils-1.6.3-1.el9.x86_64.rpm 232 kB/s | 78 kB 00:00
(3/8): libev-4.33-5.el9.x86_64.rpm 164 kB/s | 56 kB 00:00
(4/8): gssproxy-0.8.4-6.el9.x86_64.rpm 408 kB/s | 114 kB 00:00
(5/8): libnfsidmap-2.5.4-25.el9.x86_64.rpm 219 kB/s | 66 kB 00:00
(6/8): sssd-nfs-idmap-2.9.4-6.el9_4.x86_64.rpm 217 kB/s | 46 kB 00:00
(7/8): nfs-utils-2.5.4-25.el9.x86_64.rpm 874 kB/s | 463 kB 00:00
(8/8): rpcbind-1.2.6-7.el9.x86_64.rpm 189 kB/s | 62 kB 00:00
--------------------------------------------------------------------------------
合計 965 kB/s | 899 kB 00:00
トランザクションを確認しています
トランザクションの確認に成功しました。
トランザクションをテストしています
トランザクションのテストに成功しました。
トランザクションを実行しています
準備中 : 1/1
インストール中 : libnfsidmap-1:2.5.4-25.el9.x86_64 1/8
scriptletの実行中: rpcbind-1.2.6-7.el9.x86_64 2/8
インストール中 : rpcbind-1.2.6-7.el9.x86_64 2/8
scriptletの実行中: rpcbind-1.2.6-7.el9.x86_64 2/8
Created symlink /etc/systemd/system/multi-user.target.wants/rpcbind.service → /usr/lib/systemd/system/rpcbind.service.
Created symlink /etc/systemd/system/sockets.target.wants/rpcbind.socket → /usr/lib/systemd/system/rpcbind.socket.
インストール中 : keyutils-1.6.3-1.el9.x86_64 3/8
インストール中 : libev-4.33-5.el9.x86_64 4/8
インストール中 : libverto-libev-0.3.2-3.el9.x86_64 5/8
インストール中 : gssproxy-0.8.4-6.el9.x86_64 6/8
scriptletの実行中: gssproxy-0.8.4-6.el9.x86_64 6/8
scriptletの実行中: nfs-utils-1:2.5.4-25.el9.x86_64 7/8
インストール中 : nfs-utils-1:2.5.4-25.el9.x86_64 7/8
scriptletの実行中: nfs-utils-1:2.5.4-25.el9.x86_64 7/8
インストール中 : sssd-nfs-idmap-2.9.4-6.el9_4.x86_64 8/8
scriptletの実行中: sssd-nfs-idmap-2.9.4-6.el9_4.x86_64 8/8
検証中 : libev-4.33-5.el9.x86_64 1/8
検証中 : libverto-libev-0.3.2-3.el9.x86_64 2/8
検証中 : keyutils-1.6.3-1.el9.x86_64 3/8
検証中 : gssproxy-0.8.4-6.el9.x86_64 4/8
検証中 : libnfsidmap-1:2.5.4-25.el9.x86_64 5/8
検証中 : nfs-utils-1:2.5.4-25.el9.x86_64 6/8
検証中 : rpcbind-1.2.6-7.el9.x86_64 7/8
検証中 : sssd-nfs-idmap-2.9.4-6.el9_4.x86_64 8/8
インストール済みの製品が更新されています。
インストール済み:
gssproxy-0.8.4-6.el9.x86_64 keyutils-1.6.3-1.el9.x86_64
libev-4.33-5.el9.x86_64 libnfsidmap-1:2.5.4-25.el9.x86_64
libverto-libev-0.3.2-3.el9.x86_64 nfs-utils-1:2.5.4-25.el9.x86_64
rpcbind-1.2.6-7.el9.x86_64 sssd-nfs-idmap-2.9.4-6.el9_4.x86_64
完了しました!
2.iostatとnfsstatのインストール
sudo yum install -y sysstat
[root@nfscl ~]# sudo yum install -y sysstat
サブスクリプション管理リポジトリーを更新しています。
メタデータの期限切れの最終確認: 2:04:32 前の 2024年07月13日 01時58分43秒 に実施 しました。
依存関係が解決しました。
================================================================================
パッケージ Arch バージョン リポジトリー サイズ
================================================================================
インストール:
sysstat x86_64 12.5.4-7.el9 rhel-9-for-x86_64-appstream-rpms 485 k
依存関係のインストール:
lm_sensors-libs x86_64 3.6.0-10.el9 rhel-9-for-x86_64-appstream-rpms 44 k
pcp-conf x86_64 6.2.0-2.el9_4 rhel-9-for-x86_64-appstream-rpms 32 k
pcp-libs x86_64 6.2.0-2.el9_4 rhel-9-for-x86_64-appstream-rpms 637 k
トランザクションの概要
================================================================================
インストール 4 パッケージ
ダウンロードサイズの合計: 1.2 M
インストール後のサイズ: 3.2 M
パッケージのダウンロード:
(1/4): lm_sensors-libs-3.6.0-10.el9.x86_64.rpm 155 kB/s | 44 kB 00:00
(2/4): pcp-conf-6.2.0-2.el9_4.x86_64.rpm 98 kB/s | 32 kB 00:00
(3/4): sysstat-12.5.4-7.el9.x86_64.rpm 1.4 MB/s | 485 kB 00:00
(4/4): pcp-libs-6.2.0-2.el9_4.x86_64.rpm 2.6 MB/s | 637 kB 00:00
--------------------------------------------------------------------------------
合計 2.3 MB/s | 1.2 MB 00:00
トランザクションを確認しています
トランザクションの確認に成功しました。
トランザクションをテストしています
トランザクションのテストに成功しました。
トランザクションを実行しています
準備中 : 1/1
インストール中 : pcp-conf-6.2.0-2.el9_4.x86_64 1/4
インストール中 : pcp-libs-6.2.0-2.el9_4.x86_64 2/4
インストール中 : lm_sensors-libs-3.6.0-10.el9.x86_64 3/4
インストール中 : sysstat-12.5.4-7.el9.x86_64 4/4
scriptletの実行中: sysstat-12.5.4-7.el9.x86_64 4/4
Created symlink /etc/systemd/system/multi-user.target.wants/sysstat.service → /usr/lib/systemd/system/sysstat.service.
Created symlink /etc/systemd/system/sysstat.service.wants/sysstat-collect.timer → /usr/lib/systemd/system/sysstat-collect.timer.
Created symlink /etc/systemd/system/sysstat.service.wants/sysstat-summary.timer → /usr/lib/systemd/system/sysstat-summary.timer.
検証中 : lm_sensors-libs-3.6.0-10.el9.x86_64 1/4
検証中 : sysstat-12.5.4-7.el9.x86_64 2/4
検証中 : pcp-conf-6.2.0-2.el9_4.x86_64 3/4
検証中 : pcp-libs-6.2.0-2.el9_4.x86_64 4/4
インストール済みの製品が更新されています。
インストール済み:
lm_sensors-libs-3.6.0-10.el9.x86_64 pcp-conf-6.2.0-2.el9_4.x86_64
pcp-libs-6.2.0-2.el9_4.x86_64 sysstat-12.5.4-7.el9.x86_64
完了しました!
3.マウントポイントの作成
sudo mkdir -p /mnt/nfs
[root@nfscl ~]# sudo mkdir -p /mnt/nfs
4.NFSサーバの共有ディレクトリをマウント
sudo mount -t nfs -o vers=3 <NFSサーバのIPアドレス>:/srv/nfs /mnt/nfs
[root@nfscl ~]# sudo mount -t nfs -o vers=3 192.168.11.48:/srv/nfs /mnt/nfs
Created symlink /run/systemd/system/remote-fs.target.wants/rpc-statd.service → /usr/lib/systemd/system/rpc-statd.service.
試験1: 20GBのファイル1個
1.試験用のデータセットの準備
NFSサーバ上の共有ディレクトリに試験用のデータを用意します。
cd /srv/nfs
dd if=/dev/zero of=testfile bs=1M count=1000
[root@nfssv nfs]# dd if=/dev/zero of=testfile3 bs=1M count=20000
20000+0 レコード入力
20000+0 レコード出力
20971520000 bytes (21 GB, 20 GiB) copied, 13.7196 s, 1.5 GB/s
2.iostatとnfsstatの統計情報収集
NFSサーバ上でiostatを実行し、統計情報を収集します。
iostat -dx 5 > iostat_output.txt
NFSクライアント上でnfsstatを実行し、試験前の統計情報を収集します。
nfsstat -c > nfsstat_output_pre.txt
[root@nfscl work]# nfsstat -c > nfsstat_output_pre.txt
[root@nfscl work]# cat nfsstat_output_pre.txt
Client rpc stats:
calls retrans authrefrsh
6 0 6
Client nfs v3:
null getattr setattr lookup access
1 16% 2 33% 0 0% 0 0% 0 0%
readlink read write create mkdir
0 0% 0 0% 0 0% 0 0% 0 0%
symlink mknod remove rmdir rename
0 0% 0 0% 0 0% 0 0% 0 0%
link readdir readdirplus fsstat fsinfo
0 0% 0 0% 0 0% 0 0% 2 33%
pathconf commit
1 16% 0 0%
3.tarによる試験
NFSクライアント上でtarによるデータコピー試験を実施します。
[root@nfscl ~]# (cd /mnt/nfs; tar cvfp - testfile) | (cd /root/work; tar xvfp -)
testfile
testfile
4.iostatとnfsstatの統計情報収集
NFSサーバ上で実行中のiostatを停止します。
NFSクライアント上でnfsstatを実行し、試験後の統計情報を収集します。
nfsstat -c > nfsstat_output_post.txt
試験2: 10MBのファイル2000個・1000個のディレクトリ
1.試験用のデータセットの準備
NFSサーバ上の共有ディレクトリに試験用のデータを用意します。
[root@nfssv work]# cat create_dir.sh
#!/bin/bash
# ベースディレクトリの作成
BASE_DIR="/srv/nfs"
mkdir -p "${BASE_DIR}"
# ディレクトリ構成とファイルの作成
for i in $(seq 1 10); do
for j in $(seq 1 10); do
for k in $(seq 1 1); do
DIR="${BASE_DIR}/dir_${i}/subdir_${j}/subsubdir_${k}"
mkdir -p "${DIR}"
for l in $(seq 1 20); do
FILE="${DIR}/file_${i}_${j}_${k}_${l}.dat"
dd if=/dev/zero of=${FILE} bs=1M count=10
done
done
done
done
echo "ディレクトリ構成およびファイルの作成が完了しました。"
[root@nfssv work]# sh create_dir.sh
10+0 レコード入力
10+0 レコード出力
10485760 bytes (10 MB, 10 MiB) copied, 0.00475464 s, 2.2 GB/s
省略
ディレクトリ構成およびファイルの作成が完了しました。
2.iostatとnfsstatの統計情報収集
NFSサーバ上でiostatを実行し、統計情報を収集します。この試験後まで実行したままとします。
iostat -dx 5 > iostat_output.txt
NFSクライアント上でnfsstatを実行し、試験前の統計情報を収集します。
nfsstat -c > nfsstat_output_pre.txt
3.tarによる試験
NFSクライアント上でtarによるデータコピー試験を実施します。
[root@nfscl work]# (cd /mnt/nfs; tar cvfp - *) | (cd /root/work; tar xvfp -)
dir_1/
dir_1/subdir_1/
dir_1/subdir_1/subsubdir_1/
dir_1/subdir_1/subsubdir_1/file_1_1_1_1.dat
dir_1/
dir_1/subdir_1/
dir_1/subdir_1/subsubdir_1/
dir_1/subdir_1/subsubdir_1/file_1_1_1_1.dat
dir_1/subdir_1/subsubdir_1/file_1_1_1_2.dat
省略
4.iostatとnfsstatの統計情報収集
NFSサーバ上で実行中のiostatを停止します。
NFSクライアント上でnfsstatを実行し、試験後の統計情報を収集します。
nfsstat -c > nfsstat_output_post.txt
結果の解析
1.iostatの解析
iostatの出力からIOPSを計算するには、
iostatコマンドの出力の各列の意味を理解する必要があります。
iostat -dx`の出力は以下のような列から構成されます:
- Device: デバイス名
- rrqm/s: リード要求のマージされた回数
- wrqm/s: ライト要求のマージされた回数
- r/s: 1秒あたりのリード要求数
- w/s: 1秒あたりのライト要求数
- rsec/s: 1秒あたりのリードセクタ数
- wsec/s: 1秒あたりのライトセクタ数
- avgrq-sz: 平均要求サイズ
- avgqu-sz: 平均キューサイズ
- await: I/O操作の平均待ち時間(ミリ秒)
- svctm: I/O操作の平均サービス時間(ミリ秒)
- %util: デバイス使用率(%)
iostatの先頭行には、以下の内容が出力されています。
Device r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s wrqm/s %wrqm w_await wareq-sz d/s dkB/s drqm/s %drqm d_await dareq-sz f/s f_await aqu-sz %util
iostat_output.txt`を確認し、試験中のIOPSを計算します。
grep 'sda' iostat_output.txt | awk '{print $1, $2, $3, $4, $5, $6, $7, $8}'
試験1の場合
[root@nfssv work]grep 'sda' iostat_output.txt | awk '{print $1, $2, $3, $4, $5, $6, $7, $8}'}'
sda 9.97 332.35 0.01 0.08 0.18 33.34 19.73
sda 104.00 13276.80 0.00 0.00 0.39 127.66 0.00
sda 2634.20 337177.60 0.00 0.00 0.53 128.00 1.00
sda 2643.00 337651.20 0.00 0.00 0.56 127.75 2.80
sda 2721.20 348288.00 0.00 0.00 0.55 127.99 0.00
sda 2708.00 346624.00 0.00 0.00 0.57 128.00 0.00
sda 2697.20 345124.00 1.20 0.04 0.57 127.96 0.20
sda 2828.20 362009.60 0.00 0.00 0.53 128.00 0.20
sda 2761.80 353510.40 0.00 0.00 0.54 128.00 0.60
sda 2794.80 357708.80 0.00 0.00 0.52 127.99 0.00
sda 2734.00 349977.60 0.00 0.00 0.51 128.01 0.20
sda 2823.20 361344.00 0.00 0.00 0.51 127.99 0.00
sda 2706.00 346368.00 0.00 0.00 0.55 128.00 0.20
sda 1851.40 236935.20 0.00 0.00 0.54 127.98 0.00
IOPSはリード要求数(r/s)とライト要求数(w/s)の合計です。
iostatは5秒毎の平均値となるため、合計IOPSは170561.00となります。
104.00 + 2635.20 + 2645.80 + 2721.20 + 2708.00 + 2697.40 + 2828.40 + 2762.40 + 2794.80 + 2734.20 + 2823.20 + 2706.20 + 1851.40 = 34112.20
34112.20 * 5 = 170561.00
試験2の場合
[root@nfssv work]grep 'sda' iostat_output.txt | awk '{print $1, $2, $3, $4, $5, $6, $7, $8}'}
sda 17.74 2111.33 0.00 0.01 0.52 119.04 4.97
sda 2486.40 311296.00 0.00 0.00 0.55 125.20 1.20
sda 2418.40 302662.40 0.00 0.00 0.56 125.15 8.80
sda 2458.00 307504.00 0.00 0.00 0.57 125.10 1.40
sda 2669.60 333891.20 0.00 0.00 0.55 125.07 0.00
sda 2723.00 340774.40 0.00 0.00 0.53 125.15 0.00
sda 2704.40 338211.20 0.00 0.00 0.55 125.06 0.00
sda 2730.20 341494.40 0.00 0.00 0.53 125.08 1.80
sda 2753.80 344524.80 0.00 0.00 0.53 125.11 0.00
sda 2683.00 335712.00 0.00 0.00 0.54 125.13 0.00
sda 2705.20 338519.20 0.00 0.00 0.53 125.14 0.20
sda 2688.00 336153.60 0.00 0.00 0.54 125.06 0.00
sda 2765.40 345962.40 0.00 0.00 0.52 125.10 0.20
IOPSはリード要求数(r/s)とライト要求数(w/s)の合計です。
iostatは5秒毎の平均値となるため、合計IOPSは171108.55となります。
22.71 + 0.00 + 0.00 + 0.00 + 0.00 + 2487.60 + 2427.20 + 2459.40 + 2669.60 + 2723.00 + 2704.40 + 2732.00 + 2753.80 + 2683.00 + 2705.40 + 2688.00 + 2765.60 = 34221.71
34221.71 * 5 = 171108.55
- nfsstatの解析
nfsstat_output.txt
を確認し、試験中のNFS操作数を計算します。
nfsstatの結果は増加カウンタのため、試験前後の各項目の値の差分を取ることでリクエスト数が得られます。
試験1の場合
[root@nfscl work]# cat nfsstat_output_pre.txt
Client rpc stats:
calls retrans authrefrsh
26993 0 26994
Client nfs v3:
null getattr setattr lookup access
1 0% 12 0% 0 0% 2 0% 5 0%
readlink read write create mkdir
0 0% 26970 99% 0 0% 0 0% 0 0%
symlink mknod remove rmdir rename
0 0% 0 0% 0 0% 0 0% 0 0%
link readdir readdirplus fsstat fsinfo
0 0% 0 0% 0 0% 0 0% 2 0%
pathconf commit
1 0% 0 0%
[root@nfscl work]# cat nfsstat_output_post.txt
Client rpc stats:
calls retrans authrefrsh
204299 0 204301
Client nfs v3:
null getattr setattr lookup access
1 0% 14 0% 0 0% 3 0% 7 0%
readlink read write create mkdir
0 0% 204271 99% 0 0% 0 0% 0 0%
symlink mknod remove rmdir rename
0 0% 0 0% 0 0% 0 0% 0 0%
link readdir readdirplus fsstat fsinfo
0 0% 0 0% 0 0% 0 0% 2 0%
pathconf commit
1 0% 0 0%
readが 204271 - 26970 = 177301増加していることが分かります。
試験2の場合
[root@nfscl work]# cat nfsstat_output_pre.txt
Client rpc stats:
calls retrans authrefrsh
6 0 6
Client nfs v3:
null getattr setattr lookup access
1 16% 2 33% 0 0% 0 0% 0 0%
readlink read write create mkdir
0 0% 0 0% 0 0% 0 0% 0 0%
symlink mknod remove rmdir rename
0 0% 0 0% 0 0% 0 0% 0 0%
link readdir readdirplus fsstat fsinfo
0 0% 0 0% 0 0% 0 0% 2 33%
pathconf commit
1 16% 0 0%
[root@nfscl work]# cat nfsstat_output_post.txt
Client rpc stats:
calls retrans authrefrsh
196218 0 196216
Client nfs v3:
null getattr setattr lookup access
1 0% 2298 1% 0 0% 2 0% 2211 1%
readlink read write create mkdir
0 0% 191492 97% 0 0% 0 0% 0 0%
symlink mknod remove rmdir rename
0 0% 0 0% 0 0% 0 0% 0 0%
link readdir readdirplus fsstat fsinfo
0 0% 0 0% 211 0% 0 0% 2 0%
pathconf commit
1 0% 0 0%
readが191492 - 0 = 191492増加していることが分かります。
まとめと考察
まとめ
試験1の場合、合計IOPSが170561.00の場合に、NFSv3のreadリクエスト数は177301増加していることが分かりました。つまり、IOPSとnfsstatのreadリクエスト数はほぼ同程度発生していることになります。
試験2の場合、合計IOPSが171108.55の場合に、NFSv3のreadリクエスト数は191492増加していることが分かりました。つまり、IOPSの1.2倍程度nfsstatのreadリクエスト数が発生していることになります。
考察
現時点でのデータに基づいて、IOPSとnfsstatのreadリクエスト数がほぼ同じであることが確認されたため、今回のシチュエーションにおいてはこれらの値がほぼ同じと判断しても良いでしょう。しかし、以下の点に注意が必要です。
・他のワークロードや環境設定で同じ結果が得られるとは限りません。異なるワークロードや設定で追加のテストを行い、一貫性を確認することが重要です。
・キャッシュの影響やNFSオーバーヘッドを考慮し、NFSとディスクI/Oのパフォーマンスを定期的にモニタリングし、必要に応じて調整を行うことが推奨されます。