2013-05-06 2 views
28

필자는 리눅스 커널의 타임 슬라이스 (또는 퀀텀) 값을 찾고 있습니다.리눅스 스케줄러 시간 조각을 아는 방법?

/proc 이러한 정보가 노출되는 파일이 있습니까?

(또는) 내 배포판의 Linux 헤더에 잘 정의되어 있습니까?

(또는)이 값을 노출하는 Linux API (아마도 sysinfo)의 C 기능이 있습니까?

미리 감사드립니다.

답변

25

실시간 프로세스의 기본 Linux 타임 슬라이스는 RR_TIMESLICEinclude/linux/sched/rt.h으로 Linux 커널에 정의되어 있습니다. 실제 양자가이 값보다 특정 프로세스 may be different에 할당 된 것을

/* 
* default timeslice is 100 msecs (used only for SCHED_RR tasks). 
* Timeslices get refilled after they expire. 
*/ 
#define RR_TIMESLICE   (100 * HZ/1000) 

참고 :

당신은 sched_latency_nssched_min_granularity_ns을 조정하여 조정 "조각",하지만 "슬라이스를주의 수 "은 고정 된 퀀텀이 아닙니다. 또한 CFS 선점 결정은 순간 상태를 기반으로합니다. 작업에 CPU 시간의 전체 (가변) "슬라이스"가 수신되었지만 더 많은 작업을 사용할 수있는 경우에만 선점이 트리거되므로 "슬라이스"가 "최대 중단되지 않은 CPU 시간"이 아니므로 선점이 트리거됩니다 그것을 기대할 수 있습니다.하지만 다소 비슷합니다.

그러나 sched_rr_get_interval()을 사용하여 주어진 실시간 프로세스에 대한 SCHED_RR 간격을 가져올 수 있습니다.

+0

그러나 리눅스 커널 3.9에서는'rt.h'가 나타났습니다. – backlash

+7

** 리눅스 커널 v3.9 ** 이전에,'RR_TIMESLICE'의 정의는 [include/linux/sched.h] (http://lxr.free-electrons.com/source/include/linux/sched)에있었습니다. .h? v = 3.8 # L1227). ** Linux kernel v3.4 ** 이전에 정의 된 이름은'DEF_TIMESLICE' 였고 [kernel/sched/sched.h] (http://lxr.free-electrons.com/source/kernel/sched/)에있었습니다. sched.h? v = 3.3 # L43). –

+3

이 대답은 실시간 우선 순위 RR –

20

CFS (프로세스의 기본 스케줄러)에는 고정 타임 슬라이스가 없으므로 대상 대기 시간 (sysctl_sched_latency) 및 실행중인 프로세스 수에 따라 런타임에 계산됩니다. 시간 슬라이스는 최소 세분성보다 작을 수 없습니다 (sysctl_sched_min_granularity).

시간 간격은 항상 sysctl_sched_min_granularitysysctl_sched_latency 사이이며, 기본값은 각각 0.75 ms와 6 ms이며 kernel/sched/fair.c으로 정의됩니다.

그러나 실제 타임 슬라이스는 사용자 공간으로 내보내지지 않습니다.

+0

배치 프로세스에서도 마찬가지입니까? – user239558

+0

이것은 CFS 스케줄러 (실시간 프로세스 아님)에서 실행되는 모든 프로세스에 해당됩니다. –

7

SCHED_OTHER 프로세스 (즉, (기본값) 비 실시간 라운드 로빈 시분할 정책에서 작동하는) 프로세스와 SCHED_RR 프로세스간에 허용되는 답변에는 약간의 혼란이 있습니다.

SCHED_OTHER 프로세스의 스케줄링에 영향을 미치는 (CONFIG_SCHED_DEBUG 커널로 구성되는 경우에만 디버그 목적을위한, 그리고 표시된다)을 sched_latency_nssched_min_granularity_ns 파일. Alexey Shmalko의 대답에서 알 수 있듯이 CFS에서의 시간 슬라이스는 고정되어 있지 않으며 사용자 공간으로 내보내지지 않습니다. 커널 매개 변수와 프로세스의 좋은 가치와 같은 요소에 따라 달라집니다.

sched_rr_get_interval()은 선취되거나 차단되지 않는 한 SCHED_RR 프로세스가 보장하는 퀀텀 인 고정 값을 반환합니다. 전통적인 리눅스에서, SCHED_RR 퀀텀은 0.1 초입니다.Linux 3.9 이후로 제한은 /proc/sys/kernel/sched_rr_timeslice_ms 파일을 통해 adjustable입니다. 여기서 퀀텀은 기본값이 100 인 밀리 초 값으로 표시됩니다.

2

리눅스에서 SCHED_RR의 시간 슬라이스에 대해 의심 스럽습니다. 그러나 여기서 커널 소스 코드와 커널 소스 코드 모두에서 분명한 대답을 얻을 수는 없습니다. 추가 확인 후, 나는 요점은 "RR_TIMESLICE"입니다 기본 시간 조각은, 밀리 초 아닙니다! 따라서 SCHED_RR의 기본 시간 조각은 사용자가 구성한 HZ와 관계없이 항상 100ms입니다. 의 jiffies에 그것을 저장 밀리의 입력 값, 그러나 "은/proc/SYS/커널/sched_rr_timeslice_ms"의 값이 출력 동일

! 따라서 CONFIG_HZ = 100이면 다음과 같이 나타납니다.

# echo 100 > /proc/sys/kernel/sched_rr_timeslice_ms 
# cat /proc/sys/kernel/sched_rr_timeslice_ms 
10 

조금 혼란 스럽습니다. 희망이 있으면 이해할 수 있습니다.

관련 문제