본문 바로가기
IT생활

멀티소켓 시스템에서 프로세스 선호도를 설정할 때 한 소켓의 CPU만 선택되거나, 다른 소켓의 CPU를 선택하면 기존 선택이 해제되는 문제

by 우물 밖 개구리. 2025. 2. 17.
반응형

멀티소켓 시스템에서 프로세스 선호도를 설정할 때 한 소켓의 CPU만 선택되거나, 다른 소켓의 CPU를 선택하면 기존 선택이 해제되는 문제는 몇 가지 원인 때문일 수 있습니다.

원인 및 해결 방법

1. NUMA (Non-Uniform Memory Access) 설정 문제

  • 멀티소켓 시스템에서는 NUMA 아키텍처를 사용하여 각 CPU 소켓이 특정 메모리 영역과 연결됩니다.
  • 일부 프로그램은 NUMA 영역을 넘어서는 CPU 코어를 사용하지 못하도록 제한될 수 있습니다.
  • 해결 방법:
    NUMA 정책을 확인하고 변경하는 방법:
    1. BIOS에서 NUMA 설정 확인
      • BIOS에 들어가서 "NUMA Support"를 Enabled 또는 Disabled로 변경해보세요.
      • NUMA가 꺼져 있으면 CPU가 하나처럼 동작하며, 켜져 있으면 각 소켓이 개별적으로 동작합니다.
    2. Windows NUMA 정책 변경
      • cmd 또는 PowerShell에서 다음 명령어 실행:
        Get-Process 프로그램이름 | Format-Table ProcessorAffinity
        
        → 현재 프로세스의 CPU 할당 상태를 확인.
      • ProcessorAffinity를 수동으로 수정하여 모든 코어 사용하도록 설정:
        $p = Get-Process -Name 프로그램이름
        $p.ProcessorAffinity = 0xFFFFFFFFFFFFFFFF
        

2. Windows 프로세서 그룹 제한

Windows는 한 개의 Processor Group당 최대 64개의 논리 코어(logical core)만 할당할 수 있습니다.

  • 만약 128코어(64C/128T) CPU 2개를 사용하는 시스템이라면,
    Windows는 이를 2개의 프로세서 그룹으로 나눕니다.
    (즉, Processor Group 0과 Processor Group 1로 구분됨)
  • 하지만 대부분의 프로그램은 단일 Processor Group에서만 실행되도록 설계되어 있음.

해결 방법:

  1. Windows에서 프로세서 그룹 확인
    • cmd에서 다음 명령어 실행:
      wmic cpu get DeviceID, NumberOfCores, NumberOfLogicalProcessors
      
      → 두 개의 CPU가 각각 몇 개의 논리 코어를 갖고 있는지 확인.
  2. Processor Group 정책 변경
    • PowerShell을 실행하고 다음 명령어 실행:
      $p = Get-Process -Name "프로그램이름"
      $p.ProcessorAffinity = 0xFFFFFFFFFFFFFFFF
      
      (모든 CPU 코어를 활용하도록 강제)
  3. CPU 코어 개수를 줄여 실행 (우회 방법) 만약 특정 프로그램이 하나의 Processor Group만 인식한다면,
    start /affinity 명령어로 일부 코어만 활성화하여 실행하는 방법도 있음:→ 이 방법은 Windows의 그룹 제한을 우회할 때 유용.
  4. start /affinity FFFF 프로그램.exe

3. Windows 버전에 따른 CPU 소켓 제한

Windows 버전에 따라 멀티소켓 지원이 제한될 수 있습니다.

  • Windows 10 Pro / Windows 11 Pro: 최대 2개 소켓 지원
  • Windows 10 Home: 1개 소켓만 지원
  • Windows Server / Workstation: 4개 이상 소켓 지원 가능

해결 방법:
현재 사용 중인 Windows 버전을 확인하고 Windows Server, Pro for Workstations 같은 고급 버전으로 업그레이드하면 해결될 수도 있음.


4. 일부 프로그램이 멀티소켓을 지원하지 않는 경우

일부 프로그램 (특히 GUI 기반 애플리케이션) 은 멀티소켓을 제대로 지원하지 않거나, 특정 소켓의 코어만 사용하도록 하드코딩 되어 있을 수 있음.

해결 방법:

  1. Process Lasso 같은 툴을 사용하여 강제로 모든 코어 사용 지정
    • 다운로드: https://bitsum.com/
    • 설치 후 실행하고 프로세스 선호도(Processor Affinity) 를 변경 가능
  2. 윈도우 작업 관리자에서 우회 실행
    • cmd에서 다음 명령 실행:
      start /affinity FFFF "C:\Program Files\프로그램\프로그램.exe"
      
    • 이렇게 하면 프로그램이 실행될 때 모든 소켓의 CPU를 사용하도록 강제됨.

결론

  1. NUMA 설정 확인: BIOS에서 NUMA를 비활성화하거나 Windows에서 NUMA 정책을 수정.
  2. Processor Group 제한 해결:
    • PowerShell을 사용해 ProcessorAffinity 값을 강제 설정.
    • start /affinity 옵션으로 실행.
  3. Windows 버전 확인:
    • Windows 10/11 Pro에서는 멀티소켓을 지원하지만, 가정용(Home) 버전은 제한됨.
  4. 프로그램이 멀티소켓을 지원하는지 확인:
    • Process Lasso 같은 툴로 강제할 수 있음.

이 방법들을 시도하면 두 개의 CPU 소켓을 모두 사용할 수 있을 가능성이 높습니다.

 

 

 

Windows의 Processor Group 제한 때문에 그런 현상이 발생할 가능성이 높습니다.

Windows는 한 개의 Processor Group에서 최대 64개의 논리 코어(logical processors) 만을 할당할 수 있습니다.
즉, 스레드 수(논리 코어 수)가 64개를 초과하면 자동으로 여러 개의 Processor Group으로 나뉘게 됩니다.

당신의 시스템에서 발생하는 문제

  • 듀얼 소켓 시스템 (총 72 스레드)
    • 1번 CPU (36C/72T 시스템에서 18C/36T)
    • 2번 CPU (18C/36T)
    • 72개의 논리 코어 → Windows는 Processor Group을 나눔

Windows 동작 방식:

  • Windows는 64개 이상의 논리 코어를 관리할 수 없기 때문에,
    **"Processor Group 0"과 "Processor Group 1"**으로 CPU를 나눠버림.
  • 기본적으로 프로그램들은 하나의 Processor Group에서만 실행됨.
  • 따라서, 하나의 소켓(36T)만 선택되면 다른 소켓의 코어가 자동으로 해제됨.
    (즉, 2번 CPU의 코어를 선택하면 1번 CPU의 코어가 풀리는 현상 발생)

이 문제를 해결하는 방법

1. 현재 시스템의 Processor Group 확인

현재 Windows가 CPU를 어떻게 나누고 있는지 확인하려면 cmd에서 다음 명령어 실행:

coreinfo -g

(coreinfo.exe는 Microsoft에서 제공하는 도구이며, 다운로드 링크에서 받을 수 있음.)

이 명령어를 실행하면 Processor Group 0과 1에 어떤 CPU 코어가 할당되었는지 확인 가능.


2. PowerShell을 이용한 Processor Affinity 강제 설정

기본적으로 Windows는 하나의 Processor Group에서만 실행되도록 제한하지만,
강제로 모든 코어를 사용하도록 설정할 수 있음.

$process = Get-Process -Name 프로그램이름
$process.ProcessorAffinity = 0xFFFFFFFFFFFFFFFF

이렇게 하면 프로그램이 가능한 모든 CPU 코어를 사용하도록 강제됨.


3. 프로세스 그룹을 우회하는 실행 방법

일부 프로그램들은 Windows의 Processor Group 제한을 따르기 때문에,
start /affinity 명령어를 사용해서 실행하는 방법도 있음.

start /affinity FFFF "C:\Program Files\프로그램\프로그램.exe"

이렇게 하면 프로그램이 실행될 때 특정 코어 그룹만 사용하도록 설정 가능.


4. Process Lasso 사용 (GUI 기반)

만약 GUI 환경에서 손쉽게 설정하고 싶다면,
Process Lasso 같은 툴을 사용하면 Processor Affinity를 수동으로 조정 가능.

  1. Process Lasso 설치 및 실행
  2. 실행할 프로그램을 실행한 후, Process Lasso에서 해당 프로세스를 선택
  3. 마우스 우클릭 → Processor Affinity 선택
  4. 모든 CPU 코어를 선택하여 적용

이 방법을 사용하면 특정 프로그램이 하나의 Processor Group만 사용하는 문제를 해결 가능.


5. Windows 버전 변경 고려

  • Windows 10/11 Pro에서는 Processor Group을 수동으로 조정하기 어렵고,
    서버용 Windows (Windows Server 2019/2022)에서는 멀티소켓 CPU를 더 유연하게 사용 가능.
  • 만약 Windows Server를 사용할 수 있다면,
    이 문제를 완전히 해결할 수 있음.

결론

Windows의 Processor Group 제한 때문에 CPU가 두 개의 그룹으로 나뉘고, 하나의 그룹만 선택되기 때문에 발생하는 문제임.

해결 방법 요약

  1. Processor Group을 확인 (coreinfo -g 실행)
  2. PowerShell을 이용하여 Processor Affinity 설정
  3. start /affinity 명령어로 프로그램 실행
  4. Process Lasso 같은 툴 사용
  5. Windows Server 사용 고려

이 방법을 적용하면 듀얼 소켓 시스템에서도 두 개의 CPU를 전부 활용 가능할 가능성이 높음!

 

 

 

 

Windows 10에서 Processor Group 제한(64코어 이상 지원 불가)비공식적으로 우회하는 패치나 방법은 거의 없습니다.
하지만 몇 가지 트윅 방법이 있긴 합니다.


1️⃣ 비공식 패치 방법이 있는가?

현재 Windows 10에서 Processor Group을 강제로 통합하는 비공식 패치(커널 수정 방식)는 공개적으로 존재하지 않음.
하지만 커널 패치를 직접 적용하는 방법이 연구된 적은 있음.

  • Windows 커널을 직접 수정하여 Processor Group을 강제로 하나로 합치는 방법이 이론적으로 가능
  • 하지만 Windows Update가 있을 때마다 커널 패치가 깨질 위험이 있음
  • 오픈소스로 공개된 패치는 없으며, 일부 개발자들이 Windows 10 엔터프라이즈 LTSB/LTSC에서 커널을 조작하는 연구를 진행한 적은 있음

즉, Windows 10에서 Processor Group을 강제로 통합하는 확실한 비공식 패치는 현재 존재하지 않음.


2️⃣ 우회 가능한 트윅 방법 (설정 변경)

비공식 패치는 없지만 Processor Group 문제를 우회하는 방법은 있음.

✅ (1) Processor Group 내 최대 코어 수 변경 (실험적 옵션)

Windows에는 BCDEDIT 명령어를 사용하여 일부 커널 옵션을 변경하는 방법이 있음.

bcdedit /set groupsize 64
  • Processor Group의 크기를 강제로 64코어로 지정
  • 하지만 36코어(72스레드) 시스템에서는 효과가 없을 수도 있음

✅ (2) Hyper-V 활성화 후 NUMA 노드 변경

Hyper-V를 활성화하면 Windows가 NUMA(Non-Uniform Memory Access) 노드를 다르게 설정할 수 있음.
이렇게 하면 일부 경우에서 Processor Group 제한이 우회될 수도 있음.

bcdedit /set hypervisorlaunchtype auto
bcdedit /set usefirmwarepcisettings on
bcdedit /set numaautonode off
shutdown -r -t 0
  • Hyper-V가 NUMA 노드를 다시 구성하면서 Processor Group이 달라질 가능성이 있음
  • 하지만 보장된 방법은 아님, 일부 시스템에서만 효과 있음

✅ (3) 특정 프로그램에서 Processor Group 인식하게 강제 설정

Ffmpeg 같은 일부 프로그램은 Processor Group을 자동으로 인식하지 못함.
이 경우, Processor Group Awareness를 강제 활성화하면 모든 코어를 사용할 수도 있음.

set PROCESSOR_AFFINITY=0xFFFFFFFFFFFFFFFF

또는 start /affinity 명령어를 응용하면 도움이 될 수도 있음.


3️⃣ 확실한 해결 방법

🔴 Windows 10에서는 완벽한 비공식 패치가 존재하지 않음
다만 다음 방법이 확실한 해결책임
1️⃣ Windows Server 2019/2022 사용 (Processor Group 제한 없음)
2️⃣ Proxmox 또는 VMware ESXi로 가상화하여 각 CPU에 별도 VM 할당
3️⃣ Process Lasso 사용하여 Processor Group을 직접 설정

현재로서는 Windows 10에서 커널을 직접 패치하지 않는 이상 완벽한 해결 방법은 없음.
따라서 가장 현실적인 해결책은 Windows Server를 사용하는 것.

반응형