SCHED_RR 타임 슬라이스 또는 프로세스/스레드당 시간을 설정하는 방법은 무엇입니까?

SCHED_RR 타임 슬라이스 또는 프로세스/스레드당 시간을 설정하는 방법은 무엇입니까?

정책이 있는 스레드의 시간 조각(시간 양자라고도 함)은 다음 SCHED_RR을 기반으로 할 수 있습니다.sched_rr_get_interval 매뉴얼 페이지다음을 사용하여 얻을 수 있습니다.

int sched_rr_get_interval(pid_t pid, struct timespec *tp);

이는 서로 다른 프로세스/스레드에 대해 서로 다른 값을 설정할 수 있음을 보여줍니다. ~에 따르면동일한 매뉴얼 페이지, 그러나 를 사용하여 이 값(커널 3.9 기준)을 조정할 수 있습니다. /proc/sys/kernel/sched_rr_timeslice_ms그러나 이는 스레드별 구성을 합리적인 방식으로 변경하는 것을 허용하지 않는 것 같습니다.

실시간 스케줄링을 다루는 다른 곳에서도 SCHED_RR각 스레드에 대한 스레드 시간 조각을 설정하는 방법에 대한 정보를 제공하지 않습니다(남자 그리스도,sched_setattr,SO: Linux 스케줄러의 타임 슬라이스를 어떻게 알 수 있나요?).

각 스레드에 대해 SCHED_RR개별적으로 타임 슬라이스를 설정할 수 있습니까? 그렇다면 선호되는 접근 방식은 무엇입니까?

답변1

링크한 매뉴얼 페이지에 따르면 sched_rr_get_intervalPOSIX.1-2001 및 POSIX.1-2008 표준을 준수합니다. 따라서 POSIX 표준은 서로 다른 프로세스가 서로 다른 시간 조각 값을 갖는 것을 허용하지만 동일한 매뉴얼 페이지에 "POSIX는 주기 시간의 크기를 제어하기 위한 메커니즘을 지정하지 않습니다."라고 명시되어 있습니다.

이것이 아마도 Linux에서 각 프로세스나 스레드에 대해 주기 타임슬라이스 값을 설정하는 알려진 방법이 없는 이유일 것입니다. 당신이 지적했듯이, 내가 알고 발견한 한, 시간 조각은 globals 를 통해서만 변경할 수 있습니다 /proc/sys/kernel/sched_rr_timeslice_ms.

관련 정보