Alterações no número de processadores
Em um servidor particionável dinamicamente, você pode adicionar um processador a uma partição de hardware a qualquer momento. Portanto, você não deve fazer nenhuma suposição sobre o número de processadores ativos em uma partição de hardware, o valor de afinidade do processador ou o número do processador atribuído a cada processador ativo. Os bits definidos no valor de afinidade do processador representam cada um dos processadores atualmente ativos na partição de hardware. Os bits específicos definidos serão alterados se você adicionar um processador à partição de hardware.
Se qualquer uma das instruções a seguir for verdadeira para um driver de dispositivo, você deverá atualizar o driver para que ele funcione corretamente em um servidor particionável dinamicamente quando um processador é adicionado dinamicamente a uma partição de hardware:
O driver do dispositivo usa o número de processadores ativos na partição de hardware para determinar a quantidade de recursos que ele usa, como a quantidade de memória alocada, o número de threads que ele cria ou a quantidade de outros recursos que ele usa. Nessa situação, a alocação de recursos do driver de dispositivo estará incorreta se um processador for adicionado dinamicamente à partição de hardware. Isso pode afetar negativamente o desempenho ou o comportamento do driver.
O driver do dispositivo orienta os bits do valor de afinidade do processador. Nessa situação, o driver do dispositivo poderá não funcionar corretamente se não puder lidar com alterações dinâmicas no valor de afinidade do processador ou não puder lidar com lacunas na sequência de bits definidos.
O driver do dispositivo usa os bits no valor de afinidade do processador para atribuir recursos alocados pelo driver a processadores específicos. Nessa situação, as atribuições de recursos do driver de dispositivo estarão incorretas se um processador for adicionado dinamicamente à partição de hardware. Isso pode afetar negativamente o desempenho ou o comportamento do driver.
O driver do dispositivo aloca estruturas de dados para cada processador ativo na partição de hardware. Nessa situação, o driver do dispositivo pode causar comportamento adverso, corrupção de dados ou um bug marcar ocorrer se tentar acessar essas estruturas de dados para um processador que foi adicionado dinamicamente à partição de hardware.
As rotinas de expedição do driver de dispositivo usam o número do processador no qual estão sendo executados para acessar estruturas de dados ou outros recursos atribuídos a esse processador específico. Nessa situação, as rotinas de expedição do driver de dispositivo podem causar comportamento adverso, corrupção de dados ou um bug marcar ocorrer se tentarem acessar esses recursos para um processador que foi adicionado dinamicamente à partição de hardware.
O driver do dispositivo agenda suas ISRs (rotinas de serviço de interrupção), DPCs (chamadas de procedimento adiadas) ou outros threads em processadores específicos. Nessa situação, o driver do dispositivo poderá parar de funcionar corretamente se você adicionar um processador à partição de hardware e o driver do dispositivo não conseguir usar totalmente nenhum novo processador.
O driver do dispositivo não dá suporte ao rebalanceamento de recursos. Nessa situação, o driver do dispositivo não poderá usar novos processadores adicionados à partição de hardware para lidar com interrupções.
O driver do dispositivo usa um algoritmo de balanceamento de carga para distribuir o processamento de solicitações de E/S em vários processadores. Nessa situação, o driver do dispositivo poderá parar de funcionar corretamente se você adicionar um processador à partição de hardware e o driver do dispositivo não conseguir usar totalmente nenhum novo processador.
Se um driver de dispositivo for afetado por alterações no número de processadores ativos, ele deverá se registrar no sistema operacional para ser notificado quando você adicionar processadores à partição de hardware. Quando o driver do dispositivo é notificado, ele pode responder conforme necessário para uma operação segura e ideal. Para obter mais informações sobre como um driver de dispositivo pode se registrar no sistema operacional, consulte Notificação de Driver.
Para recuperar o número atual de processadores ativos na partição de hardware, os drivers de dispositivo devem chamar a função KeQueryActiveProcessorCount . Para recuperar o valor de afinidade do processador atual, os drivers de dispositivo podem chamar a função KeQueryActiveProcessors ou a função KeQueryActiveProcessorCount .
Nota Se um driver de dispositivo alocar estruturas de dados para cada processador ativo na partição de hardware e o driver do dispositivo falhar se a alocação de memória para as estruturas de dados de um novo processador falhar, o driver de dispositivo poderá alocar o suficiente dessas estruturas de dados durante a inicialização do driver para lidar com o número máximo de processadores compatíveis com o sistema operacional. Nessa situação, o driver do dispositivo não precisaria alocar novas estruturas de dados quando você adicionasse novos processadores à partição de hardware. No entanto, a menos que o tamanho dessas estruturas de dados seja bastante pequeno, isso pode ser um uso ineficiente de recursos de memória. Um driver de dispositivo pode consultar o número máximo de processadores compatíveis com o sistema operacional chamando a função KeQueryMaximumProcessorCount .
Importante Os drivers de dispositivo sempre devem atualizar qualquer valor salvo do número de processadores ativos e da afinidade do processador quando for notificado de que você adicionou um processador à partição de hardware.
Importante Um driver de dispositivo não deve contar o número de bits definidos no valor de afinidade do processador para determinar o número de processadores ativos na partição de hardware. Recomendamos que os drivers de dispositivo chamem a função KeQueryActiveProcessorCount para essa finalidade. Essa função retorna o número de processadores ativos e o valor de afinidade do processador associado.
Importante Os drivers de dispositivo criados para Windows Vista, Windows Server 2008 e versões posteriores do Windows não devem usar a variável de kernel KeNumberProcessors para determinar o número de processadores ativos na partição de hardware. A variável de kernel KeNumberProcessors está obsoleta no Windows Vista com Service Pack 1 (SP1), Windows Server 2008 e versões posteriores do Windows.