프로세서 그룹

64비트 버전의 Windows 7 및 Windows Server 2008 R2 이상 버전의 Windows 단일 컴퓨터에서 64개 이상의 논리 프로세서를 지원합니다. 이 기능은 32비트 버전의 Windows 사용할 수 없습니다.

둘 이상의 물리적 프로세서가 있는 시스템 또는 여러 코어가 있는 물리적 프로세서가 있는 시스템은 운영 체제에 여러 논리 프로세서를 제공합니다. 논리 프로세서는 운영 체제, 애플리케이션 또는 드라이버의 관점에서 하나의 논리적 컴퓨팅 엔진입니다. 코어는 하나 이상의 논리 프로세서로 구성 될 수 있는 하나의 프로세서 단위입니다. 물리적 프로세서는 하나 이상의 코어로 구성될 수 있습니다. 물리적 프로세서는 프로세서 패키지, 소켓 또는 CPU와 동일합니다.

논리 프로세서가 64개 이상인 시스템에 대한 지원은 단일 일정 엔터티로 처리되는 최대 64개의 논리 프로세서의 정적 집합인 프로세서 그룹의 개념을 기반으로 합니다. 프로세서 그룹은 0부터 번호가 매겨집니다. 논리 프로세서가 64개 미만인 시스템에는 항상 그룹 0이라는 단일 그룹이 있습니다.

Windows Server 2008, Windows Vista, Windows Server 2003 및 Windows XP: 프로세서 그룹은 지원되지 않습니다.

시스템이 시작되면 운영 체제는 프로세서 그룹을 만들고 논리 프로세서를 그룹에 할당합니다. 시스템에서 프로세서를 핫 추가할 수 있는 경우 운영 체제는 시스템이 실행되는 동안 도착할 수 있는 프로세서에 대한 그룹 공간을 허용합니다. 운영 체제는 시스템의 그룹 수를 최소화합니다. 예를 들어 논리 프로세서가 128개인 시스템에는 각 그룹에 64개의 프로세서가 있는 두 개의 프로세서 그룹이 있고, 각 그룹에는 논리 프로세서가 32개인 4개의 그룹이 포함되지 않습니다.

성능 향상을 위해 논리 프로세서를 그룹에 할당할 때 운영 체제는 물리적 지역성을 고려합니다. 가능하면 코어의 모든 논리 프로세서와 물리적 프로세서의 모든 코어가 동일한 그룹에 할당됩니다. 물리적으로 서로 가까운 실제 프로세서는 동일한 그룹에 할당됩니다. 노드의 용량이 최대 그룹 크기를 초과하지 않는 한 NUMA 노드는 단일 그룹에 할당됩니다. 자세한 내용은 NUMA 지원을 참조하세요.

프로세서가 64개 이하인 시스템에서는 기존 애플리케이션이 수정 없이 올바르게 작동합니다. 프로세서 선호도 마스크 또는 프로세서 번호를 사용하는 함수를 호출하지 않는 애플리케이션은 프로세서 수에 관계없이 모든 시스템에서 올바르게 작동합니다. 64개 이상의 논리 프로세서가 있는 시스템에서 올바르게 작동하려면 다음과 같은 종류의 애플리케이션을 수정해야 할 수 있습니다.

  • 전체 시스템에 대한 프로세서별 정보를 관리, 유지 관리 또는 표시하는 애플리케이션은 64개 이상의 논리 프로세서를 지원하도록 수정해야 합니다. 이러한 애플리케이션의 예로는 시스템의 각 프로세서 워크로드를 표시하는 Windows 작업 관리자가 있습니다.
  • 성능이 중요하고 64개 이상의 논리 프로세서를 초과하여 효율적으로 확장할 수 있는 애플리케이션은 이러한 시스템에서 실행되도록 수정해야 합니다. 예를 들어 데이터베이스 애플리케이션은 수정의 이점을 누릴 수 있습니다.
  • 애플리케이션에서 프로세서별 데이터 구조가 있는 DLL을 사용하고 DLL이 64개 이상의 논리 프로세서를 지원하도록 수정되지 않은 경우 DLL에서 내보낸 함수를 호출하는 애플리케이션의 모든 스레드를 동일한 그룹에 할당해야 합니다.

기본적으로 애플리케이션은 단일 그룹으로 제한되므로 일반적인 애플리케이션에 충분한 처리 기능을 제공해야 합니다. 운영 체제는 처음에 각 프로세스를 시스템의 그룹 전체에서 라운드 로빈 방식으로 단일 그룹에 할당합니다. 프로세스는 한 그룹에 할당된 실행을 시작합니다. 프로세스의 첫 번째 스레드는 처음에 프로세스가 할당된 그룹에서 실행됩니다. 새로 만든 각 스레드는 스레드를 만든 스레드와 동일한 그룹에 할당됩니다.

64개 이상의 프로세서에서 실행할 수 있도록 여러 그룹을 사용해야 하는 애플리케이션은 스레드를 실행할 위치를 명시적으로 결정해야 하며 스레드의 프로세서 친화성을 원하는 그룹으로 설정해야 합니다. INHERIT_PARENT_AFFINITY 플래그를 사용하여 새 프로세스에 대한 선호도를 생성할 부모 프로세스(현재 프로세스와 다를 수 있음)를 지정할 수 있습니다. 프로세스가 단일 그룹에서 실행되는 경우 동일한 그룹에 남아 있는 동안 GetProcessAffinityMaskSetProcessAffinityMask를 사용하여 선호도 를 읽고 수정할 수 있습니다. 프로세스 선호도가 수정되면 새 선호도가 해당 스레드에 적용됩니다.

createRemoteThreadEx 함수와 함께 PROC_THREAD_ATTRIBUTE_GROUP_AFFINITY 확장 특성을 사용하여 만들 때 스레드의 선호도를 지정할 수 있습니다. 스레드를 만든 후 SetThreadAffinityMask 또는 SetThreadGroupAffinity 를 호출하여 해당 선호도를 변경할 수 있습니다. 스레드가 프로세스와 다른 그룹에 할당된 경우 프로세스의 선호도는 스레드의 선호도를 포함하도록 업데이트되고 프로세스는 다중 그룹 프로세스가 됩니다. 개별 스레드에 대해 추가 선호도 변경이 이루어져야 합니다. SetProcessAffinityMask를 사용하여 다중 그룹 프로세스의 선호도를 수정할 수 없습니다. GetProcessGroupAffinity 함수는 프로세스와 해당 스레드가 할당된 그룹 집합을 검색합니다.

작업 개체와 연결된 모든 프로세스에 대한 선호도를 지정하려면 JobObjectGroupInformation 또는 JobObjectGroupInformationEx 정보 클래스와 함께 SetInformationJobObject 함수를 사용합니다.

논리 프로세서는 그룹 번호와 그룹 상대 프로세서 번호로 식별됩니다. PROCESSOR_NUMBER 구조체 로 표시됩니다. 레거시 함수에서 사용되는 숫자 프로세서 번호는 그룹 상대입니다.

64개 이상의 프로세서를 지원하기 위한 운영 체제 아키텍처 변경에 대한 논의는 64개 이상의 프로세서가 있는 시스템을 지원하는 백서를 참조하세요.

프로세서 그룹을 지원하는 새 함수 및 구조의 목록은 프로세스 및 스레드의 새로운 기능을 참조하세요.

Windows 11 및 Windows Server 2022로 시작하는 동작

참고

Windows 11 및 Windows Server 2022부터는 애플리케이션이 기본적으로 단일 프로세서 그룹으로 제한되지 않습니다. 대신 프로세스와 해당 스레드에는 기본적으로 시스템의 모든 프로세서에 걸쳐 64개 이상의 프로세서가 있는 컴퓨터의 여러 그룹에 걸쳐 있는 프로세서 친화성이 있습니다.

애플리케이션이 64개 이상의 프로세서가 있는 컴퓨터의 모든 프로세서를 자동으로 활용하기 위해 Windows 11 및 Windows Server 2022부터 OS는 프로세스를 만들기 위해 변경되었으며 해당 스레드는 기본적으로 모든 프로세서 그룹에 걸쳐 시스템의 모든 프로세서에 걸쳐 있습니다. 즉, 애플리케이션은 더 이상 여러 프로세서 그룹에 액세스하기 위해 스레드의 친화력을 명시적으로 설정할 필요가 없습니다.

호환성을 위해 OS는 프로세스와 스레드 모두에 대해 새로운 기본 그룹 개념을 사용합니다. 각 프로세스는 생성 시 기본 그룹에 할당되며 기본적으로 모든 스레드의 기본 그룹은 동일합니다. 각 스레드의 이상적인 프로세서는 스레드의 기본 그룹에 있으므로 스레드는 기본 그룹의 프로세서에 우선적으로 예약되지만 다른 그룹의 프로세서로 예약할 수 있습니다. 그룹 인식이 아니거나 단일 그룹에서 작동하는 선호도 API는 기본 그룹을 프로세스/스레드 프로세서 그룹으로 암시적으로 사용합니다. 새 동작에 대한 자세한 내용은 주의 섹션을 참조하세요.

애플리케이션은 CPU 집합 을 사용하여 여러 프로세서 그룹에 대한 프로세스 또는 스레드의 선호도를 효과적으로 관리할 수 있습니다.

다중 프로세서

NUMA 지원