
Linux는 프로세스 사용자와 독립적으로 프로세스 실행을 예약하는 것 같습니다. 따라서 한 사용자가 100개의 프로세스를 실행하고 다른 사용자가 1개의 프로세스를 실행하는 경우 평균적으로 첫 번째 사용자는 두 번째 사용자보다 100배 더 많은 CPU 시간을 얻게 됩니다.
사용자별로 CPU 시간의 균형을 맞출 수 있는 가능성이 있습니까? 즉, 이 예에서 두 사용자 모두 CPU 시간의 50%를 얻습니까?
답변1
물론 Linux이기 때문에 기본값은 상대적으로 기본이지만 이를 변경하기 위한 경쟁 도구가 많이 있습니다. 그러나 모든 배포판에서 이들 모두를 사용할 수 있는 것은 아니므로 어떤 것을 사용해야 할지 명확하지 않습니다.
cgroups 시스템에서 CPU 리소스는 가중치 분산 모델을 지원합니다. 여기서 각 그룹에는 가중치에 따른 비율로 사용 가능한 리소스의 일부가 할당됩니다.
systemd 시스템에서 슬라이스 개념은 cgroup 사용과 직접적으로 일치합니다. 읽다man systemd.resource-control
활성화하는 것을 고려해보세요 DefaultCPUAccounting=
. 문제의 각 장치에 동일한 CPU 비율을 적용합니다. 예를 들어, 각 대화형 사용자에게 이 작업을 수행하려면 다음과 같이 입력하세요. /etc/systemd/system/user-.slice.d/resource.conf
[Unit]
Description:Default CPU ratio
Documentation:man:systemd.resource-control
[Slice]
CPUWeight=100
문제의 각 단위가 정확한 비율을 얻는 한 숫자의 정확한 값은 중요하지 않습니다. 또한 전체 시스템 CPU를 나누는 것이 아니라 상위 user.slice에 할당된 CPU를 나누는 것입니다. 대신 서비스 단위를 조정하면 해당 단위는 system.slice에서 벗어납니다.
pam_limit를 사용하는 시스템에서는 로그인한 사용자에 대해 POSIX 리소스 제한을 설정할 수 있습니다. 을 참조하세요 man limits.conf
. 구성 파일은 와 같은 드롭인일 수 있습니다 /etc/security/limits.d/resource.conf
. 실용적인 방법은 nproc
사용자가 수행할 수 있는 최대 작업 수를 설정하는 것입니다. 그 이상은 포크에 실패합니다. 또는 cpu
유혹적인 제한이지만 엄격한 제한을 초과하면 프로세스가 종료될 수 있으며 이는 좋은 사용자 경험이 아닙니다.
그리고 어린이 게임 빨간색 표시등 녹색 표시등의 작업 버전에는 다음이 있습니다.CPU 한도. 이는 간단하게 CPU 사용을 관리하기 위해 SIGSTOP 및 SIGCONT 신호를 보냅니다. 특히 구성 파일이 없고 프로세스를 시작하려면 호출해야 하거나 PID를 제공해야 한다는 점에서 약간 임시적입니다.
답변2
cgroup을 사용하고 요구 사항에 따라 애플리케이션을 할당할 수 있습니다. 한 가지 참조는 다음과 같습니다.cgroups-v2