우리는 단지처음 6개 CPU. RHEL 머신이 있습니다.
총 12개의 코어가 있는 물리적 DELL 시스템이 있습니다( lscpu
).
프로세스가 처음 6개의 코어만 사용하도록 지정할 수 있습니까?
또는 마지막 6개 코어를 마스킹하여 실제로 사용할 수 있는 다른 방법처음 6개 코어, 또는 마지막 6개 코어를 비활성화합니다.
노트: 진짜 이유는 코어당 비용을 지불하기 때문입니다. 전체 코어의 절반을 사용할 수 있으면 가격의 절반만 지불하면 됩니다.
답변1
이 용어는CPU 선호도. 이 taskset
명령을 사용하여 개별 프로세스에 대해 설정할 수 있습니다 .
<command>
처음 6개 코어에서만 실행(코어 #0-#5):
taskset -c 0-5 <command> [arguments for command]
프로세스가 이미 실행 중인 경우 PID를 통해 선호도를 설정할 수 있습니다.
taskset -c 0-5 -p <PID of an existing process>
특정 프로세스에 적용되는 제한을 원하는 경우및 모든 하위 프로세스, 그러면 Stephen Kitt가 의견에서 언급한 것처럼 cgroup이 필요합니다. 문제의 프로세스가 systemd
서비스로 실행 중인 경우 해당 파일의 섹션 CPUAffinity=0-5
에 추가 하거나 오버레이 파일을 생성하면 됩니다.[Service]
.service
하지만 사용되는 코어 수를 제한해야 하는 경우라이센스 목적으로, 관련 소프트웨어 공급업체에서 어떤 방법을 허용하는지 확인해야 합니다. 쉽게 취소할 수 없는 방법이 필요할 수도 있고, 소프트웨어가 매일 사용하는 코어 수(최대)에 대한 일일 보고와 같은 메커니즘이 필요할 수도 있습니다.
답변2
예, RedHat 시스템에서는 일반적으로 다음을 사용합니다.numactl
프로세스가 특정 CPU에 바인딩된다는 것을 보장하지는 않지만(필요한 CPU를 사용할 수 없는 경우 다른 CPU에 바인딩을 허용하기 때문에) 최선의 방식으로 바인딩하도록 작업 시작을 구성합니다. 프로세스가 잠자기) 재시작 원하는 CPU에 바인딩합니다.
이 경우 CPU는 물리적인 항목이 아니라 "프로그램을 실행할 수 있는 것"을 의미합니다. 이는 (이 대화에서) 실제 코어가 하나의 CPU이고, 하이퍼스레딩이 또 다른 CPU이며, 물리적 패키지에 많은 CPU가 있는 경우가 많다는 것을 의미합니다. 이러한 CPU 목록을 얻으려면:
cat /proc/cpuinfo
numactl --hardware
하드웨어 레이아웃을 표시합니다. 각 노드는 "메모리 경계"입니다. 즉, 일부 CPU가 다른 CPU보다 더 빠르게 액세스할 수 있는 격리된 RAM 비트라는 의미입니다. 그 이유는 일반적으로 한 세트의 CPU에서 직접 액세스할 수 있는 반면 다른 CPU는 해당 RAM 비트에 액세스하기 위해 이러한 경계를 넘어 요청을 해야 하기 때문입니다.numactl
특정 메모리 경계만 직접 사용할 수도 있기 때문에 이는 중요합니다 . 특정 CPU를 지정하는 경우 CPU-로컬 메모리 경계를 지정하는 것이 가장 좋습니다.numactl --physcpubind=0-7 <command>
<command>
일반적으로 코어 0~7에서 실행하는 모든 항목을 실행합니다 .numactl --physcpubind=0,7 <command>
<command>
코어 0 또는 7에서 시작됩니다.
물론 두 경우 모두 운영 체제에서 코어를 사용할 수 없다고 판단하고 실행을 지연시키는 대신 지정되지 않은 코어에서 프로그램을 시작하는 "코어 손실"이 발생할 수 있습니다. 이 numactl
옵션은 메모리 위치의 보다 명시적인 바인딩을 허용 --localalloc
하면서 코어 로컬 메모리를 사용하려고 시도합니다 .--membind=...
numastat
시작된 프로세스의 합계를 통계 형식으로 표시합니다 numa_hits
. 특정 프로세스가 히트 또는 누락되었는지 확인하려면 프로세스가 종료되기 전에 파일 시스템에서 세부 정보를 읽어야 합니다.numa_misses
numactl
/proc
답변3
라이센스 비용을 피하려면 소프트웨어가 실행되는 CPU를 제한해도 소프트웨어의 핵심 계측에 영향을 미치지 않을 수 있습니다. 소프트웨어가 특정 코어에서만 실행되도록 요청할 수 있지만 소프트웨어는 모든 코어를 감지하고 라이센스/허용 구성과 비교하여 해당 수를 확인합니다.
원하는 방식으로 작동하게 하려면 두 운영 체제를 동일한 하드웨어 플랫폼에 배치하여 HyperVisor를 설치하는 것이 좋습니다. 일부 HyperVisor(예: XEN)는 하드웨어를 강력하게 분할할 수 있지만 다른 HyperVisor는 그렇지 않습니다. 다른 하이퍼바이저 솔루션보다 하드웨어(단일 가상 머신만 지원하도록 구성된 하드웨어)를 강력하게 분할하는 솔루션을 사용하면 더 큰 성공을 거둘 수 있습니다.
여기에는 몇 가지 요구 사항이 있습니다. CPU는 두 개 이상의 패키지(실제 CPU 칩)에 대략적으로 분산되어야 CPU의 강력한 분할이 작동할 수 있고 나머지 시스템은 이 응용 프로그램에 예약된 부분에 액세스할 수 없습니다. 제한 사항으로 인해 100% 이상적인 것은 아니지만 제한 사항을 감수할 수 있다면 새 기계를 구입하는 것보다 낫습니다.
행운을 빌어요. 이 솔루션을 사용해 보기 전에는 이 솔루션이 귀하의 애플리케이션에 적합한지 여부를 100% 아는 것이 종종 불가능합니다.