최고의 유닉스 명령은 무엇입니까?

최고의 유닉스 명령은 무엇입니까?

빠른 벤치마크를 위해 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 예약 클래스를 유휴로 설정하면 리소스 사용량을 완전히 최소화할 수 있습니다. 두 경우 모두 "유휴" 스케줄러는 실제로 유휴 스케줄러가 아니며 여전히 리소스를 사용할 수 있지만 모든 것이 더 높은 우선 순위를 갖게 됩니다.

chrtCPU 스케줄링 클래스의 경우 필수는 아니지만 다음과 같이 명령도 사용합니다 nice(우선순위는 유휴 스케줄링 클래스에서 설정되어야 함 ).0

chrt -i 0 {command or PID}

Linux의 명령은 niceSVR4 버전을 미러링합니다. 즉, 예약 클래스를 변경할 수 없으며 좋은 값만 변경할 수 있습니다(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_setschedulerioprio_set시스템 호출을 확인하십시오(좀 더 많은 배경 지식을 원한다면 둘 다 가치가 있지만).

답변2

명령이 다른 명령이 완료될 때까지 완전히 기다리지 않기 때문에 잠재적인 손실이 발생하지 않는다고 가정합니다.자원 부족, 라인은 다음과 같습니다

nice -n19 [command]

~처럼이오아니스최신 Linux 커널에서 확장됩니다.

그건 그렇고, 이것은 chrt -b0좋은 것과 관련이 없으며 오히려 CPU가 한 프로세스에서 다른 프로세스로 얼마나 자주 점프하는지입니다. 이 줄을 사용하면 배치 프로그램이 더 오랫동안 캐시를 더 잘 활용하게 되지만 다른 명령의 경우에는 쓸모가 없습니다. 본 것처럼여기.

관련 정보