Linuxでpid_maxとthread-maxの両方が必要なのはなぜですか?

Linuxでpid_maxとthread-maxの両方が必要なのはなぜですか?

/proc/sys/kernel/pid_maxの違いを理解してください/proc/sys/kernel/threads-max。答えに良い説明があります pid_max、ulimit -u、thread_maxの違いを理解する:

/proc/sys/kernel/pid_max特定の時間に実行できるプロセスの最大数とは関係ありません。実際、これはカーネルが割り当てることができる最大の数値プロセス識別子です。

Linuxカーネルでは、プロセスとスレッドは同じです。カーネルはこれを同じ方法で処理します。これらはすべてtask_structデータ構造のスロットを占有します。一般的に言えば、スレッドは他のプロセスとリソースを共有するLinuxのプロセスです(スレッドグループIDも共有します)。 Linuxカーネルのスレッドは、スケジューラに関する限り、概して概念的な構成です。

カーネルがスレッドとプロセスを大幅に区別しないことを理解したので、 /proc/sys/kernel/threads-max実際にはtask_structデータ構造に含まれる要素の最大数を示すことがより理解されます。これは、プロセスリスト(またはタスクリストとも呼ばれる)を含むデータ構造です。

ただし、実際には両方ともホスト上の同時スレッドの最大数を制限します。私が知っているのは、この数字がpid_max合計の最小値になることですthreads-max。それでは、なぜ両方が必要ですか?

私が知っている限り、デフォルトpid_maxは次のとおりです。可能なCPUの数に応じてマシンのデフォルト値はthreads-max以下から派生します。ページ数。しかし、どちらも同じ効果を持っているので、Linuxは2つの最小値である1つの値しか持てませんか?

答え1

これらの設定は同じ効果を持ちません。

  • threads-max同時にインスタンス化できるプロセスの数を制限します。
  • pid_maxプロセスに割り当てられた制限識別子

threads-maxtask_structインスタンスに最終的に割り当てられるメモリ量を制限します。pid_maxpidがローリングされるタイミングを決定します。

制約はpid_maxメモリ消費に影響を与えず(わかっている限り、多数のPIDがテキストとして保存されていない限り)、新しいPIDに達すると検索がより困難になるため、最終的にパフォーマンスに影響を与える可能性がありますpid_max。値が低いpid_maxほど、特定の期間内にPIDを再利用する可能性も高くなります。

関連情報