실행 중인 프로세스에서 CPU 코어 사용량을 재정의할 수 있나요? [폐쇄]

실행 중인 프로세스에서 CPU 코어 사용량을 재정의할 수 있나요? [폐쇄]

예를 들어 10개의 CPU 코어로 프로세스를 실행한 다음 CPU 코어 사용량을 5로 재정의하는 방법이 있습니까?

답변1

설마.

물론 이것은 휴대용 방식으로 수행될 수 없습니다. 이 작업을 수행할 시스템을 지정하지 않았습니다. 나는 그것이 내가 가장 잘 아는 것이기 때문에 그것이 Linux라고 가정하고 있지만 자유롭게 명확히 하십시오.

Linux 커널에는 "CPU 선호도" sched_setaffinity()sched_getaffinity().가능한달리다. CPU 수가 현재 프로세스에서 사용하는 스레드 수보다 적으면 필연적으로 더 적은 수의 코어를 사용하게 됩니다. 그러나 이 접근방식의 문제점은군대프로세스를 실행할 특정 CPU 코어 세트입니다. CPU를 많이 사용하는 작업인 경우 이는 이러한 코어가 쉽게 뜨거워질 수 있음을 의미합니다. 문제를 줄이기 위해 CPU를 냉각할 만큼 시스템에 냉각 용량이 충분하지 않은 경우 일반적인 해결 방법은 커널이 문제가 있는 프로세스를 다시 시작하는 것입니다. . 다른 코어로 예약하여 방금 사용된 코어가 동시에 하나의 코어를 냉각할 수 있도록 합니다. 일련의 코어를 강제로 실행하면 이 방법은 더 이상 작동하지 않으며 코어는 CPU 주파수 변경으로 대체해야 합니다. 그러나 다른 프로세스도 실행 중이기 때문에 코어를 조절하려고 하고 CPU 시간을 좀 주고 싶다면 이는 그다지 중요하지 않을 수 있습니다.

sched_setaffinity()다음을 사용하여 명령줄에서 액세스 및 시스템 호출을 수행할 수 있습니다.sched_getaffinity()taskset

taskset -p 0x3 $PID

$PID이제부터 pid가 있는 프로세스는 프로세서 코어 0과 1에서만 실행될 수 있음을 커널에 알립니다 . (0x3은 비트 1이 코어 0을 나타내고 비트 2가 코어 1을 나타내는 비트마스크입니다.)

선호도 마스크는 이진수이며 16진수로 입력되며 아래 쿼드 코어 프로세서의 전체 표를 사용하여 사용할 CPU를 지정할 수 있습니다.

0x1 - cpu0
0x2 - cpu1
0x3 - cpu0 and cpu1
0x4 - cpu2
0x5 - cpu0 and cpu2
0x6 - cpu1 and cpu2
0x7 - cpu0, cpu1 and cpu2
0x8 - cpu3
0x9 - cpu0 and cpu3
0xA - cpu1 and cpu3
0xB - cpu0, cpu1 and cpu3
0xC - cpu2 and cpu3
0xD - cpu0, cpu2 and cpu3
0xE - cpu1, cpu2 and cpu3
0xF - cpu0, cpu1, cpu2 and cpu3

답변2

방법을 찾았어요! !

CPUlimit는 다음과 같은 경우에 적합합니다.

https://github.com/opsengine/cpulimit

관련 정보