나는 burnP6
(cpuburn 패키지에서) 1초 동안 실행한 다음 프로그램을 종료하는 단일 코어 x86 시스템을 가지고 있습니다.
while true; do /usr/bin/burnP6 & sleep 1; pkill burnP6; sleep 1; done
CPU 사용률을 확인하는 데 사용하는 경우 top -d 1
프로세스 로드는 burnP6
일반적으로 50% 미만입니다. 이 명령을 실행하면 while true; do ps -e -o cmd,pcpu | grep burnP6; done
CPU 로드는 다음과 같은 특성을 갖습니다.
/usr/bin/burnP6 0.0
/usr/bin/burnP6 9.0
/usr/bin/burnP6 10.0
/usr/bin/burnP6 10.0
/usr/bin/burnP6 11.0
/usr/bin/burnP6 11.0
/usr/bin/burnP6 12.0
/usr/bin/burnP6 12.0
/usr/bin/burnP6 13.0
/usr/bin/burnP6 14.0
/usr/bin/burnP6 15.0
/usr/bin/burnP6 15.0
/usr/bin/burnP6 16.0
/usr/bin/burnP6 16.0
/usr/bin/burnP6 17.0
/usr/bin/burnP6 18.0
/usr/bin/burnP6 18.0
/usr/bin/burnP6 19.0
/usr/bin/burnP6 20.0
/usr/bin/burnP6 20.0
/usr/bin/burnP6 21.0
/usr/bin/burnP6 22.0
/usr/bin/burnP6 22.0
/usr/bin/burnP6 23.0
/usr/bin/burnP6 24.0
/usr/bin/burnP6 24.0
/usr/bin/burnP6 25.0
/usr/bin/burnP6 25.0
/usr/bin/burnP6 26.0
/usr/bin/burnP6 27.0
/usr/bin/burnP6 28.0
/usr/bin/burnP6 28.0
/usr/bin/burnP6 28.0
/usr/bin/burnP6 30.0
/usr/bin/burnP6 30.0
/usr/bin/burnP6 31.0
/usr/bin/burnP6 31.0
/usr/bin/burnP6 32.0
/usr/bin/burnP6 32.0
/usr/bin/burnP6 33.0
/usr/bin/burnP6 33.0
/usr/bin/burnP6 35.0
/usr/bin/burnP6 35.0
/usr/bin/burnP6 36.0
/usr/bin/burnP6 36.0
/usr/bin/burnP6 37.0
/usr/bin/burnP6 38.0
/usr/bin/burnP6 38.0
/usr/bin/burnP6 39.0
/usr/bin/burnP6 40.0
/usr/bin/burnP6 40.0
/usr/bin/burnP6 41.0
/usr/bin/burnP6 42.0
/usr/bin/burnP6 42.0
/usr/bin/burnP6 43.0
/usr/bin/burnP6 44.0
/usr/bin/burnP6 44.0
/usr/bin/burnP6 45.0
/usr/bin/burnP6 45.0
/usr/bin/burnP6 46.0
/usr/bin/burnP6 46.0
/usr/bin/burnP6 47.0
/usr/bin/burnP6 48.0
/usr/bin/burnP6 48.0
/usr/bin/burnP6 49.0
/usr/bin/burnP6 50.0
/usr/bin/burnP6 50.0
/usr/bin/burnP6 51.0
/usr/bin/burnP6 52.0
/usr/bin/burnP6 52.0
/usr/bin/burnP6 53.0
/usr/bin/burnP6 0.0
위에 표시된 대로 부하가 0%에서 53%로 빠르게 증가하지만 프로세스가 burnP6
종료됩니다. 즉, 99% - 100% 활용도에 도달하기에는 너무 짧은 시간 동안 실행됩니다. 이러한 결과는 측정 방법에 따른 것입니까? 실제로 burnP6
프로세스는 첫 번째 마이크로초부터 CPU를 100% 사용합니까? :) 아니면 프로세스가 CPU 시간을 모두 가져오는 데 실제로 1~2초가 걸리나요?
답변1
CPU 로드를 표시하는 데 사용하는 명령은 긴밀한 루프에서 실행되므로 CPUburn과 경쟁합니다. 경합 없이 CPUburn의 CPU 부하를 관찰하려면 sleep 1
루프에 다음과 같은 것을 추가하십시오.
테스트에서 처음에는 관찰자 루프가 거의 모든 CPU를 차지한 다음 점차적으로 burnP6
CPU 점유율을 점점 더 많이 차지합니다. 이는 Linux 스케줄링 정책의 결과입니다. Linux 커널에는 복잡한 스케줄러가 있습니다. 실제로 많은 스케줄링 알고리즘이 있으며 런타임에 어떤 스케줄링 알고리즘이 사용되는지 구성할 수 있습니다. 읽다sched(7) 매뉴얼 페이지더 자세한 내용을 알아보려면 커널 문서와 참고 서적을 참조하세요.
나보다 지식이 풍부한 사람은 이 출력을 사용하여 시스템에서 어떤 스케줄러가 활성화되어 있는지 확인할 수 있습니다. 나는 할 수 없다. ps | grep
CPU를 많이 사용하는 I/O 프로그램(실행 파일 로드, 프로세스 생성 및 데이터 전달 외에는 아무것도 수행하지 않는 루프)의 우선 순위를 지정하는 것을 볼 수 있습니다 . 이는 많은 상황에서 의미가 있습니다. CPU 집약적인 프로그램은 계산에 1초 대신 1.1초를 소비하는 것을 꺼리지 않을 수 있지만, I/O 집약적인 프로그램은 일반적으로 빠른 응답 시간(낮은 대기 시간)이 필요한 사용자 인터페이스 스레드 또는 네트워크 서비스입니다. ) 감사합니다. 분명히 모든 CPU를 차지하는 프로세스 그룹에서 균형을 맞추는 일종의 공정성 조치가 있습니다.
설정을 시험해 보고 동작이 어떻게 바뀌는지 확인하면 /proc/sys/kernel/sched*
도움이 될 것입니다 .