제가 아는 한 (틀린 부분이 있으면 정정해주세요)
systemctl set-property ... CPUShares=some_value
전체 cgroup 장치에 대한 CPU 시간을 제한합니다. 장치 내 프로세스의 CPU 시간을 제한하려면 다음 명령을 사용하여 프로세스를 실행할 수 있습니다.
systemd-run ... nice=some_value
프로세스에 대한 좋은 값의 개념과 프로세스 집합에 대한 CPUShares 값 사이에 근본적인 차이가 있는지 궁금합니다. 프로세스의 CPUShares를 제한하거나 cgroup 유닛의 nice-value를 설정할 수 있습니까? 우리는 언제 이것들 중 하나를 하고 싶나요?
답변1
리눅스에서는,
- 좋은 가치가 적용됩니다일, 이는 프로세스 또는 스레드입니다(명확한 내용은 링크 참조).
- "CPU 공유" 값은 다음에 적용됩니다.태스크 포스(예:그룹).
기본 비실시간 Linux 작업 스케줄러(CFQ)는 여러 cgroup 간에 CPU 시간을 "공정하게" 분배합니다. 각 cgroup의 값(기본값은 1024)을 사용하여 cpu.shares
다른 cgroup의 값에 비해 cpu.shares
각 cgroup에 더 많거나 적은 CPU 시간(더 많은 공유 = 더 많은 CPU 대역폭)을 부여합니다 .
지금,각 cgroup 내에서, 작업의 좋은 값은 다른 작업의 좋은 값에 비해 더 많거나 적은 CPU 시간을 부여하는 데 사용됩니다.동일한 cgroup 내에서.
예약(7)설명하다:
그룹 예약에서 스레드의 nice 값은 동일한 작업 그룹의 다른 스레드와 관련된 예약 결정에만 영향을 미칩니다.
참고 사항:
- ㅏ태스크 포스cgroup 또는 autogroup입니다(참조:예약(7)),
- Linux 배포판에서는 자동 그룹화가 기본적으로 비활성화되어 있을 수 있습니다. 확인하십시오
cat /proc/sys/kernel/sched_autogroup_enabled
. - 작업 그룹은 계층적 관계(cgroup 내의 cgroup)를 가질 수 있습니다.추측하다CFQ 작업 스케줄러는 CPU 시간 할당을 고려합니다.
- "최근" 배포판은 기본적으로 systemd를 사용하여 작업을 cgroup에 넣을 수 있습니다(try
systemd-cgtop
및systemd-cgls
).
답변2
을 읽으면 man systemd-run
a가 생성되므로 동적으로 service
a가 생성됩니다. cgroup
읽은 후에는 systemd.exec
이 Nice=
지시문이 다음에 적용됩니다.모두따라서 실행 프로세스는 systmd
and의 개념과 매우 유사한 방식으로 처리됩니다.Nice=
CPUShares=
이 관계에 대한 나의 이해는 그것이 역사와 관련이 있다는 것입니다. nice
이는 수십 년 동안 존재해 왔으며 항상 특정 프로세스에 적용되어 왔습니다.
반면 프로세스 그룹의 개념과 아이디어 cgroups
는 새로운 개념이지만 동일한 목표를 달성합니다.CPUShares=
역사적 호환성 systemd
에 대한 지원을 원합니다 .Nice=
나는 혼란을 피하기 위해 당신이 편안하다고 느끼는 것을 사용하지만 동시에 두 가지를 모두 사용하지는 않습니다. 선호하는 것이 없다면 새로운 CPUShares=
개념을 사용하겠습니다.