여러 프로세서 그룹 지원을 위해 드라이버를 테스트하는 부팅 매개 변수

Windows 7 및 Windows Server 2008 R2는 프로세서가 64개 이상인 컴퓨터에 대한 지원을 제공합니다. 이 지원은 프로세서 그룹을 도입하여 가능합니다. 테스트 목적으로 그룹 크기를 제한하여 여러 논리 프로세서가 있는 모든 컴퓨터를 여러 프로세서 그룹을 사용하도록 구성할 수 있습니다. 즉, 논리 프로세서가 64개 이하인 컴퓨터에서 여러 프로세서 그룹 호환성을 위해 드라이버 및 구성 요소를 테스트할 수 있습니다.

참고 Windows 7에서 도입된 프로세서 그룹의 개념을 통해 기존 API 및 DDI는 64개 이상의 논리 프로세서가 있는 컴퓨터에서 계속 작동할 수 있습니다. 일반적으로 그룹의 프로세서는 64비트 길이의 선호도 마스크로 표시됩니다. 논리 프로세서가 64개를 초과하는 모든 컴퓨터에는 반드시 둘 이상의 그룹이 있어야 합니다. 프로세스가 만들어지면 프로세스가 특정 그룹에 할당됩니다. 스레드 선호도는 명시적으로 변경할 수 있지만 기본적으로 프로세스의 스레드는 동일한 그룹의 모든 논리 프로세서에서 실행할 수 있습니다. 선호도 마스크 또는 프로세서 번호를 인수로 사용하지만 그룹 번호는 사용하지 않는 API 또는 DDI에 대한 호출은 호출 스레드 그룹의 해당 프로세서에 영향을 주거나 보고하는 것으로 제한됩니다. 선호도 마스크 또는 프로세서 번호(예: GetSystemInfo)를 반환하는 API 또는 DDI도 마찬가지입니다.

Windows 7부터 애플리케이션 또는 드라이버는 레거시 API를 확장하는 함수를 사용할 수 있습니다. 이러한 새 그룹 인식 함수는 프로세서 번호 또는 선호도 마스크를 명확하게 한정하기 위해 그룹 번호 인수를 허용하므로 호출 스레드 그룹 외부의 프로세서를 조작할 수 있습니다. 컴퓨터 내의 다른 그룹에서 실행되는 드라이버와 구성 요소 간의 상호 작용은 레거시 API 또는 DDI가 관련될 때 버그가 발생할 가능성이 있습니다. Windows 7 및 Windows Server 2008 R2에서 레거시 비그룹 인식 API를 사용할 수 있습니다. 그러나 드라이버 요구 사항은 더 엄격합니다. 둘 이상의 프로세서 그룹이 있는 컴퓨터에서 드라이버의 기능적 정확성을 위해 함께 제공되는 프로세서 그룹 없이 프로세서 번호 또는 마스크를 매개 변수로 허용하거나 함께 제공되는 프로세서 그룹 없이 프로세서 번호 또는 마스크를 반환하는 모든 DDI를 교체해야 합니다. 유추된 그룹이 호출 스레드가 의도한 것과 다를 수 있으므로 이러한 레거시 비그룹 인식 DPI는 여러 프로세스 그룹이 있는 컴퓨터에서 불규칙하게 수행할 수 있습니다. 따라서 이러한 레거시 DDI를 사용하고 Windows Server 2008 R2를 대상으로 하는 드라이버는 새 확장 버전의 인터페이스를 사용하도록 업데이트해야 합니다. 프로세서 선호도 마스크 또는 프로세서 번호를 사용하는 함수를 호출하지 않는 드라이버는 프로세서 수에 관계없이 올바르게 작동합니다. 새 DDI를 호출하는 드라이버는 procgrp.h 헤더를 포함하고, WdmlibProcgrpInitialize를 호출하고, 프로세서 그룹 호환성 라이브러리 (procgrp.lib)에 연결하여 이전 버전의 Windows에서 실행할 수 있습니다.

새 그룹 인식 API 및 DDI에 대한 자세한 내용은 64개 이상의 논리 프로세서가 있는 시스템 지원 백서를 다운로드하세요. 개발자를 위한 지침입니다.

드라이버 및 구성 요소에서 잠재적인 프로세서 그룹 관련 문제를 식별하기 위해 BCDEdit /set 옵션을 사용할 수 있습니다. 두 BCD 부팅 구성 설정인 groupsizemaxgroup은 여러 프로세서 그룹을 지원하도록 여러 논리 프로세서가 있는 모든 컴퓨터를 구성할 수 있습니다. groupaware 옵션은 특정 DPI의 동작을 수정하고 테스트 목적으로 그룹 환경을 조작합니다.

그룹 크기를 변경하여 여러 프로세서 그룹 만들기

groupsize 옵션은 그룹의 최대 논리 프로세서 수를 지정합니다. 기본적으로 groupsize 옵션은 설정되지 않으며 논리 프로세서가 64개 이하인 컴퓨터에는 그룹 0인 하나의 그룹이 있습니다.

참고 물리적 프로세서 또는 프로세서 패키지에는 하나 이상의 코어 또는 프로세서 단위가 있을 수 있으며, 각 프로세서에는 하나 이상의 논리 프로세서가 포함될 수 있습니다. 운영 체제는 논리 프로세서를 하나의 논리 컴퓨팅 엔진으로 간주합니다.

여러 프로세서 그룹을 만들려면 관리자 권한 명령 프롬프트 창에서 BCDEdit /set를 실행하고 총 논리 프로세서 수보다 작은 groupsize에 대해 새 maxsize 값을 지정합니다. 그룹 크기 설정은 테스트를 위한 것이며 이 설정을 사용하여 배송 시스템을 구성해서는 안 됩니다. maxsize 값은 1에서 64 사이의 모든 전원 2로 설정할 수 있습니다. 명령은 다음 구문을 사용합니다.

bcdedit.exe /set groupsize maxsize

예를 들어 다음 명령은 그룹의 최대 프로세서 수를 2로 설정합니다.

bcdedit.exe /set groupsize 2

NUMA가 아닌 컴퓨터에 8개의 논리 프로세서가 있는 경우 그룹화를 2로 설정하면 각각 2개의 논리 프로세서가 있는 4개의 프로세서 그룹이 만들어집니다.

그룹 0: 논리 프로세서 2개 패키지 1개 포함 NUMA 노드 1개

그룹 1: 논리 프로세서 2개 패키지 1개 포함 NUMA 노드 1개

그룹 2: 논리 프로세서 2개 패키지 1개 포함 NUMA 노드 1개

그룹 3: 논리 프로세서 2개 패키지 1개 포함 NUMA 노드 1개

기본적으로 비 NUMA 컴퓨터는 하나의 NUMA 노드가 있는 것으로 간주됩니다. NUMA 노드는 그룹을 확장할 수 없으므로 컴퓨터를 다시 시작한 후 시스템에서 각 그룹에 대한 노드를 만듭니다.

groupsize가 물리적 프로세서 패키지(소켓)의 논리 프로세서 수보다 작은 값으로 설정된 경우 시스템은 패키지가 그룹에 걸쳐 있지 않도록 다시 시작할 때 패키지의 개념을 다시 정의합니다. 즉, 실제로 존재하는 것보다 많은 패키지가 프로세서 토폴로지 API에 의해 보고됩니다. 이는 또한 Windows(패키지 수준) 프로세서 라이선스 제한으로 인해 그룹화 가 설정될 때 일부 프로세서 패키지가 시작되지 않을 수 있음을 의미합니다.

프로세서 패키지 내에 여러 NUMA 노드가 정의되어 있고 시스템이 이러한 노드를 다른 그룹에 할당하는 경우 프로세서 패키지는 그룹에 걸쳐 있습니다.

Windows는 지원되는 그룹 수를 제한합니다. 이 숫자는 새 버전의 Windows 또는 서비스 팩 릴리스에서 변경될 수 있습니다. 드라이버 또는 구성 요소는 Windows가 상수로 지원하는 그룹 수에 의존해서는 안 됩니다. 그룹 수 제한은 그룹화 부팅 옵션에 작은 값이 사용될 때 시작할 수 있는 논리 프로세서 수를 제한할 수 있습니다.

테스트에 사용한 그룹화 설정을 제거하고 그룹당 64개의 논리 프로세서의 기본 설정으로 돌아가려면 다음 BCDEdit 명령을 사용합니다.

bcdedit.exe /deletevalue groupsize

이 명령은 groupsize 를 64로 설정하는 것과 같습니다.

프로세서 그룹 수 최대화

maxgroup 옵션은 여러 논리 프로세서 및 NUMA 노드가 있는 컴퓨터에서 프로세서 그룹을 만드는 또 다른 방법입니다. maxgroup 부팅 옵션은 NUMA가 아닌 컴퓨터에는 영향을 주지 않습니다.

그룹 수를 최대화하려면 관리자 권한 명령 프롬프트 창에서 BCDEdit /set 명령을 실행합니다. 명령은 다음 구문을 사용합니다.

bcdedit.exe /set maxgroup on

예를 들어 총 8개의 논리 프로세서에 대해 NUMA 노드 2개, 노드당 프로세서 패키지 1개, 패키지당 4개의 프로세서 코어가 있는 컴퓨터를 생각해 보세요.

기본 그룹 구성은 다음과 같습니다.

그룹 0: 논리 프로세서 8개, 패키지 2개, NUMA 노드 2개

명령에bcdedt.exe /set maxgroup을 입력한 후 다시 시작하면 명령은 다음 그룹 구성을 생성합니다.

그룹 0: 논리 프로세서 4개, 패키지 1개, NUMA 노드 1개

그룹 1: 논리 프로세서 4개, 패키지 1개, NUMA 노드 1개

NUMA 노드는 그룹 수를 최대화하는 방식으로 그룹에 할당됩니다.

기본 설정으로 다시 변경하려면 다음 BCDEdit 명령을 사용합니다.

bcdedit.exe /set maxgroup off

그룹 인식 부팅 옵션을 설정하여 Multiple-Group 호환성 테스트

Windows 7 및 Windows Server 2008 R2에는 드라이버와 구성 요소가 여러 프로세서 그룹 환경에서 여러 그룹을 인식하도록 하는 새로운 BCD 옵션(groupaware)이 도입되었습니다. groupaware 옵션은 드라이버 및 구성 요소에서 그룹 간 비호환성을 노출하는 데 도움이 되도록 디바이스 드라이버 함수 집합의 동작을 변경합니다. groupaware boot 옵션을 groupizemaxgroup 옵션과 함께 사용하여 컴퓨터에 활성 논리 프로세서가 64개 이하인 경우 여러 그룹과 드라이버 호환성을 테스트할 수 있습니다.

groupaware boot 옵션이 설정되면 운영 체제는 그룹 0 이외의 그룹에서 프로세스가 시작되도록 합니다. 이렇게 하면 드라이버와 구성 요소 간의 그룹 간 상호 작용 가능성이 높아질 수 있습니다. 또한 옵션은 그룹 인식되지 않는 레거시 함수, KeSetTargetProcessorDpc, KeSetSystemAffinityThreadExKeRevertToUserAffinityThreadEx의 동작을 수정하여 활성 논리 프로세서를 포함하는 가장 높은 번호의 그룹에서 항상 작동합니다. 이러한 레거시 함수를 호출하는 드라이버는 그룹 인식 대응(KeSetTargetProcessorDpcEx, KeSetSystemGroupAffinityThreadKeRevertToUserGroupAffinityThread)을 호출하도록 변경해야 합니다.

호환성을 테스트하려면 다음 BCDEdit /set 명령을 사용합니다.

bcdedit.exe /set groupaware on
레거시 비그룹 인식 함수 Windows 7 그룹 인식 대체

KeSetTargetProcessorDpc

KeSetTargetProcessorDpcEx

KeSetSystemAffinityThreadEx

KeSetSystemGroupAffinityThread

KeRevertToUserAffinityThreadEx

KeRevertToUserGroupAffinityThread

컴퓨터를 기본 설정으로 다시 설정하려면 다음 BCDEdit 명령을 사용합니다.

bcdedit.exe /set groupaware off