![낮은 CPU 속도로 프로그램을 실행하시겠습니까?](https://linux55.com/image/51515/%EB%82%AE%EC%9D%80%20CPU%20%EC%86%8D%EB%8F%84%EB%A1%9C%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%98%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
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 myprogram
CPU #0 및 #1에서만 실행)를 사용하도록 강제할 수 있습니다. 프로그램을 단일 CPU에서 강제로 실행하면 경쟁 조건이 줄어들 수 있습니다.
사용 사례에 따라 천천히 실행하기보다는 몇 번 실행해 보세요. 예를 들어, 컴퓨터보다 약 10배 느린 장치에서 프로그램이 특정 속도가 되도록 하려면 프로그램을 10번 연속 실행하여 테스트하십시오. 프로그램을 여러 번 실행하면 경쟁 조건이 발생할 가능성이 높아집니다.
답변3
또 다른 옵션은 느린 하드웨어(예: 저렴한 ARM 기반 보드)를 사용하는 것입니다.라즈베리 파이또는 (약간 더 강력함) Compulab슬라이스 다듬기해야 할 것. 제한된 양의 메모리와 느린 CPU를 가지고 있지만 전체 Linux 시스템을 실행할 수 있습니다. Fedora, Debian 및 기타 일부 배포판에는 ARM 버전이 있습니다.
답변4
cpufreq-info를 사용하면 CPU에서 지원하는 모든 CPU 클럭 속도를 확인할 수 있습니다. cpufreq-set를 사용하여 CPU 클럭 속도를 선택할 수 있습니다.