Compartilhar via


Parâmetros de inicialização para testar drivers para suporte a vários grupos de processadores

O Windows 7 e o Windows Server 2008 R2 dão suporte a computadores com mais de 64 processadores. Esse suporte é possível introduzindo grupos de processadores. Para fins de teste, você pode configurar qualquer computador que tenha vários processadores lógicos para ter vários grupos de processadores limitando o tamanho do grupo. Isso significa que você pode testar drivers e componentes para compatibilidade de vários grupos de processadores em computadores com 64 ou menos processadores lógicos.

Nota O conceito de grupos de processadores, introduzido com o Windows 7, permite que APIs e DDIs existentes continuem a funcionar em computadores com mais de 64 processadores lógicos. Normalmente, os processadores de um grupo são representados por uma máscara de afinidade, que tem 64 bits de comprimento. Qualquer computador com mais de 64 processadores lógicos terá necessariamente mais de um grupo. Quando um processo é criado, o processo é atribuído a um grupo específico. Por padrão, os threads do processo podem ser executados em todos os processadores lógicos do mesmo grupo, embora a afinidade de thread possa ser alterada explicitamente. Chamadas para qualquer API ou DDI que usa uma máscara de afinidade ou número de processador como um argumento, mas não um número de grupo, está limitada a afetar ou relatar esses processadores no grupo do thread de chamada. O mesmo vale para APIs ou DDIs que retornam uma máscara de afinidade ou um número de processador, como GetSystemInfo.

A partir do Windows 7, um aplicativo ou driver pode usar funções que estendem as APIs herdadas. Essas novas funções com reconhecimento de grupo aceitam um argumento de número de grupo para qualificar sem ambiguidade um número de processador ou máscara de afinidade e, portanto, podem manipular processadores fora do grupo do thread de chamada. A interação entre drivers e componentes em execução em grupos diferentes dentro de um computador apresenta o potencial de bugs quando APIs herdadas ou DDIs estão envolvidos. Você pode usar as APIs herdadas sem reconhecimento de grupo no Windows 7 e no Windows Server 2008 R2. No entanto, os requisitos de driver são mais rigorosos. Para a correção funcional de drivers em computadores que têm mais de um grupo de processadores, você deve substituir qualquer DDI que aceite um número de processador ou máscara como um parâmetro sem um grupo de processadores que acompanha ou retorne um número de processador ou máscara sem um grupo de processadores que o acompanha. Esses DDIs herdados sem reconhecimento de grupo podem ser executados de forma errática em um computador que tem vários grupos de processos porque o grupo inferido pode ser diferente do que o thread de chamada pretendia. Portanto, os drivers que usam esses DDIs herdados e são direcionados para o Windows Server 2008 R2 devem ser atualizados para usar as novas versões estendidas das interfaces. Os drivers que não chamam funções que usam máscaras de afinidade de processador ou números de processador funcionarão corretamente, independentemente do número de processadores. Os drivers que chamam os novos DDIs podem ser executados em versões anteriores do Windows incluindo o cabeçalho procgrp.h, chamando WdmlibProcgrpInitialize e vinculando-se à Biblioteca de Compatibilidade do Grupo de Processadores (procgrp.lib).

Para obter mais informações sobre as novas APIs e DDIs com reconhecimento de grupo, baixe o white paper Sistemas de suporte que têm mais de 64 processadores lógicos: diretrizes para desenvolvedores.

Para ajudar a identificar possíveis problemas relacionados ao grupo de processadores em drivers e componentes, você pode usar as opções BCDEdit /set . As duas definições de configuração de inicialização BCD, groupsize e maxgroup, podem configurar qualquer computador que tenha vários processadores lógicos para dar suporte a vários grupos de processadores. A opção groupaware modifica o comportamento de determinados DDIs e manipula o ambiente de grupo para fins de teste.

Criar vários grupos de processadores alterando o tamanho do grupo

A opção groupsize especifica o número máximo de processadores lógicos em um grupo. Por padrão, a opção groupsize não está definida e qualquer computador com 64 processadores lógicos ou menos tem um grupo, que é o grupo 0.

Nota Um processador físico, ou pacote de processador, pode ter um ou mais núcleos ou unidades de processador, cada um dos quais pode conter um ou mais processadores lógicos. O sistema operacional considera um processador lógico como um mecanismo de computação lógica.

Para criar vários grupos de processadores, execute BCDEdit /set em uma janela do Prompt de Comando com privilégios elevados e especifique um novo valor maxsize para groupsize menor que o número total de processadores lógicos. Observe que a configuração de tamanho do grupo é para teste e você não deve definir sistemas de envio com essa configuração. O valor maxsize pode ser definido como qualquer potência de 2 entre 1 e 64, inclusive. O comando usa a seguinte sintaxe:

bcdedit.exe /set groupsize maxsize

Por exemplo, o comando a seguir define o número máximo de processadores em um grupo como 2.

bcdedit.exe /set groupsize 2

Se um computador não NUMA tiver 8 processadores lógicos, definir o agrupamento como 2 criará quatro grupos de processadores com 2 processadores lógicos cada um.

Grupo 0: 1 nó NUMA contendo 1 pacote de 2 processadores lógicos

Grupo 1: 1 nó NUMA contendo 1 pacote de 2 processadores lógicos

Grupo 2: 1 nó NUMA contendo 1 pacote de 2 processadores lógicos

Grupo 3: 1 nó NUMA contendo 1 pacote de 2 processadores lógicos

Por design, um computador não NUMA é considerado com um nó NUMA. Como os nós NUMA não podem abranger grupos, o sistema cria um nó para cada grupo depois que você reinicia o computador.

Se groupsize for definido como um valor menor que o número de processadores lógicos em um pacote de processador físico (soquete), o sistema redefinirá seu conceito de um pacote após a reinicialização, de modo que o pacote não abrange um grupo. Isso significa que mais pacotes do que os que estão realmente presentes são relatados pelas APIs de topologia do processador. Isso também significa que os limites de licenciamento do processador do Windows (nível de pacote) podem impedir que alguns pacotes de processador sejam iniciados quando o groupsize estiver definido.

Um pacote de processador pode abranger grupos se tiver vários nós NUMA definidos dentro dele e o sistema atribuir esses nós a grupos diferentes.

O Windows limita o número de grupos com suporte. Esse número pode mudar com novas versões do Windows ou em versões de service pack. Drivers ou componentes não devem depender do número de grupos aos quais o Windows dá suporte como constante. O limite no número de grupos pode restringir o número de processadores lógicos permitidos para iniciar quando valores pequenos são usados para a opção de inicialização groupsize .

Para remover a configuração de agrupamento usada para teste e retornar à configuração padrão de 64 processadores lógicos por grupo, use o comando BCDEdit a seguir.

bcdedit.exe /deletevalue groupsize

Esse comando é o equivalente à configuração de groupsize como 64.

Maximizar o número de grupos de processadores

A opção maxgroup é outra maneira de criar grupos de processadores em um computador com vários processadores lógicos e nós NUMA. A opção de inicialização maxgroup não tem efeito em computadores não NUMA.

Para maximizar o número de grupos, execute o comando BCDEdit /set em uma janela do Prompt de Comando com privilégios elevados. O comando usa a seguinte sintaxe:

bcdedit.exe /set maxgroup on

Por exemplo, considere um computador que tenha 2 nós NUMA, 1 pacote de processador por nó e 4 núcleos de processador por pacote, para um total de 8 processadores lógicos.

A configuração de grupo padrão é:

Grupo 0: 8 processadores lógicos, 2 pacotes, 2 nós NUMA

Se você inserir um bcdedt.exe /set maxgroup no comando seguido de uma reinicialização, o comando produzirá a seguinte configuração de grupo:

Grupo 0: 4 processadores lógicos, 1 pacote, 1 nó NUMA

Grupo 1: 4 processadores lógicos, 1 pacote, 1 nó NUMA

Observe que os nós NUMA são atribuídos a grupos de uma maneira que maximiza o número de grupos.

Para alterar de volta para o padrão da configuração, use o comando BCDEdit a seguir.

bcdedit.exe /set maxgroup off

Testar Multiple-Group compatibilidade definindo a opção de inicialização com reconhecimento de grupo

O Windows 7 e o Windows Server 2008 R2 introduziram uma nova opção BCD (groupaware) que força drivers e componentes a estarem cientes de vários grupos em um ambiente de grupo de vários processadores. A opção groupaware altera o comportamento de um conjunto de funções de driver de dispositivo para ajudar a expor incompatibilidades entre grupos em drivers e componentes. Você pode usar a opção de inicialização groupaware junto com as opções groupsize e maxgroup para testar a compatibilidade do driver com vários grupos quando um computador tiver 64 ou menos processadores lógicos ativos.

Quando a opção de inicialização groupaware é definida, o sistema operacional garante que os processos sejam iniciados em um grupo diferente do grupo 0. Isso aumenta as chances de interação entre grupos entre drivers e componentes. A opção também modifica o comportamento das funções herdadas que não têm reconhecimento de grupo, KeSetTargetProcessorDpc, KeSetSystemAffinityThreadEx e KeRevertToUserAffinityThreadEx, para que sempre operem no grupo numerado mais alto que contém processadores lógicos ativos. Os drivers que chamam qualquer uma dessas funções herdadas devem ser alterados para chamar seus equivalentes com reconhecimento de grupo (KeSetTargetProcessorDpcEx, KeSetSystemGroupAffinityThread e KeRevertToUserGroupAffinityThread),

Para testar a compatibilidade, use o seguinte comando BCDEdit /set .

bcdedit.exe /set groupaware on
Funções herdadas sem reconhecimento de grupo Substituição com reconhecimento de grupo do Windows 7

KeSetTargetProcessorDpc

KeSetTargetProcessorDpcEx

KeSetSystemAffinityThreadEx

KeSetSystemGroupAffinityThread

KeRevertToUserAffinityThreadEx

KeRevertToUserGroupAffinityThread

Para redefinir o computador para a configuração padrão, use o comando BCDEdit a seguir.

bcdedit.exe /set groupaware off