다중 프로세서 그룹 지원용 드라이버 테스트를 위한 부팅 매개 변수

Windows 7 및 Windows Server 2008 R2는 프로세서 수가 64개가 넘는 컴퓨터를 지원합니다. 이 지원은 프로세서 그룹(영문)의 도입으로 가능해졌습니다. 테스트를 위해 그룹 크기를 제한하여 여러 개의 논리 프로세서를 가진 컴퓨터가 여러 프로세서 그룹을 갖도록 구성할 수 있습니다. 즉, 64개 이하의 논리 프로세서를 가진 컴퓨터의 드라이버 및 구성 요소에 대해 다중 프로세서 그룹 호환성을 테스트할 수 있습니다.

참고   Windows 7에서 도입된 프로세서 그룹 개념을 사용하면 기존 API 및 DDI를 64를 초과하는 논리 프로세서를 가진 컴퓨터에서 계속 사용할 수 있습니다. 일반적으로 그룹의 프로세서는 64비트 선호도 마스크로 표시됩니다. 논리 프로세서가 64개를 초과하는 컴퓨터에는 반드시 여러 개의 그룹이 있습니다.

프로세스를 만들면 프로세스가 특정 그룹에 할당됩니다. 기본적으로 프로세스 스레드의 선호도를 명시적으로 변경할 수 있지만 프로세스 스레드는 동일한 그룹의 모든 논리 프로세서에서 실행될 수 있습니다. 선호도 마스크 또는 프로세서 번호(그룹 번호 아님)를 인수로 가져오는 API 또는 DDI 호출은 호출하는 스레드의 그룹에 속한 프로세서에만 적용되고 해당 프로세서에 대해서만 보고합니다. 선호도 마스크 또는 프로세서 번호를 반환하는 API 또는 DDI(예: GetSystemInfo)의 경우도 마찬가지입니다.

Windows 7부터 응용 프로그램 또는 드라이버는 레거시 API를 확장하는 기능을 사용할 수 있습니다. 이 새 그룹 인식 기능은 그룹 번호 인수를 통해 프로세서 번호 또는 선호도 마스크를 명확하게 한정하므로 호출하는 스레드 그룹에 속하지 않는 프로세서를 조작할 수 있습니다. 동일한 컴퓨터 내의 다른 그룹에서 실행 중인 드라이버와 구성 요소 간의 조작으로 인해 레거시 API 또는 DDI가 포함될 경우 버그가 발생할 수 있습니다. Windows 7 및 Windows Server 2008 R2에서는 그룹 인식 기능이 없는 레거시 API를 사용할 수 있습니다. 드라이버 요구 사항은 보다 엄격합니다. 프로세서 그룹이 여러 개 있는 컴퓨터에서 드라이버 기능을 수정하려면 해당 프로세서 그룹 없이 프로세서 번호 또는 마스크를 매개 변수로 수락하거나 해당 프로세서 그룹 없이 프로세서 번호 또는 마스크를 반환하는 DDI를 교체해야 합니다. 적외선 그룹이 호출하는 스레드에 필요한 그룹과 다를 수 있기 때문에 그룹 인식 기능이 없는 이러한 레거시 DDI는 프로세스 그룹이 여러 개인 컴퓨터에 올바르게 수행되지 않을 수 있습니다. 따라서 이러한 레거시 DDI를 사용하는 Windows Server 2008 R2용 드라이버는 새로 확장된 인터페이스 버전을 사용하도록 업데이트해야 합니다. 프로세서 선호도 마스크 또는 프로세서 번호를 사용하는 기능을 호출하지 않는 드라이버는 프로세서 수에 상관없이 올바르게 작동합니다. 새 DDI를 호출하는 드라이버는 procgrp.h 헤더를 포함하고 WdmlibProcgrpInitialize를 호출하고 프로세서 그룹 호환성 라이브러리(procgrp.lib)에 연결하여 이전 버전의 Windows에서 실행될 수 있습니다.

새 그룹 인식 API 및 DDI에 대한 자세한 내용을 보려면 WHDC에서 64개를 초과하는 논리 프로세서를 가진 시스템 지원: 개발자 지침(영문) 백서를 다운로드하세요.

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

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

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개 있는 경우 groupsize를 2로 설정하면 논리 프로세서가 각각 2개인 프로세서 그룹 4개가 만들어집니다.

그룹 0: 2개의 논리 프로세서로 구성된 1개의 패키지를 포함하는 1개의 NUMA 모드

그룹 1: 2개의 논리 프로세서로 구성된 1개의 패키지를 포함하는 1개의 NUMA 모드

그룹 2: 2개의 논리 프로세서로 구성된 1개의 패키지를 포함하는 1개의 NUMA 모드

그룹 3: 2개의 논리 프로세서로 구성된 1개의 패키지를 포함하는 1개의 NUMA 모드

비 NUMA 컴퓨터가 NUMA 노드 하나를 갖는 것으로 간주되는 것은 의도적인 것입니다. NUMA 노드는 그룹을 확장할 수 없으므로 컴퓨터를 다시 시작하면 그룹별로 노드가 하나씩 만들어집니다.

groupsize를 실제 프로세서 패키지(소켓)의 논리 프로세서 수보다 작은 값으로 설정한 경우 시스템을 다시 시작하면 패키지가 그룹을 확장하지 않도록 패키지 개념이 다시 정의됩니다. 즉, 프로세서 토폴로지 API가 실제 수보다 많은 패키지를 보고합니다. 또한 groupsize를 설정하면 Windows(패키지 수준) 프로세서 라이선스 제한으로 인해 일부 프로세서 패키지가 시작되지 않을 수 있습니다.

프로세서 패키지에 NUMA 노드가 여러 개 정의되어 있고 시스템에서 이러한 노드를 다른 그룹에 할당한 경우 프로세서 패키지가 그룹을 확장할 수 있습니다.

Windows는 지원되는 그룹 수를 제한합니다. 새로운 버전의 Windows 또는 서비스 팩 릴리스에서는 이 수가 변경될 수 있습니다. 드라이버 또는 구성 요소 수가 Windows에서 일관되게 지원하는 그룹 수에 종속되어서는 안 됩니다. groupsize 부팅 옵션을 작은 값으로 설정한 경우 그룹 수 제한에 따라 시작하도록 허용되는 논리 프로세서 수가 제한될 수 있습니다.

테스트에 사용된 groupsize 설정을 제거하고 기본 설정(그룹당 논리 프로세서 64개)으로 되돌리려면 다음 BCDEdit 명령을 사용합니다.


bcdedit.exe /deletevalue groupsize

이 명령은 groupsize를 64로 설정하는 것과 동일합니다.

프로세서 그룹 수 최대화

maxgroup 옵션을 사용하여 여러 논리 프로세서 및 NUMA 노드를 가진 컴퓨터에서 프로세서 그룹을 만들 수도 있습니다. maxgroup 부팅 옵션은 비 NUMA 컴퓨터에는 적용되지 않습니다.

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


bcdedit.exe /set maxgroup on

예를 들어 NUMA 노드 2개, 노드당 프로세서 패키지 1개, 패키지당 프로세서 코어 4개 및 총 논리 프로세서 수가 8개인 컴퓨터가 있다고 가정합니다.

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

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

bcdedt.exe /set maxgroup on 명령을 입력한 후 다시 시작하면 다음과 같은 그룹 구성이 생성됩니다.

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

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

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

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


bcdedit.exe /set maxgroup off

그룹 인식 부팅 옵션을 설정하여 다중 그룹 호환성 테스트

Windows 7 및 Windows Server 2008 R2에서는 프로세서 그룹이 여러 개인 환경에서 드라이버 및 구성 요소가 여러 그룹을 인식할 수 있도록 새로운 BCD 옵션(groupaware)을 도입했습니다. groupaware 옵션은 장치 드라이버의 기능을 변경하여 드라이버 및 구성 요소의 그룹 간 비호환성을 노출할 수 있습니다. groupaware 부팅 옵션을 groupsizemaxgroup 옵션과 함께 사용하여 컴퓨터의 활성 논리 프로세서가 64개 이하일 때 드라이버와 여러 그룹 간의 호환성을 테스트할 수 있습니다.

groupaware 부팅 옵션을 설정하면 운영 체제는 프로세스가 그룹 0이 아닌 다른 그룹에서 시작되는지를 확인합니다. 그러면 드라이버와 구성 요소 사이의 그룹 간 조작 기회가 높아집니다. 또한 이 옵션은 그룹을 인식하지 않는 레거시 함수 KeSetTargetProcessorDpc, KeSetSystemAffinityThreadExKeRevertToUserAffinityThreadEx가 활성 논리 프로세서를 포함하는 가장 높은 번호의 그룹에서 항상 작동하도록 함수의 동작을 수정합니다. 레거시 함수를 호출하는 드라이버를 그룹 인식 함수(KeSetTargetProcessorDpcEx, KeSetSystemGroupAffinityThread, KeRevertToUserGroupAffinityThread)를 호출하도록 변경해야 합니다,

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


bcdedit.exe /set groupaware on

레거시 그룹 비인식 기능Windows 7 그룹 인식 대체

KeSetTargetProcessorDpc

KeSetTargetProcessorDpcEx

KeSetSystemAffinityThreadEx

KeSetSystemGroupAffinityThread

KeRevertToUserAffinityThreadEx

KeRevertToUserGroupAffinityThread

 

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


bcdedit.exe /set groupaware off

 

 

표시:
© 2015 Microsoft