2016-12-20 1 views
3

GPU 서버에서 프로세스의 CPU 사용을 제한하고 싶습니다. 나는 어떤 방법을 찾는다, "nice"또는 "cpulimit". 그러나 그들은 내가 원하는 것만은 아닙니다.
cpulimit은 프로세스가 SIGSTOP을 얻은 후 백분율을 초과하고 절전 모드 및 SIGCONT를 초과 할 때까지 원하는만큼 빠르게 실행되도록 허용합니다.
하지만 나는 수면을 초과하는 과정을 원하지 않습니다. 나는 그것이 특정 비율을 초과하지 않기를 바랍니다. 그리고 정상적인 방법으로 계속 실행하십시오. 내가 cpulimit -p 1111 -l 30을 실행할 때 예를 들어
프로세스의 CPU 사용을 제한하는 방법은 무엇입니까?

, 터미널이 내가 원하는 것이 아니다
[1]+ Stopped
될 것입니다.

답변

2

프로그램에 수면을 보내지 않고서는 불가능하다고 생각합니다. 그러나 다른 스레드가 CPU에 대한 액세스를 요청할 때 UNIX가 수행하는 작업이기 때문에 잠자는 것에 대해 걱정해야한다고 생각하지 않습니다. 는 CPU 코어가 한 번에 하나 개 또는 두 개의 스레드를 할 수 있기 때문에

당신이 프로그램이 CPU 코어의 50 %를 사용하고 있음을 볼 경우, 그것은 시간의 50 % (구성의 따라 lscpu)를 참조하십시오.

항상 코어를 100 % 사용하고 다른 프로세스를 입력하지 못하게하는 응용 프로그램을 빌드하는 경우 가능하지만 커널이 일부 CPU를 다른 응급 프로그램에 한 번 허용할지 여부는 알 수 없습니다 .

내 조언은 앱이 일시 중지 될 수 있다는 사실을 고려하는 것입니다. 앱이 일시적으로 중단 될 수 있고 분명히 필요한 것입니다.

희망 제가 도와 드리겠습니다. 나중에 보자!

+0

더 나은 해결책을 찾을 수없는 이유가 여기에 있습니다. –

0

가능한 방법은 다른 과정 (또는 프로세스 그룹)를 실행 자신의 "쉘 같은"프로그램을 설계하고 대안 SIGSTOPSIGCONT 신호를 (이상 signal(7) 참조)를 보낼 수 있습니다. 예를 들어 일부 프로그램에서 CPU 시간의 50 %를 초과하여 사용하지 않으려면 프로그램을 시작한 후 10 밀리 초 동안 실행하고 SIGSTOP을 보내고 10 밀리 초 동안 기다린 후 SIGCONT을 보내고 10 초 동안 대기하십시오 밀리 초, SIGSTOP 등으로 보내십시오.

그러한 제어 프로그램의 개념 증명은 내 half.c 유틸리티 (GPLv2 + 라이센스)입니다. 그 half 프로그램 자체 (일부 자식 프로세스) 중지하지 않기 때문에 BTW 터미널에서 Stopped 표시 (셸에 의해 표시된 메시지) 표시하지 않습니다.

FWIW, 나는 약간의 과열 MSI S270 노트북에 리눅스 커널을 컴파일 할 수 있도록 10 년 이상 전에 그 프로그램을 개발

(실제 이야기가 약간 더 복잡하며, 또한 너무 싼 RAM을 포함 모듈을 너무 많이 가열하면 잘못 작동하여 RAM 모듈을 변경하면 전반적인 하드웨어 문제가 해결된다는 것을 깨닫기까지 1 년 이상이 걸렸습니다.

관련 문제