rhel + 내 컴퓨터에서 CPU를 비활성화하는 방법

rhel + 내 컴퓨터에서 CPU를 비활성화하는 방법

우리는 CPU가 16개인 물리적인 Linux 머신을 가지고 있습니다.

lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                16

우리는 이 머신에서 14개의 CPU를 비활성화하려고 하므로 실제로 Linux 머신에는 2개의 CPU만 있는 것과 같습니다.

이를 달성하기 위해 나는 다음을 수행했습니다.

echo 0 > /sys/devices/system/cpu/cpu15/online
echo 0 > /sys/devices/system/cpu/cpu14/online
echo 0 > /sys/devices/system/cpu/cpu13/online
echo 0 > /sys/devices/system/cpu/cpu12/online
echo 0 > /sys/devices/system/cpu/cpu1/online
echo 0 > /sys/devices/system/cpu/cpu11/online
echo 0 > /sys/devices/system/cpu/cpu10/online
echo 0 > /sys/devices/system/cpu/cpu9/online
echo 0 > /sys/devices/system/cpu/cpu8/online
echo 0 > /sys/devices/system/cpu/cpu7/online
echo 0 > /sys/devices/system/cpu/cpu6/online
echo 0 > /sys/devices/system/cpu/cpu5/online
echo 0 > /sys/devices/system/cpu/cpu4/online
echo 0 > /sys/devices/system/cpu/cpu5/online
echo 0 > /sys/devices/system/cpu/cpu4/online

그런 다음 실행하십시오.mpstat

우리는 얻었다

08:26:13 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
08:26:13 AM  all    0.34    0.00    0.09    0.04    0.00    0.00    0.00    0.00    0.00   99.53
08:26:13 AM    0    0.42    0.00    0.12    0.01    0.00    0.00    0.00    0.00    0.00   99.45
08:26:13 AM    1    0.37    0.00    0.10    0.01    0.00    0.00    0.00    0.00    0.00   99.52
08:26:13 AM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM    8    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM    9    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM   10    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM   11    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM   12    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM   13    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM   14    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
08:26:13 AM   15    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00

여기에 이미지 설명을 입력하세요.

CPU 2개만 온라인 상태임을 알 수 있습니다.

하지만 이 접근 방식이 실제로 작동하는지 확신할 수 없습니다. 비활성화된 다른 14개의 CPU를 PID가 사용하지 않도록 하는 방법과 같은 조언이 필요합니다.

내 프로그램이 14개의 CPU를 비활성화하고 프로세스가 2개의 CPU만 사용하는지 알려주세요.

답변1

이는 응용 프로그램에 따라 달라질 수도 있고 그렇지 않을 수도 있습니다.

애플리케이션이 단순히 API를 사용하여 사용 가능한 코어 수를 폴링하는 경우 Linux 커널이 모든 코어를 반환할 수 있으므로 제대로 작동하지 않을 수 있습니다.

그러나 BIOS에서 CPU 코어를 비활성화하면 작동해야 합니다. 이는 BIOS 구현에 따라 다르므로 마더보드 설명서를 확인하십시오.

내가 당신이라면 이 문제에 다르게 접근할 것입니다. 즉, 가상 머신에서 애플리케이션을 실행하고 필요한 코어 수를 할당할 것입니다. 이렇게 하면 호스트 운영 체제가 나머지 코어를 계속 사용할 수 있습니다.

마지막으로 echo를 14번 실행할 필요가 없습니다.

bash의 더 간단한 버전은 다음과 같습니다.

echo 0 | sudo tee /sys/devices/system/cpu/cpu{2..15}/online

마지막으로 HT가 있는 하나가 아닌 두 개의 물리적 코어를 남겨두십시오. CPU 토폴로지를 이해하려면 다음을 실행하세요.

lscpu -p

일반적으로 Linux 커널은 물리적 커널을 먼저 본 다음 HT/SMT 커널을 보지만 항상 그런지는 잘 모르겠습니다.

관련 정보