전체 시스템의 프로세스 스케줄링 정책을 변경할 수 있는 방법이 있나요? 예를 들어 모든 프로세스에 대해 기본 SCHED_OTHER를 SCHED_RR로 변경하고 싶습니다. 이 명령은 chrt
프로세스에서 작동합니다. 시스템 전체 설정을 변경하고 싶습니다. 이것에 대한 생각이 있나요?
고쳐 쓰다:
더 구체적으로 말하자면, 다른 정책을 사용하여 일부 명령을 실행하고 싶은데 tar
문제는 프로그램을 시작하기 전에 프로세스 ID를 모른다는 것입니다.
답변1
chrt는 실행 중인 프로세스의 예약 우선순위를 변경할 수 있을 뿐만 아니라(실제로 pid가 필요함) 특정 예약 정책에 따라 새 프로세스를 시작할 수도 있습니다.
chrt [options] priority command argument ... chrt [options] -p [priority] PID
설명하다
chrt sets or retrieves the real-time scheduling attributes of an existing PID, or runs command with the given attributes.
따라서 SCHED_RR rtprio 10을 처음부터 실행하는 tar를 직접 부팅하려면
chrt -r 10 tar blahblahraroptions
주석에 쓰여진 대로, 실행 중인 모든 프로세스가 동일한 우선순위에서 동일한 스케줄링 정책을 실행하는 것이 타당하지 않다면 이를 달성할 수 있는 방법이 없습니다.
그러나 원하는 스케줄링 정책/우선순위에 따라 모든 사용자의 프로세스를 자동으로 시작할 수 있습니다. 이는 (기본적으로) 하위 프로세스에 의해 상속되기 때문입니다.
1/ bash 프로세스를 포크하고 SCHED_FIFO / 우선순위 10을 예약합니다.
$ chrt -f 10 bash
2/ 지금부터 시작되는 모든 프로세스는 chrt를 사용하지 않고 동일한 방식으로 예약됩니다.
/proc/2074 $ ps -eHo pid,ppid,tid,class,rtprio,ni,pri,comm
...
4168 2074 4168 FF 10 - 50 bash
4192 4168 4192 FF 10 - 50 ps
...
테스트 목적으로만 주의해서 사용하십시오. 물론 포크 폭탄 발사를 피하고 가능한 한 높은 우선순위를 지정하십시오!