낮은 CPU 속도로 프로그램을 실행하시겠습니까?

낮은 CPU 속도로 프로그램을 실행하시겠습니까?

runat 400mhz ./my-program --argument-of="my program"고정된(낮은) CPU 클럭 속도(예: 해당 클럭 속도를 얻기 위해)를 사용하여 Linux 환경에서 특정 프로그램을 실행하는 것은 나에게 매우 유용합니다.

지연이 정확하지 않은 경우(예: 거의 확실하게 OS 스케줄러에 따라 달라지는 경우)를 죽이지 않도록 프로그램의 각 어셈블리 명령 사이에 지연을 생성하는 데 필요합니다.

목표는 학교에서 너무 무겁지 않은 애플리케이션을 작성할 때 알고리즘 효율성을 매우 명확하게 만드는 것입니다(3GHz CPU를 사용하면 실제로 최적화할 수 있는 짧은 실행 시간을 가진 느린 알고리즘을 알아차리기 어렵습니다). 또한 실시간으로 경쟁 상황을 파악하는 데 유용할 수 있습니다.

그런 도구가 있다는 걸 아시나요? 이를 달성하기 위해 해킹할 수 있는 통역사 유형이 있나요? gdb가 비교적 간단한 방법으로 도움을 줄 수 있나요? 나는 이것이 Linux 프로그램의 실행을 제어하는 ​​것과 가장 가까운 것이라고 생각합니다.

CPU가 제한된 VM에서 취약한 시스템을 실행하는 것은 CPU가 더 느린 것처럼 보이기 때문에 또 다른 옵션일 수 있지만 어쨌든 단일 프로그램을 실행하는 것이 더 좋습니다.

답변1

당신이 찾고 있는 응용 프로그램은 다음과 같습니다.cpulimit. 이는 일반적으로 시스템에 포함된 명령이 아니므로 배포판의 패키지 관리자(Ubuntu/Debian)를 통해 또는 소스에서 설치해야 합니다.

우분투/데비안

$ apt-cache search cpulimit
cpulimit - tool for limiting the CPU usage of a process

따라서 설치는 다음과 같습니다.

$ sudo apt-get install cpulimit

소스에서

다음과 같이 다운로드하세요:

$ wget https://github.com/opsengine/cpulimit/archive/master.zip \
       -O cpulimit-master.zip

압축을 풀고 빌드합니다.

$ unzip cpulimit-master.zip ; cd cpulimit-master ; make

용법

를 사용하여 설치할 수 있지만 make install지금은 빌드된 디렉터리에서 사용합니다.

$ pwd
/home/saml/tst/96387/cpulimit-master
$ src/cpulimit -e firefox -l 30

이는 호출 프로세스를 firefox사용 가능한 CPU 사용량의 30%로 제한합니다.

호출한 후 실행 중인 프로세스에 적용할 수도 있습니다.

$ pgrep firefox
1234

$ src/cpulimit -p 1234 -l 30

나머지 사용법을 볼 수 있습니다 cpulimit.

$ src/cpulimit 
Error: You must specify a cpu limit percentage
Usage: cpulimit [OPTIONS...] TARGET
   OPTIONS
      -l, --limit=N          percentage of cpu allowed from 0 to 400 (required)
      -v, --verbose          show control statistics
      -z, --lazy             exit if there is no target process, or if it dies
      -i, --ignore-children  don't limit children processes
      -h, --help             display this help and exit
   TARGET must be exactly one of these:
      -p, --pid=N            pid of the process (implies -z)
      -e, --exe=FILE         name of the executable program file or path name
      COMMAND [ARGS]         run this command and limit it (implies -z)

Report bugs to <[email protected]>.

Cyberciti.biz에는 다음과 같은 사용법에 대한 좋은 튜토리얼도 있습니다.Linux는 프로세스당 CPU 사용량을 제한합니다..

노트:CPU 사용량을 백분율로 제한하므로 쿼드 코어 케이스(4 CPU)가 있는 경우 0% - 400% 사이로 제한해야 합니다.

답변2

프로세서의 시계를 설정할 수 있지만 특정 프로그램에 대해 설정할 수는 없지만 전역적으로 설정할 수 있습니다. 그것은 프로세서가 작동하는 방식이 아닙니다. 전력이 제한된 환경(특히 노트북 및 기타 모바일 장치)용 프로세서는 다양한 속도를 지원하는 경향이 있습니다.

원칙적으로 프로세스가 예약되면(지원되는 경우) 프로세서 속도를 변경하고 다른 프로세스가 예약되면 프로세서 속도를 재설정하도록 조정할 수 있습니다. 나는 이것을 지원하는 어떤 소프트웨어도 알지 못하며 아마도 커널에 상당한 수정이 필요할 것입니다.

Qemu(KVM이 없으므로 순수한 소프트웨어 에뮬레이션을 얻을 수 있음) 또는 Bochs와 같은 느린 가상 머신에서 프로그램을 실행할 수 있습니다.

더 낮은 CPU 속도에서 실행하면 더 많은 경쟁 조건이 노출될 가능성이 줄어듭니다.

프로그램이 멀티스레드인 경우 단일 프로세서나 특정 프로세서 세트 taskset(예: taskset 3 myprogramCPU #0 및 #1에서만 실행)를 사용하도록 강제할 수 있습니다. 프로그램을 단일 CPU에서 강제로 실행하면 경쟁 조건이 줄어들 수 있습니다.

사용 사례에 따라 천천히 실행하기보다는 몇 번 실행해 보세요. 예를 들어, 컴퓨터보다 약 10배 느린 장치에서 프로그램이 특정 속도가 되도록 하려면 프로그램을 10번 연속 실행하여 테스트하십시오. 프로그램을 여러 번 실행하면 경쟁 조건이 발생할 가능성이 높아집니다.

답변3

또 다른 옵션은 느린 하드웨어(예: 저렴한 ARM 기반 보드)를 사용하는 것입니다.라즈베리 파이또는 (약간 더 강력함) Compulab슬라이스 다듬기해야 할 것. 제한된 양의 메모리와 느린 CPU를 가지고 있지만 전체 Linux 시스템을 실행할 수 있습니다. Fedora, Debian 및 기타 일부 배포판에는 ARM 버전이 있습니다.

답변4

cpufreq-info를 사용하면 CPU에서 지원하는 모든 CPU 클럭 속도를 확인할 수 있습니다. cpufreq-set를 사용하여 CPU 클럭 속도를 선택할 수 있습니다.

관련 정보