Compartilhando recursos do processador durante a inicialização de um estado de Low-Power
Quando um computador é iniciado a partir de um estado de espera ou hibernação (inicialização quente), os drivers devem evitar usar recursos de processador por mais tempo do que o necessário. Mais importante, rotinas de DPC (chamada de procedimento adiado) e código que é executado em IRQL >= DISPATCH_LEVEL devem manter seus tempos de execução ao mínimo. Os drivers usam rotinas de DPC para ajudar a inicializar dispositivos. Os drivers podem precisar executar o código de inicialização em DISPATCH_LEVEL como parte de um contrato de interface de miniporto de porta.
Enquanto uma rotina de DPC é executada, outros threads de prioridade mais baixa são impedidos de serem executados no mesmo processador. Além disso, outras rotinas de DPC enfileiradas e prontas para execução podem ser bloqueadas até que o DPC atual seja concluído. Para permitir que outros threads sejam executados com rapidez, uma rotina DPC típica deve ser executada para não mais de 100 microssegundos.
Uma rotina de DPC que é executada por muito tempo durante a inicialização do sistema pode atrasar a inicialização de outros dispositivos. Esse atraso torna a fase de inicialização do dispositivo mais longa e atrasa a conclusão da inicialização pelo sistema operacional.
Use as seguintes práticas recomendadas para projetar suas rotinas de DPC:
Uma única rotina de DPC não deve ser executada para mais de 100 microssegundos.
As rotinas de DPC que chamam a rotina KeStallExecutionProcessor para atrasar a execução não devem especificar atrasos de mais de 100 microssegundos.
Se uma tarefa exigir mais de 100 microssegundos e for executada em DISPATCH_LEVEL, a rotina de DPC deverá terminar após 100 microssegundos e agendar uma ou mais rotinas de temporizador de DPC para concluir a tarefa posteriormente.
Use as ferramentas de análise de desempenho documentadas no WDK para avaliar os tempos de execução das rotinas de DPC.