데스크탑 컨텍스트에서 시스템 스케줄링 관련 옵션 사용 및 이해


14

시스템 서비스 파일에서 다음 예약 관련 옵션을 설정할 수 있습니다 ( systemd.execMan page 에서 잘못된 경우 수정하십시오).

Nice 실행 된 프로세스에 대한 기본 nice 수준 (스케줄 우선 순위)을 설정합니다. -20 (가장 높은 우선 순위)에서 19 (가장 낮은 우선 순위) 사이의 정수를 사용합니다. 자세한 내용은 setpriority (2) 를 참조하십시오.

친숙한 멋진 수준입니다. 최근 리눅스 커널의 'autogroup'기능으로 인해 그 효과가 다소 '변질'된 것 같습니다. 따라서 아래 옵션은 데스크탑 환경에서 프로세스가 훌륭하게 작동하도록 설정하고 싶을 수도 있습니다.

CPUSchedulingPolicy 실행 된 프로세스에 대한 CPU 스케줄링 정책을 설정합니다. 배치, 유휴, fifo 또는 rr 중 하나를 사용합니다. 자세한 내용은 sched_setscheduler (2) 를 참조하십시오.

CPUSchedulingPriority 실행 된 프로세스에 대한 CPU 스케줄링 우선 순위를 설정합니다. 사용 가능한 우선 순위 범위는 선택한 CPU 예약 정책에 따라 다릅니다 (위 참조). 실시간 스케줄링 정책의 경우 1 (가장 낮은 우선 순위)에서 99 (가장 높은 우선 순위) 사이의 정수를 사용할 수 있습니다. 자세한 내용은 sched_setscheduler (2) 를 참조하십시오.

CPUSchedulingResetOnFork 부울 인수를 사용합니다. true 인 경우, 높은 CPU 스케줄링 우선 순위 및 정책은 실행 된 프로세스가 분기 될 때 재설정되므로 하위 프로세스로 누출 될 수 없습니다. 자세한 내용은 sched_setscheduler (2) 를 참조하십시오. 기본값은 false입니다.

마지막 옵션을 이해합니다. 예약 정책을 선택한 다음 해당 정책에 우선 순위를 지정할 수 있다는 처음 두 개에 대한 설명에서 수집합니다. 어떤 종류의 작업을 위해 무엇을 선택해야하는지 명확하지 않습니다. 예를 들어, 백업 작업에 대해 '유휴'를 선택하는 것이 안전합니까 (중복 제거 때문에 상대적으로 CPU를 많이 사용함) 아니면 다른 것이 더 적합합니까?

일반적으로 각 정책의 우선 순위와 특정 목적에 대한 적합성을 이해하기 위해 각 정책을 이해할 수 있습니다. 또한 좋은 수준과의 상호 작용이 흥미 롭습니다.

CPU 스케줄링 옆에는 IO 스케줄링이 있습니다. 나는 이것이 ionice(잘못되면 나를 수정하십시오)에 해당한다고 생각합니다 .

IOSchedulingClass 실행 된 프로세스에 대한 I / O 스케줄링 클래스를 설정합니다. 0에서 3 사이의 정수 또는 문자열 없음, 실시간, 최선의 노력 또는 유휴 중 하나를 취합니다. 자세한 내용은 ioprio_set (2) 를 참조하십시오.

IOSchedulingPriority 실행 된 프로세스에 대한 I / O 스케줄링 우선 순위를 설정합니다. 0 (가장 높은 우선 순위)에서 7 (가장 낮은 우선 순위) 사이의 정수를 사용합니다. 사용 가능한 우선 순위는 선택한 I / O 스케줄링 클래스에 따라 다릅니다 (위 참조). 자세한 내용은 ioprio_set (2) 를 참조하십시오.

우리는 여기서 CPU 스케줄링과 같은 구조를 봅니다. 나는 같은 종류의 정보를 찾고 있습니다.

모든 '예약'옵션의 경우, 참조 된 매뉴얼 페이지는 대부분 기술적으로 기울어 진 데스크탑 사용자의 관점으로 내용을 번역 할 때 명확하지 않습니다.


2
어떤 특정 성능 문제를 해결하려고합니까? 무언가가 너무 느리게 실행되거나 너무 느리게 실행됩니까? 백그라운드에서 백업을 실행하고 데스크톱으로 systemd와 함께 Ubuntu 16.04를 사용하며 상대 우선 순위와 관련된 성능 문제가 없습니다.
Mark Stosberg

@MarkStosberg 듀얼 코어 시스템에서 포 그라운드 계산 작업이 인터페이스에 응답하지 않는 동안 백그라운드 백업 작업이 실행되면서 문제가 발생했습니다. 그런 다음 백업 스크립트에 Nice 옵션을 추가하고 동시에 다른 옵션을 보았습니다. 백업으로 인해 발생한 문제 나 앞으로 발생할 다른 문제와 관련이있을 수 있습니다. 그래서 구체적인 옵션과 관련이없는 다른 옵션에 대해 더 배우고 싶습니다.
equaeghe

각 문서는 관심이있는 경우 더 많은 문서를 찾을 수있는 매뉴얼 페이지를 참조합니다. ioprio_set (2) 및 sched_setscheduler (2)에 대한 참조 매뉴얼 페이지를 읽으면 질문에 대답하는 데 도움이됩니까?
Mark Stosberg

내 질문에 표시된대로 @MarkStosberg 아니요. 매뉴얼 페이지는 나쁘지 않지만, 어떻게해야할지 결정하는 데 도움이되지는 않습니다 (현재 좋은 값을 조정하는 것이 안전하고 옳은 일입니까?). 경험이 풍부한 사용자가 구체적인 옵션을 제시하고 이러한 구체적인 경우에 자동 그룹이 미치는 영향을 알 수있는 옵션을 사용하는 사람들의 대답은 내가 바라는 것입니다.
equaeghe

방금 거의 같은 맥락에서 이러한 지시문을 우연히 발견했습니다 (백그라운드 백업으로 인해 지연이 발생 함). man sched (7) 가 다른 두 매뉴얼 페이지에 대해 훨씬 더 포괄적 인 설명을 가지고 있음을 발견했습니다 . ( nice값이 적용될 때도 언급 ).
Wisperwind

답변:


5

CPU 스케줄링 {Policy | Priority}

링크는 또는 ( "실시간") 작업에 CPUSchedulingPriority대해서만 설정해야한다는 것을 알려줍니다 . 서비스에 대한 실시간 예약을 원하지 않습니다.fiforr

CPUSchedulingPolicy=other 기본값입니다.

그 나뭇잎 batchidle. 이들의 차이점은 동시에 CPU를 소비하는 유휴 우선 순위 작업이 여러 개인 경우에만 해당됩니다. 이론적으로 batch처리 시간이 길어집니다 (대기 시간이 길어짐). 그러나 큰 승리는 아니므로이 경우에는 실제로 관련이 없습니다.

idle다른 것이 CPU를 원한다면 말 그대로 굶어 죽습니다. CPU 우선 순위는 단일 코어가있는 기존 UNIX 시스템의 경우보다 중요하지 않습니다. 에 nice의지하기 전에 예를 들어 멋진 레벨 10 또는 14로 시작하는 것이 idle좋습니다. 다음 섹션을 참조하십시오.

그러나 대부분의 데스크톱은 대부분 유휴 상태입니다. 백그라운드 작업을 선점하는 CPU 호그가있는 경우 호그가 CPU 중 하나만 사용하는 것이 일반적입니다. 그런 점을 염두에두고 idle일반적인 데스크톱 또는 랩톱 환경에서 사용 하는 것은 그리 위험하지 않습니다 . 약 15 와트 이하 의 Atom / Celeron / ARM CPU가없는 한 ; 그런 다음 좀 더 자세히 살펴보고 싶습니다.

커널 '자동 그룹'기능으로 멋진 수준을 '전복'합니까?

네.

자동 그룹화는 약간 이상합니다. 의 작성자는 systemd휴리스틱 을 좋아하지 않았으며 심지어 데스크톱에서도 마찬가지였습니다. 자동 그룹화 비활성화를 테스트하려는 경우 sysctl kernel.sched_autogroup_enabled 을로 설정할 수 있습니다 0. 영구 구성에서 sysctl을 설정하고 다시 부팅하여 모든 자동 그룹을 제거하여 테스트하는 것이 가장 좋습니다.

그런 다음 아무 문제없이 서비스 수준을 향상시킬 수 있어야합니다. 최소한 현재 버전의 systemd-다음 섹션을 참조하십시오.

예를 들어 nice 레벨 10은 Linux CPU 스케줄러에서 각 스레드의 가중치를 약 10 %로 줄입니다. 레벨 14가 5 % 미만입니다. (링크 : 전체 수식 )

부록 : 체계적인 cgroup에 의해 좋은 수준의 '전복'입니까?

서비스별로 CPU 제어를 활성화하지 않고 활성화 할 수 없으면 현재 DefaultCPUAccounting= 설정은 기본적으로 해제되어 있습니다. 따라서 괜찮을 것입니다. 현재 문서에서이를 확인할 수 있습니다.man systemd-system.conf

당 서비스 CPU 제어도 할 때 활성화된다는 점에 유의해야합니다 어떤 서비스 세트가 CPUAccounting / CPUWeight / StartupCPUWeight / CPUShares / StartupCPUShares합니다.

다음 블로그 추출은 오래되었지만 여전히 온라인 상태입니다. 이후 기본 동작이 변경되었으며 이에 따라 참조 문서가 업데이트되었습니다.

커널에서 CPU 컨트롤러가 활성화되어 있으면 systemd는 각 서비스를 시작할 때 cgroup을 만듭니다. 더 이상의 구성이 없으면 이미 한 가지 좋은 효과가 있습니다. 시스템 시스템에서는 모든 시스템 서비스가 구성되는 프로세스 수에 관계없이 일정한 양의 CPU를 얻게됩니다. 즉, 웹 서버에서 MySQL은 Apache와 거의 같은 양의 CPU를 얻습니다. 후자는 1000 개의 CGI 스크립트 프로세스로 구성되어 있지만 전자는 몇 가지 작업자 작업 만 가능합니다. (이 동작은 해제 할 수 있습니다. /etc/systemd/system.conf의 DefaultControllers =를 참조하십시오.)

이 기본값 외에도 CPUShares = 설정으로 서비스가 얻는 CPU 공유를 명시 적으로 구성 할 수 있습니다. 기본값은 1024입니다.이 숫자를 늘리면 1024에서 변경되지 않은 CPU보다 더 많은 CPU를 서비스에 할당합니다.

http://0pointer.de/blog/projects/resources.html


-3

일반적인 성능 조정 조언은 "최적화하지 않음, 벤치 마크"입니다.

일반적인 조언에 관심을두기보다는 개선에 관심이 있고 특정 성능 문제 가있는 것으로 벤치마킹 된 특정 사례부터 시작하십시오 . 데이터가 올바른 지시에 따라 조정하도록합니다. 데이터를 사용하면 프로세스의 우선 순위가 나쁘거나 CPU를 사용 중이거나 다른 문제가 있는지 분명 할 수 있습니다.

최신 데스크톱은 튜닝 없이도 빠르게 작동 할 수 있습니다.


3
죄송하지만 질문에 대한 답변이 아닙니다. 요점은 실제로 효과를 이해하지 못하면 사물을 시험해 보는 것이 어렵다는 것입니다. 그리고이 질문은 현대 데스크탑의 성능 문제에 의해 유발되었습니다.
equaeghe

1
옵션을 시도하는 데 몇 분 밖에 걸리지 않습니다. 기준 벤치 마크와 성능 목표가있는 경우 시도한 옵션이 원하는 방향으로 이동하는지 쉽게 확인할 수 있습니다.
Mark Stosberg

@equaeghe, 그들이 무엇을 알지 못하고 임의의 노브를 들으면 문제가 해결되지 않습니다.
vonbrand

충분한 조언이지만 대답은 아닙니다. 이것은 주석이어야합니다. 때로는 "이것이 너무 느리다"는 느낌이 행동을 자극하기에 충분한 기준이되기도합니다. 예를 들어 사용 systemd-analyzeblameplot나는 분 이상에 의해 이전 RPI에 부팅 시간을 줄일 수 있었다. 물론 문제를 분석 할 때는 "최적화"를 조기에 시작하는 대신 측정해야합니다.
0xC0000022L
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.