バッチジョブを実行する80のLinuxクライアントにNFSを提供するための専用の8コアのLinuxベースのサーバーがあります。クライアントには合計400コアがあるため、通常は400のシングルコアバッチジョブを同時に実行しています。
時折、多くのバッチジョブが同時にI/Oを実行しようとし、サーバー上のnfsdスレッドの数を使い果たします。現在80個あります。バッチジョブでI/Oエラーが発生します(アクセスが拒否されたなど)。そしてベイルアウトします。
Nfsdスレッドの数を増やしたいのですが、知りたいのですが:
理想的な世界では、バッチジョブにはバックオフロジックがあり、80スレッドに固執します。
私は決してNFSdの専門家ではありませんが、すべてのLinuxアプリケーションに適用されるLinuxスレッドのルールを適用する必要があります。ここでのルールは、各スレッドがメモリ内で特定の量のスペースを使用することです。現実的には、このメモリ量は平均的な本番サーバー(2桁のRAM)では非常に小さいため、ほとんど重要ではありません。 NFSd-セマフォなどのアプリケーションでスレッドを実装する方法。セマフォをカウントすることは、スレッド化された状況でロック状態が発生しないようにするための優れた方法です。問題は、セマフォがスレッドを追跡し、カウンターをインクリメントおよびデクリメントして、「フリー」スレッドと「ロック」スレッドを反映することです。使用可能なスレッドにインデックスを付け、実行時間を適切にプロビジョニングするためにロックされたスレッドに対してチェックする必要があります。これは、指数関数的に増加する半効率的な方法で行われます。NFSdで非常に高速が必要な場合は、計算の増加に気付くでしょう。新しいスレッドを登録するための実行時間の2倍にほぼ等しい時間、幸いなことに、これは最初から非常に小さなルックアップ時間値(1つの命令)です(代数を覚えている場合はベースと呼ばれます:)。大きな問題。
長すぎる;合計を読みませんでした-もし私があなたなら、スレッドの数を予想される同時ホストの最大数に制限しますが、実行時間が期待値と一致していることを確認するためにいくつかのテストも行います。おそらくそれほど役に立たないことは承知していますが、予想される使用シナリオなしで適切な構成を分析することは非常に困難です。
また、補足として、Sunの数値を推定すると、2.2 GHZプロセッサは、800スレッドの領域のどこかで問題なく実行できるはずです。これらの数値は本質的に任意であっても、次のように感じます。あなたは私の以前の提案で大丈夫でしょう