Gerenciamento de Estado de Desempenho do Component-Level
A partir do Windows 10, a PoFx (estrutura de gerenciamento de energia) permite que um driver defina um ou mais conjuntos de estados de desempenho ajustáveis individualmente para componentes individuais em um dispositivo. O driver pode usar estados de desempenho para limitar a carga de trabalho de um componente para fornecer desempenho suficiente para suas necessidades atuais.
Visão geral dos estados de desempenho
Em Windows 8 e Windows 8.1, a PoFx fornece estados ociosos (estados F) para economia de energia no nível do componente por alimentação e grade de relógio quando um estado F específico é inserido. Esse modelo economiza energia quando um componente está em um estado ocioso (não F0), mas não fornece nenhum mecanismo para otimizar o uso de energia ou equilibrá-lo em relação às necessidades de desempenho quando o componente está ativo. Embora um componente esteja ativo (em F0) e atendendo a uma solicitação, ele pode não exigir o desempenho completo do dispositivo. Por exemplo, um cartão gráfico pode precisar atualizar apenas um cursor piscando e isso pode não precisar de desempenho completo.
Estados de desempenho variáveis resolvem esse problema permitindo que o driver limite o componente de um dispositivo para fornecer desempenho suficiente para suas necessidades atuais. Em Windows 8 e Windows 8.1, se um componente der suporte a estados de desempenho, cada driver deverá implementar um algoritmo de seleção de estado de desempenho proprietário interno para o driver e, se necessário, notificar o PEP (plug-in de extensão de plataforma) de maneira proprietária. O PEP é um componente de software que executa tarefas de gerenciamento de energia específicas para uma determinada linha de produtos de processador ou módulos SoC (System on a Chip). As soluções de estado de desempenho proprietário específicas do driver têm a desvantagem de serem fortemente associadas ao PEP e não podem ser facilmente depuradas.
Começando com Windows 10, o PoFx fornece uma API para gerenciamento de estado de desempenho. Essa API tem duas metas main:
- Ele fornece uma maneira padrão para os drivers de dispositivo notificarem o PEP sobre as alterações de estado de desempenho para que o PEP possa tomar a ação apropriada.
- Ele fornece uma maneira padrão para os drivers notificarem o sistema operacional de alterações de estado de desempenho para registro em log e análise no WPA (Windows Performance Analyzer), sem a necessidade de um plug-in personalizado para cada driver.
Introdução à API pofx para Component-Level estados de desempenho
O PoFx permite que um dispositivo defina os seguintes tipos de estados de desempenho para cada componente:
- Um número discreto de estados nas unidades de frequência (medidas em Hz), largura de banda (medida em bits por segundo) ou um número de índice opaco.
- Uma distribuição contínua de estados entre um valor mínimo e máximo.
Os estados de desempenho são organizados em conjuntos e registrados por componente. Os estados de desempenho dentro de um conjunto devem aumentar monotonicamente. Espera-se que a maioria dos drivers defina um único conjunto de estados de desempenho por componente. Por exemplo, um driver pode definir um conjunto de estados de desempenho para controlar a frequência do relógio de um componente. No entanto, alguns drivers podem precisar definir mais de um estado de desempenho definido para controlar várias dimensões de estados de desempenho para um componente. Por exemplo, um driver pode definir dois conjuntos de estados de desempenho para controlar a frequência do relógio e a largura de banda do barramento.
Para registrar um componente de dispositivo para gerenciamento de estado de desempenho pela PoFx, um driver segue estas etapas gerais:
O driver registra os componentes do dispositivo a serem gerenciados pela PoFx. Para obter mais informações, consulte Gerenciamento de energia no nível do componente.
O driver registra suporte para estados de desempenho chamando PoFxRegisterComponentPerfStates. Como parte da chamada de registro, os drivers podem definir o estado de desempenho de um determinado componente por conta própria ou adiar para o PEP (plug-in de extensão de plataforma) para defini-los.
O driver do dispositivo ou o PEP devem ter conhecimento dos estados de desempenho, incluindo o número de conjuntos de estado de desempenho por componente, o tipo de estado de desempenho (discreto ou baseado em intervalo) e os detalhes dos valores e a contagem dos estados de desempenho reais. Se o PEP não der suporte a estados de desempenho, o driver ainda poderá se registrar para suporte de estado de desempenho com PoFx e notificar o sistema operacional sobre alterações de estado de desempenho para registro em log e análise no WPA (Windows Performance Analyzer).
Em ambos os casos, após a conclusão bem-sucedida de PoFxRegisterComponentPerfStates, o driver tem uma estrutura PO_FX_COMPONENT_PERF_INFO que contém os conjuntos de estado de desempenho registrados.
Quando o driver decide que um componente deve alterar os estados de desempenho, ele chama PoFxIssueComponentPerfStateChange ou PoFxIssueComponentPerfStateChangeMultiple. O PoFx invoca a rotina ComponentPerfStateCallback fornecida pelo driver quando a alteração do estado de desempenho é concluída.
O driver é informado pela rotina ComponentPerfStateCallback se o PEP teve êxito ou negou a alteração do estado de desempenho. Se o PEP tiver êxito na alteração, o driver executará qualquer trabalho necessário para alterar o estado de desempenho de sua perspectiva. Se o PEP negou a alteração, o driver pode optar por não fazer nada ou repetir a solicitação novamente com o mesmo estado de desempenho ou alternativo.