Nice 수준과 systemctl CPUShares 속성의 차이점

Nice 수준과 systemctl CPUShares 속성의 차이점

제가 아는 한 (틀린 부분이 있으면 정정해주세요)

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-cgtopsystemd-cgls).

답변2

을 읽으면 man systemd-runa가 생성되므로 동적으로 servicea가 생성됩니다. cgroup읽은 후에는 systemd.execNice=지시문이 다음에 적용됩니다.모두따라서 실행 프로세스는 systmdand의 개념과 매우 유사한 방식으로 처리됩니다.Nice=CPUShares=

이 관계에 대한 나의 이해는 그것이 역사와 관련이 있다는 것입니다. nice이는 수십 년 동안 존재해 왔으며 항상 특정 프로세스에 적용되어 왔습니다.

반면 프로세스 그룹의 개념과 아이디어 cgroups는 새로운 개념이지만 동일한 목표를 달성합니다.CPUShares=

역사적 호환성 systemd에 대한 지원을 원합니다 .Nice=

나는 혼란을 피하기 위해 당신이 편안하다고 느끼는 것을 사용하지만 동시에 두 가지를 모두 사용하지는 않습니다. 선호하는 것이 없다면 새로운 CPUShares=개념을 사용하겠습니다.

관련 정보