0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NFSv3とディスクI/Oの相関関係の検証

Last updated at Posted at 2024-07-12

背景

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
  1. 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のパフォーマンスを定期的にモニタリングし、必要に応じて調整を行うことが推奨されます。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?