2014-12-11 3 views
0

현재 리눅스 작업 스케줄러 동작에 대한 연구를하고 있습니다. 나는 몇 가지 질문이 멀티 코어 아키텍처의 경우 리눅스의 작업 스케줄러 동작

  1. 을 clarified-해야 할, 스케줄러 스레드 (커널 스레드)는 코어 당 실행 또는 중앙 커널 스케줄러는 모든 예약 작업을 처리하는 전용 코어에서 실행 중입니다.

  2. 일반적인 스케줄러 틱 (인터럽트)은 얼마나 자주 발생합니까? 특정 우선 순위의 작업 (스레드)에 대한 일반적인 시간 슬라이스는 무엇입니까?

  3. 현재 작업이 시간 조각을 완료하지 않더라도 실행 대기열에서 다른 작업을 실행해야합니까?

문제의 부분적인 대답이 (Dervin은 썽크-감사) : (프로세스의 기본 스케줄러입니다)

CFS는 sysctl_sched_min_granularity 및 sysctl_sched_latency (사이 사이에 항상 고정 된 timeslice.This의 타임 슬라이스가 없습니다 에포크 길이). 즉, 시간 슬라이스는 sysctl_sched_min_granularity보다 작을 수 있습니다. 이러한 매개 변수의 기본값은 각각 0.75 ms 및 6 ms이며 kernel/sched/fair.c에 정의되어 있습니다.

줄을 따라 CFS 스케줄러는 주어진 작업이 실행되도록 예약되기 전에 주어진 작업에 대한 타임 슬라이스를 계산합니다. 그 길이는 가변적이며 (동적), 정적 우선 순위와 실행중인 큐의 현재로드, 즉 큐에있는 태스크의 수와 우선 순위에 직접적으로 의존합니다.

답변

1

귀하의 질문에 대한 가정을한다면, 저는 2007-9 년경에 CFS (완전 공정한 스케줄러)를 의미한다고 생각합니다. 코드를 탐색하여 질문에 대한 답을 찾는 것이 더 쉬울 수 있습니다. (http://lxr.free-electrons.com/source/kernel/sched/fair.c), 그건 공정한 스케줄러이고, (http://lxr.free-electrons.com/source/kernel/sched/sched.h)은 정의입니다. 또한 (Understading the Linux Kernel Scheduler) 흥미로운 찾을 수 있습니다.