AIX マウント NFS の書き込み効率が低い場合の解決策

AIX マウント NFS の書き込み効率が低い場合の解決策

NFSが提供するサービス

マウント: サーバー上で /usr/sbin/rpc.mountd サーボ プロセスを有効にし、クライアント上でマウント コマンドを使用します。マウントされたサーボ プロセスは、クライアントの要求に応答する RPC です。

リモート ファイル アクセス: サーバーで /usr/sbin/nfsd を有効にし、クライアントで /usr/sbin/biod を有効にすると、クライアントのファイル要求が処理されます。しかし、クライアント上のユーザーがサーバー上のファイルを読み書きしようとすると、biod サーボ プロセスがこの要求をサーバーに送信します。

ブート パラメータ: サーバー上の /usr/sbin/rpc.bootparamd デーモンを有効にして、ディスクレス SunOS クライアントのブート パラメータを提供します。

PC認証: サーバー側で/usr/sbin/rpc.pcnfsdを起動してPC-NFSのユーザー認証サービスを提供します。

NFS サービスはステートレスです。つまり、NFS 転送はアトミックであり、1 回の NFS 転送は 1 回の完全なファイル操作に対応します。

背景:

Linux は NFS のサーバー側、AIX は NFS のクライアント側です (また、クライアント側としても Linux を使用した比較テストもあります)。

1. NFS に対応する基盤デバイスはフラッシュ カードであり、ローカル テスト I/O 書き込みパフォーマンスは 2GB/秒に達します。

2. サーバーはギガビット ネットワーク カードであり、FTP テスト転送は 100MB/秒に達します。

3. AIX は NFS を正常にマウントしますが、dd テストの書き込み速度はわずか 10MB/秒です。

4. Linux は NFS を正常にマウントし、同じ dd テストの書き込み速度は 100MB/秒に達します。

注: 上記の速度は主に桁違いを反映しており、実際のテストでは若干の偏差が生じます。

特定の環境:

  • NFS サーバー: RHEL 6.8
  • NFS クライアント: AIX 6.1、RHEL 6.8

マウントパラメータは MOS ドキュメントに従って設定されます。

NAS デバイス上の NFS で使用する場合の RAC データベースおよび Clusterware の Oracle ファイルのマウント オプション (ドキュメント ID 359515.1)

現時点での実際のニーズに応じて、設定する必要があるパラメータを調整します。

--MOS 推奨事項 (AIX):
cio、rw、bg、ハード、nointr、rsize=32768、
wsize=32768、プロトコル=tcp、noac、
vers=3、timeo=600

--MOS 推奨事項 (Linux):
rw、bg、ハード、nointr、rsize=32768、
wsize=32768、tcp、actimeo=0、
vers=3、timeo=600

AIX NFS マウント パラメータ:

マウント -o cio、rw、bg、hard、nointr、rsize=32768、wsize=32768、proto=tcp、noac、vers=3、timeo=600 10.xx.xx.212:/xtts /xtts

直接マウントすると次のエラーが表示されます。

# マウント -o cio,rw,bg,hard,nointr,rsize=32768,wsize=32768,proto=tcp,noac,vers=3,timeo=600 10.xx.xx.212:/xtts /xtts
マウント: 1831-008 諦める:
10.xx.xx.212:/xtts
vmount: 操作は許可されていません。

情報をチェックして、AIX で追加のネットワーク パラメータを設定する必要があることを確認します。

# nfso -p -o nfs_use_reserved_ports=1

再度マウントを試行してください:

マウント -o cio、rw、bg、hard、nointr、rsize=32768、wsize=32768、proto=tcp、noac、vers=3、timeo=600 10.xx.xx.212:/xtts /xtts

dd テストの速度は非常に不十分で、わずか 10MB/秒です。

--テストパフォーマンス; AIX NFS
# 時間 dd if=/dev/zero of=/xtts/test-write bs=8192 count=102400
102400+0 件のレコードがあります。
102400+0 レコードが出力されました。

実数 0分43秒20
ユーザー 0m0.79s
システム 0分5.28秒
# 時間 dd if=/xtts/test-write of=/dev/null bs=8192 count=102400
102400+0 件のレコードがあります。
102400+0 レコードが出力されました。

実数 0分30秒86
ユーザー 0分0.84秒
システム 0分5.88秒

すべてのパラメータは、実際のニーズと MOS の推奨事項に従って設定されます。何か質問はありますか?

  • cio パラメータ テストを削除してみましたが、結果はほとんど変わりませんでした。
  • ハード パラメータ テストを削除してみましたが、結果はほとんど変わりませんでした。
  • プロトコルを TCP から UDP に変更してみましたが、結果はほとんど変わりませんでした。

ほぼすべての可能なパラメータを試しましたが、結果は理想的ではありませんでした。私たちはすぐにリソースを調整し、ホスト エンジニアを見つけて問題のトラブルシューティングを行う準備ができました。

この瞬間、突然インスピレーションが湧き、ある可能性を思いつきました。 AIX 上の NFS が単一プロセスの I/O スループットを制限する可能性はありますか?この推測に基づいて、並列テストを実行します。

5 つのウィンドウを開き、同時に dd を起動します。

時間 dd if=/dev/zero of=/xtts/test-write1 bs=8192 カウント=102400
時間 dd if=/dev/zero of=/xtts/test-write2 bs=8192 カウント=102400
時間 dd if=/dev/zero of=/xtts/test-write3 bs=8192 カウント=102400
時間 dd if=/dev/zero of=/xtts/test-write4 bs=8192 カウント=102400
時間 dd if=/dev/zero of=/xtts/test-write5 bs=8192 カウント=102400

5 つのウィンドウがすべて同時に 55 秒で完了したことに驚きました。これは 800M*5=4000M に相当し、すべて 55 秒で完了し、1 秒あたり 72MB/秒に達しました。この並列アプローチにより、効率を向上させるニーズが満たされました。

また、テストのために複数のウィンドウを開き続ける限り、基本的に 100 MB/秒 (ギガビット ネットワーク カードによって制限されます) のネットワーク制限に達する可能性があるようです。

P.S. 別の Linux サーバーにマウントされた同じ NFS をテストすると、並列化なしで dd 書き込み速度が 100MB/秒に達することがあります。これも以前私の考えに影響を与えた要因でした。
Linux NFS マウント パラメータ:

# マウント -o rw、bg、hard、nointr、rsize=32768、wsize=32768、tcp、actimeo=0、vers=3、timeo=600 10.xx.xx.212:/xtts /xtts

Linux NFS テスト結果:

--パフォーマンステスト; Linux NFS
# dd if=/dev/zero of=/xtts/test-write bs=8192 count=102400
102400+0件のレコード
102400+0 レコードが出力されました
838860800 バイト (839 MB) をコピーしました、6.02451 秒、139 MB/秒
# dd if=/xtts/test-write of=/dev/null bs=8192 count=102400
102400+0件のレコード
102400+0 レコードが出力されました
838860800 バイト (839 MB) をコピーしました、8.55925 秒、98.0 MB/秒

私は AIX に精通しておらず、基礎となる原理については詳しく調べませんでした。当初、問題解決の過程で最も混乱したのは、Linux をクライアントとして使用した場合に、dd テストが並列化なしで 100MB/秒の速度に達することができる理由であり、これが固有の考え方に陥らせました。この事件から私が学んだ教訓は、突破口を開くためには時には既成概念にとらわれずに考えなければならないということだ。

最後に、フラッシュ メモリ カードの I/O 機能に対する私の感銘を表すために、NFS サーバー側でのローカル テストの結果も投稿しました。

# dd if=/dev/zero of=/dev/test-write2 bs=8192 count=1024000
1024000+0件のレコード
1024000+0 レコードが出力されました
8388608000 バイト (8.4 GB) をコピーしました、4.19912 秒、2.0 GB/秒

要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。

以下もご興味があるかもしれません:
  • Linux システム間で NFS ネットワーク ファイル システムをマウントする方法
  • MacOS は NFS をマウントできません 操作が許可されていません エラーの解決方法
  • Centos7 のインストールと NFS サービスの構成およびマウントのチュートリアル (推奨)

<<:  MySQL 5.7 のユニオンオール使用法のブラックテクノロジーを 5 分で学ぶ

>>:  Vueでデータを読み取るためにこれを悪用しないでください

推薦する

Vue 要素と Nuxt の使用に関するヒントを共有する

1. 要素時間選択提出フォーマット変換例えば 2018年9月7日金曜日 00:00:00 GMT+0...

2 つの MySQL ユーザー削除ステートメント (delete user と drop user) の違い

ヒント: MySQL では、ユーザーの作成と削除が頻繁に必要になります。ユーザーを作成するときは、通...

Vueスロットの使用の詳細

目次1. スロットを使用する理由1.1 スロット1.2 コンポーネントのスロット1.3 例2. この...

Docker+Jenkinsを使用して自動的にビルドおよびデプロイする

この記事では、Docker+Jenkins の自動ビルドデプロイメントを紹介し、皆さんと共有します。...

WeChatミニプログラムページとコンポーネント間の情報伝達と機能呼び出し

今回は、私自身の開発経験を踏まえて、以下の観点で関連内容を解説します。ページからコンポーネントにデー...

純粋な HTML ページを送信し、パラメータを渡し、ID を確認する方法

プロジェクトにはアンケートが必要ですが、クライアントはアンケートのタイトルが純粋なHTMLタグでなけ...

CentOS7にJDK8をrpmモードでインストールする

CentOS 7が正常にインストールされると、OpenJDKのJREがデフォルトでインストールされて...

Linuxのip netnsコマンドを使用してネットワークポートを分離し、IPアドレスを設定します。

1. 分離マーカーを追加します。 ip netns add fd 2. 指定されたネットワーク カ...

MySQL PXC は IST 送信のみで新しいノードを構築します (推奨)

需要シナリオ: 既存の PXC 環境には大量のデータがあります。新しく購入したサーバーをこのクラスタ...

JDBC および MySQL 一時テーブルスペースの詳細な分析

背景一時テーブルスペースは、データベースのソート操作を管理し、一時テーブルや中間ソート結果などの一時...

時間範囲効果を実現するためのJavaScript

この記事では、時間範囲効果を実現するためのJavaScriptの具体的なコードを参考までに紹介します...

Linux リモート管理と sshd サービス検証の知識ポイントの詳細な説明

1. SSHリモート管理SSH の定義SSH (Secure Shell) は、主にキャラクタ イン...

Linux SSHポートを転送する3つの方法

ssh は私が最も頻繁に使用する 2 つのコマンドライン ツールのうちの 1 つです (もう 1 つ...

element.style インライン スタイルを変更する方法のチュートリアル

序文上記の Web ページ スタイルを記述しているときに、スタイルの値をどのように変更しても、ページ...

VMware 仮想マシンのインストール Linux システムのグラフィック チュートリアル

この記事では、LinuxシステムのVMwareインストールの具体的な手順を参考までに紹介します。具体...