잘 작동합니까?


20

sched_setscheduler 는 말합니다 :

모든 스케줄링은 선제 적입니다. 정적 우선 순위가 높은 프로세스를 실행할 준비가되면 현재 실행중인 프로세스가 선점되고 정적 우선 순위 레벨의 대기 목록으로 리턴됩니다.

우선 순위가 말하는 동안

이로 인해 시스템에 우선 순위가 높은 다른로드가있을 때마다 매우 낮은 nice 값 (+19)이 프로세스에 거의 CPU를 제공하지 않고 높은 nice 값 (-20)이 필요한 대부분의 CPU를 필요한 응용 프로그램에 전달합니다.

그렇다면 좋은 가치를 바꾸는 것이 어떻게 프로그램의 실행에 영향을 미칠까요? RT 스케줄링과 비슷합니까 (좋은 값을 가진 프로그램이 낮은 값을 가진 프로그램을 중단시킬 것입니까)?


인터넷에 대한 모든 정보는 사용 nice방법 및 프로세스 우선 순위를 변경하는 방법입니다. 다른 우선 순위로 정확히 처리하는 방법을 설명하는 링크가 없습니다. 소스 코드조차 찾을 수 없었습니다.

답변:


24

특정 프로세스가 수신하는 프로세서 시간의 비율은 프로세스와 다른 실행 가능한 프로세스 간의 상대적 차이에 따라 결정됩니다.

CFS ( Linux Completely Fair Scheduler ) 는 니스를 기반으로 가중치 를 계산합니다 . 무게는 대략적으로 같습니다 1024 / (1.25 ^ nice_value). 좋은 값이 감소함에 따라 가중치가 기하 급수적으로 증가합니다. 프로세스에 할당 된 타임 슬라이스는 프로세스의 가중치를 모든 실행 가능한 프로세스의 총 가중치로 나눈 비율에 비례합니다. CFS의 구현은에 kernel/sched/fair.c있습니다.

CFS에는 일정 기간 동안 대상 대기 시간이 있습니다. 대상 대기 시간이 짧을수록 대화 형 작업이 향상되지만 대상 대기 시간이 줄어들면 전환 오버 헤드가 증가하여 전체 처리량이 감소합니다.

예를 들어 목표 대기 시간이 20 밀리 초이고 동일한 실행 가능한 두 개의 실행 가능한 프로세스가 주어지면 두 프로세스 모두 다른 프로세스에 유리하게 선점되기 전에 각각 10 밀리 초 동안 실행됩니다. 10 개의 동일한 niceness 프로세스가있는 경우 각 프로세스는 각각 2 밀리 초 동안 실행됩니다.

이제는 niceness가 0 (기본값)이고 다른 프로세스가 nices 인 5 개의 두 프로세스를 고려하십시오. 해당 가중치 간의 비례 차이는 약 1/3이며, 우선 순위가 높은 프로세스는 약 15 밀리 초의 타임 슬라이스를받습니다. 우선 순위가 낮은 프로세스는 5 밀리 초의 타임 슬라이스를 수신합니다.

마지막으로 niceness 값이 각각 5와 10 인 두 개의 프로세스를 고려하십시오. 이 경우 절대 니스가 더 크지 만 , 니스 값 간의 상대적인 차이는 이전 예제와 동일하므로 시간 분할 분할이 동일합니다.


내가 찾던 것. 감사! 나중에 나는 이 기사 를 발견 했지만 모든 것을 자세히 설명했지만 방금 쓴 것은 아닙니다.
BЈовић

이해할 수없는 것이 있습니다. vruntime의 역할은 무엇입니까?
가을 서퍼

@Surferonthefall vruntime은 할당 된 많은 CPU 시간 프로세스를 추적하는 CFS 내부 메커니즘입니다. 이 질문은 사용자 공간에 보이는 훌륭한 가치에 관한 것입니다. CFS 내부에 대한 질문이 있고 다른 곳 에서 답변을 찾을 수없는 경우 새로운 질문을하십시오
Thomas Nyman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.