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는 둘 중 최소값인 하나의 값만 가질 수는 없습니까?

답변1

이러한 설정은 동일한 효과를 갖지 않습니다.

  • threads-max동시에 인스턴스화할 수 있는 프로세스 수를 제한합니다.
  • pid_max프로세스에 할당된 제한 식별자

threads-maxtask_struct인스턴스 에 궁극적으로 할당되는 메모리 양을 제한합니다 . pid_maxpid가 롤링되는 시기를 결정합니다.

제약 조건은 pid_max메모리 소비에 영향을 미치지 않으며(내가 아는 한, 많은 수의 PID가 텍스트로 저장되지 않는 한) 새로운 PID에 도달하면 찾기가 더 어려워지기 때문에 결국 성능에 영향을 미칠 수 있습니다 pid_max. 값이 낮을 pid_max수록 특정 기간 내에 PID 재사용 가능성도 높아집니다.

관련 정보