프로그램을 느리게 실행시키다
Linux에서 OS 파라미터를 변경하여 C++ 프로그램을 느리게 실행할 수 있는 방법이 있습니까?이와 같이 특정 프로그램이 실제로 느린 기계에서 실행될 경우 어떤 일이 일어날지 시뮬레이션해 보겠습니다.
즉, 고속 머신은 특정 프로그램에 대해 저속 머신으로 동작해야 합니다.
사용방법:
Cpulimit은 프로세스의 CPU 사용량을 제한하는 도구입니다(CPU 시간이 아닌 백분율로 표시).배치 작업이 CPU 주기를 너무 많이 사용하지 않도록 제어하면 유용합니다.목표는 프로세스가 지정된 시간 비율 이상 실행되지 않도록 하는 것입니다.적절한 값이나 다른 스케줄링 우선 순위 설정은 변경되지 않지만 실제 CPU 사용률은 변경됩니다.또한 전체 시스템 부하에 동적으로 빠르게 적응할 수 있습니다.
SIGSTOP SIGCONT POSIX의 CPU입니다.
지정된 프로세스의 모든 하위 프로세스 및 스레드가 CPU의 동일한 비율을 공유합니다.
Ubuntu 저장소에 있습니다.그저.
apt-get install cpulimit
다음은 이미 실행 중인 프로그램에서 사용하는 방법에 대한 몇 가지 예입니다.
실행 파일 이름으로 프로세스 'bigloop'을 CPU 40%로 제한:
cpulimit --exe bigloop --limit 40 cpulimit --exe /usr/local/bin/bigloop --limit 40
PID별 프로세스를 55% CPU로 제한:
cpulimit --pid 2960 --limit 55
- (및/또는 )을 사용하여 priority를 낮춥니다.시스템 콜을 사용하여 프로그래밍 방식으로 실행할 수도 있습니다.이로 인해 실행 속도 자체가 느려지는 것이 아니라 Linux 스케줄러가 할당하는 실행 시간(또는 더 짧은 시간)이 단축되고 프리엠프트 빈도가 높아집니다.스케줄링에 대한 자세한 내용은 Linux 커널 이해의 프로세스 스케줄링(10장)을 참조하십시오.
- 타이머 인터럽트 빈도를 높여 커널에 부하를 더 가하면 모든 속도가 느려집니다.이를 위해서는 커널 재구축이 필요합니다.
- CPU 주파수 스케일링 메커니즘(커널 모듈 필요)을 사용하여 명령어를 사용하여 CPU를 제어할 수 있습니다(속도 저하, 속도 향상).
- 또 다른 방법으로는 프로그램의 퍼포먼스에 중요한 부분에서 (코드 변경이 필요)를 호출하여 다른 프로세스에 퀀텀을 제공할 수 있습니다.
- 다음과 같은 일반적인 기능을 후크할 수 있습니다.
malloc()
,free()
,clock_gettime()
LD_PRELOAD를 사용하여 몇 백만 개의 CPU 사이클을 소비하는 등의 어리석은 작업을 수행합니다.rep; hop;
메모리 장벽 삽입 등이렇게 하면 프로그램이 확실히 느려집니다.(이러한 작업의 예에 대해서는, 이 회답을 참조해 주세요). - @Bill에서 설명한 바와 같이 Linux는 항상 가상화 소프트웨어에서 실행할 수 있습니다.이를 통해 할당된 CPU 리소스, 메모리 등의 양을 제한할 수 있습니다.
- 프로그램을 느리게 하려면 Valgrind에서 실행합니다(메모리 누수, 메모리 참조 불량 등 응용 프로그램의 문제를 찾는 데 도움이 될 수도 있습니다).
- 비활성화된 최적화를 사용하여 바이너리를 다시 컴파일하면 속도가 다소 느려질 수 있습니다(예:
-O0
어설션을 유효하게 합니다(즉,-DDEBUG
). - CPU가 느린 오래된 PC나 저렴한 넷북(예를 들어 어린이 1명당 1대의 노트북 등)을 구입하여 프로그램을 실행할 수 있습니다.
도움이 됐으면 좋겠다.
QEMU는 Linux용 CPU 에뮬레이터입니다.데비안은 그것을 위한 패키지를 가지고 있다.에뮬레이터로 프로그램을 실행할 수 있습니다.대부분의 에뮬레이터는 속도 저하를 서포트합니다.예를 들어 Miroslav Novak에는 QEMU를 느리게 하는 패치가 있습니다.
또는 다른 CPU-linux(arm-none-gnueabi-linux 등)로 크로스 컴파일한 후 QEMU에 해당 코드를 변환하여 실행할 수도 있습니다.
좋은 제안은 간단하며 CPU를 소비하는 다른 프로세스와 결합하면 효과가 있을 수 있습니다.
nice -19 test &
while [ 1 ] ; do sha1sum /boot/vmlinuz*; done;
그래픽스, 파일 및/또는 네트워크 I/O가 필요한지 여부에 대해서는 언급하지 않으셨습니까?찾고 있는 오류 등급에 대해 알고 계십니까?레이스 상태입니까, 아니면 고객 사이트에서 코드가 제대로 작동하지 않는 것입니까?
편집: STOP 및 CONT 등의 신호를 사용하여 프로그램을 시작 및 중지할 수도 있습니다.디버거도 이 작업을 수행할 수 있습니다.문제는 코드가 풀스피드로 실행되었다가 정지되는 것입니다.Linux 스케줄러를 사용하는 대부분의 솔루션에서 이 문제가 발생합니다.
인텔 에어에서 나온 스레드 분석기 같은 게 있었어요 그렇구나 Vtune 릴리즈 노트 이것은 Vtune입니다만, 스레드 레이스를 분석할 수 있는 다른 툴이 있다고 확신하고 있었습니다.
인텔 스레드 체커를 참조해 주세요.인텔 스레드 체커는 스레드 레이스 상태를 체크할 수 있습니다.하지만 앱이 멀티 스레드인지 아닌지 알 수 없습니다.
- 오래된 컴퓨터를 구입하다
- VPS 호스팅 패키지는 실행 속도가 느리고 중단이 많으며 지연 시간이 매우 다양합니다.가격이 저렴할수록 하드웨어는 나빠집니다.완전히 오래된 하드웨어와는 달리 일반적으로 오래된 하드웨어에서는 볼 수 없는 명령어세트(SSE4)가 포함되어 있을 가능성이 높습니다.단, 천천히 걸으며 자주 셔터를 실행하는 시스템을 원한다면 저렴한 VPS 호스트가 가장 빠른 시작입니다.
프로그램을 시뮬레이트하여 매우 느린 기계에서의 동작을 분석하려면 전체 프로그램을 다른 메인 프로그램과 같이 실행해 보십시오.
이렇게 하면 몇 개의 스레드에서 우선순위가 다른 동일한 코드에 한 번에 우선순위를 부여하고 분석 데이터를 수집할 수 있습니다.프레임 처리 분석용 게임 개발에서 사용한 적이 있습니다.
sleep을 사용하거나 코드 내에서 기다립니다.가장 현명한 방법은 아니지만 속도가 다른 모든 종류의 컴퓨터에서 사용할 수 있습니다.
가장 간단한 방법은 실행 가능한 주요 코드를 마지막에 sleep 상태로 잠시 루프에 랩하는 것입니다.
예를 들어:
void main()
{
while 1
{
// Logic
// ...
usleep(microseconds_to_sleep)
}
}
로직 코드는 정상 속도로 실행되지만 실행 간 지연이 발생하기 때문에 이 방법은 가장 정확한 방법이 아닙니다.또, 논리 코드가 루프내에서 동작하고 있는 것을 전제로 하고 있습니다.
단, 심플하고 설정도 가능합니다.
수 있는 의 부하를 높이는 입니다.stress
★★★★★★★★★★★★★★★★★」stress-ng
언급URL : https://stackoverflow.com/questions/14371257/make-a-program-run-slowly
'programing' 카테고리의 다른 글
Vuex - 여러 디스패치 후 기능 실행 (0) | 2022.08.09 |
---|---|
Vue 재료 테이블에서 md-selection 속성을 동적으로 변경하면 테이블 레이아웃이 파괴됩니다. (0) | 2022.08.09 |
c의 여러 파일에 의해 사용되는 헤더의 구조를 선언하려면 어떻게 해야 합니까? (0) | 2022.08.09 |
Vuex: API 호출을 사용한 테스트 작업 (0) | 2022.08.09 |
Vue v-for 루프 - 어레이를 필터링할 때 구성 요소를 대상으로 지정하는 방법 (0) | 2022.08.09 |