빠른 벤치마크를 위해 nice와 ionice를 결합하여 최대 효과를 얻으려면 어떻게 해야 합니까? 즉, 명령은 가능한 한 적은 리소스를 사용합니다(전혀 유휴 상태가 아님).
(나는 이것이 `nice -n 19 ionice -c 2 [명령]과 같은 것이라고 생각하지만 ionice의 "-n"(classdata 매개변수)에 대해서는 잘 모르겠습니다. 매뉴얼 페이지는 관련성에 대해 비밀스럽습니다.)
답변1
원하는 전체 명령은 다음과 같습니다.
chrt -b 0 nice -n 19 ionice -c 2 -n 7 [command]
첫 번째 명령은 chrt
배치 예약 클래스로 전환합니다. 이는 nice 값에 0.5를 추가하는 것과 같습니다. ionice에 대한 -n 옵션은 실시간( -c 1
) 및 최선의 노력( -c 2
) 옵션의 단순한 우선순위이며, 좋은 값과 마찬가지로(그러나 0-7 범위) 낮은 값이 더 높은 우선순위를 부여합니다. 그러나 I/O 스케줄링 클래스 및 우선순위는 기본적으로 CPU 스케줄링 매개변수에서 파생되고 nice -n 19
사용되기 때문에 ionice 명령은 꼭 필요한 것은 아닙니다 ionice -c 2 -n 7
.
그러나 CPU 및 I/O 예약 클래스를 유휴로 설정하면 리소스 사용량을 완전히 최소화할 수 있습니다. 두 경우 모두 "유휴" 스케줄러는 실제로 유휴 스케줄러가 아니며 여전히 리소스를 사용할 수 있지만 모든 것이 더 높은 우선 순위를 갖게 됩니다.
chrt
CPU 스케줄링 클래스의 경우 필수는 아니지만 다음과 같이 명령도 사용합니다 nice
(우선순위는 유휴 스케줄링 클래스에서 설정되어야 함 ).0
chrt -i 0 {command or PID}
Linux의 명령은 nice
SVR4 버전을 미러링합니다. 즉, 예약 클래스를 변경할 수 없으며 좋은 값만 변경할 수 있습니다(Linux의 동작도 기존 UNIX와 다르지만 약간 OT입니다). 원래 대체 스케줄링 클래스는 POSIX.1E 실시간이었으므로 SCHED_RR
스케줄링 SCHED_FIFO
클래스를 설정하는 명령은 결국 으로 호출되었습니다 chrt
. 이 옵션은 예약 클래스 -i
사용을 지정합니다.SCHED_IDLE
I/O 예약 클래스의 경우 ionice
정확한 명령은 다음과 같습니다.
ionice -c 3 {command or PID}
이 -c
옵션은 사용할 예약 클래스를 지정합니다. 3은 유휴 클래스의 수입니다. 사용되는 블록 I/O 스케줄러에 따라 이는 실제로 아무런 영향을 미치지 않을 수도 있습니다. 특히 I/O 스케줄러는 우선 순위나 클래스 예약을 전혀 지원하지 않으며 스케줄러(기존 스케줄러와 blk-mq 스케줄러 모두)도 지원하지 않는다고 noop
확신합니다 .deadline
자신의 프로그램에 대해 또는 다른 프로세스에 대한 사항을 조정하기 위해 프로그래밍 방식으로 이 작업을 수행하려면 매뉴얼 페이지 sched_setscheduler
와 ioprio_set
시스템 호출을 확인하십시오(좀 더 많은 배경 지식을 원한다면 둘 다 가치가 있지만).