sched_setscheduler설명하다:
모든 예약은 선점형입니다. 즉, 정적 우선순위가 더 높은 프로세스가 실행 준비가 되면 현재 실행 중인 프로세스가 선점되어 정적 우선순위의 대기 목록으로 돌아갑니다.
하지만우선순위 설정설명하다
이로 인해 매우 낮은 nice 값(+19)은 시스템에 더 높은 우선 순위의 로드가 있을 때 프로세스에 거의 CPU를 제공하지 않고, 높은 nice 값(-20)은 CPU가 필요한 사용자에게 대부분의 CPU를 제공합니다. 응용 프로그램
그렇다면 nice 값을 변경하면 프로그램 실행에 어떤 영향을 미칠까요? RT 스케줄링과 유사합니까(nice 값이 높은 프로그램은 nice 값이 낮은 프로그램을 중단합니다)?
인터넷의 모든 정보는 nice
프로세스의 우선순위를 변경하는 방법과 사용 방법에 관한 것입니다. 우선 순위가 다른 프로세스가 정확히 어떻게 작동하는지 설명하는 링크가 없습니다. 소스코드도 못찾겠어요.
답변1
특정 프로세스가 받는 프로세서 시간의 비율은 해당 프로세스와 실행 가능한 다른 프로세스 간의 상대적 우수성 차이에 의해 결정됩니다.
리눅스완전히 공정한 스케줄러(CFS) 계산무게친절함을 바탕으로 합니다. 무게는 거의 같습니다 1024 / (1.25 ^ nice_value)
. nice 값이 감소할수록 가중치는 기하급수적으로 증가합니다. 프로세스에 할당된 시간 조각은 프로세스의 가중치를 실행 가능한 모든 프로세스의 총 가중치로 나눈 값에 비례합니다. CFS의 구현은 kernel/sched/fair.c
.
중앙에 하나 있어요목표 지연일정 기간입니다. 대상 대기 시간이 짧을수록 상호 작용성이 향상되지만 대상 대기 시간이 감소하면 전환 오버헤드가 증가하여 전체 처리량이 감소합니다.
예를 들어, 목표 대기 시간이 20밀리초이고 실행 가능한 두 프로세스의 성능이 동일하다고 가정하면 각 프로세스는 다른 프로세스에 의해 선점되기 전에 10밀리초 동안 실행됩니다. 10개의 동일한 프로세스가 있는 경우 각 프로세스는 2밀리초 동안 실행됩니다.
이제 두 개의 프로세스를 고려해 보겠습니다. 하나는 niceness 0(기본값)이고 다른 하나는 niceness 5입니다. 해당 가중치 간의 비례적 차이는 약 1/3입니다. 즉, 우선 순위가 높은 프로세스는 약 15밀리초의 시간 조각을 받고 우선 순위가 낮은 프로세스는 5밀리초의 시간 조각을 받습니다.
마지막으로 niceness 값이 각각 5와 10인 두 프로세스를 고려해보세요. 확실히 이 경우 호감도가 더 크긴 하지만,비교적Nice 값의 차이는 이전 예와 동일하므로 동일한 시간 분할 분할이 발생합니다.