ProgramingTip

pthread에서 순위 우선 순위를 높이는 방법은 무엇입니까?

bestdevel 2021. 1. 6. 20:52
반응형

pthread에서 순위 우선 순위를 높이는 방법은 무엇입니까?


Linux에서 pthread를 사용하고 있습니다. 우선 순위를 지정하고 싶습니다 sched_param.priority. 그러나 내가 접근 할 수있는 많은 쓰레드 우선 순위의 범위 나 쓰레드 우선 순위에 대한 설명에 쓰레드 우선 순위에 대한 설명에 쓰레드 넷에서 없었다.

또한 일정 우선 순위를 너무 많이 사용하기 때문에 OS가 중단되는 것을 계획하고 있기 때문에 우선 순위를 알고 싶습니다. 누군가 귀하의 제출 서열 줄 수 있습니까?


기본 Linux 예약 정책은입니다 SCHED_OTHER. 우선 순위 선택은 없지만 nice정책 내에서 수준이 있습니다.

함수를 사용하여 다른 예약 정책을 변경해야 합니다 pthread_setschedparam(참조 man sched_setscheduler).

'일반'예약 정책 : (부터 sched_setscheduler(2))

   SCHED_OTHER   the standard round-robin time-sharing policy;
   SCHED_BATCH   for "batch" style execution of processes; and
   SCHED_IDLE    for running very low priority background jobs.

실시간 모든 정책 :

   SCHED_FIFO    a first-in, first-out policy; and
   SCHED_RR      a round-robin policy.

의 경우 귀하 SCHED_BATCH에는 루트 권한이 필요하지 않으므로 사용할 수 있습니다 .

경고 : 실시간 예약 정책을 잘못 사용하면 시스템이 중단 될 수 있습니다. 그렇기 때문에 필요한 경우 작업을 수행 할 루트 권한이 필요합니다.

기계가 무엇을 할 수 있는지 확인하기 위해 패키지의 chrt도구를 사용할 수 있습니다 util-linux.
예로서 :

$ chrt -m 
SCHED_OTHER min/max priority    : 0/0
SCHED_FIFO min/max priority     : 1/99
SCHED_RR min/max priority       : 1/99
SCHED_BATCH min/max priority    : 0/0
SCHED_IDLE min/max priority     : 0/0

더 많은 시간 사용할 수있는 방법 (내가 자주 사용함) :

alias batchmake='time chrt --batch 0 make --silent'

사용자 권한을 유지하는 동안 이는 make15 % (제 경우)를 추진합니다 .

편집 : 도입 nice, SCHED_BATCH, SCHED_IDLEchrt도구. 필요한을 위해! :)


levif (SCHED_BATCH 권장)의 현재 답변은 Linux의 현재 NPTLION 구현에 맞지 발음 ( 'getconf GNU_LIBPTHREAD_VERS'를 실행하여 어떤 구현이 있는지 확인할 수 있음).

공인의 가격에서는 실시간 스케줄링 정책 만 sched_priority 설정을 허용합니다. 비 RT 정책 (SCHED_OTHER, SCHED_BATCH 및 SCHED_IDLE)의 경우 항상 0입니다. 비 RT 정책에 대한 유일한 선택은 예를 들어 setpriority ()에 의해 '좋은'값을 설정하는 것입니다. 그러나 'nice'를 사용하여 예상 할 수있는 정확한 동작에 대한 좋은 사양은 평면적으로 이론적으로 변경할 수 있습니다. 현재 Linux의 경우 '좋은'은 우선 순위와 매우 우수한 효과를 가지 거의 같은 의미로 사용할 수 있습니다. 예약 예약 빈도를 늘리려면 'nice'값 낮추고 싶습니다 . 이를 호출 CAP_SYS_NICE 기능이 필요합니다 (필수는 일반적으로 루트, http : // man7 참조) . http://man7.org/linux/man-pages/man3/cap_set_proc.3.html ).

SCHED_BATCH는 질문자 가 요청한 것과 반대 되는 경우 를 위해 설계되었습니다. CPU 집약 및 장기 실행 작업을 위해 설계 우선 순위 낮습니다 . 스케줄러에게주기에 대한 웨이크 업 우선 순위를 약간 불 환원을 주도록 지시합니다.

또한 이전 의견 중 하나에 대답하기 위해 (나는 아직 대답에 대한 충분한 평판을 얻지 답변.이 답변에 대한 일부 찬성 투표가 도움이 될입니다 :)). 예, 나쁜 소식은 POSIX.1에서 'nice'가 어떤 사양가 아닌 프로세스에 영향을 미친다고 생각합니다. 좋은 소식은 Linux 단일 구현 (NPTL 및 원래 Linux의 경우 모두)이 사양을 하나의 단일성에 영향을 미칠 수있는 것입니다. 나는 이것들이 재미있는 것을 알았다. 나는이 버그가 POSIX.1 사양에 있었는데, 이것은 사양에도 불구하고 그것을 제공하도록 강요된 구현이 아니라 고의적으로 그리고 의도적으로 그렇게 한 구현이 아니라 동작을 허용 했어야했다. 즉, 버그가 아닙니다.

이것의 대부분은 sched (7) man 페이지 (그런데 Fedora 20 시스템에 제공되지 않음)에 자세히 설명되어 있습니다. http://man7.org/linux/man-pages/man7/sched.7.html

sched_priority에 영향을 미치고 SCHED_RR과 같은 실시간 정책을 볼 수 있습니다.)


POSIX는 쿼리를 정의하여 OS에 유효한 우선 순위 범위를 허용합니다.

int sched_get_priority_max(int policy);

int sched_get_priority_min(int policy);

기계를 질식 높은 우선 순위를 기대하지 않습니다. 사실, 이미 100 %의 CPU주기를 사용하고 있지 않은 한 아무 작업도 수행하지 않을 것입니다. 쿼리에서 높음보다 높은 우선 순위가 알려도 높음.

참조 URL : https://stackoverflow.com/questions/3649281/how-to-increase-thread-priority-in-pthreads

반응형