Você pode notar que um processador Ryzen com múltiplos Core Complex Dies executa um aplicativo exigente com desempenho inferior ao esperado. O sistema parece ignorar metade dos núcleos, deixando-os ociosos enquanto um CCD lida com toda a carga. Esse comportamento é causado pelo agendador de core parking do Windows 11, que bloqueia cargas de trabalho a um único CCD sob condições específicas. Este artigo explica por que o agendador estaciona núcleos em outros CCDs, como isso afeta o desempenho e o que você pode fazer para recuperar o desempenho completo de múltiplos CCDs.
Principais Conclusões: Core Parking em Sistemas Ryzen Multi-CCD
- Agendador de core parking do Windows 11: Estaciona núcleos em CCDs não utilizados para economizar energia quando as cargas são baixas, mas falha em desestacioná-los sob cargas sustentadas de thread única.
- Design dual-CCD do Ryzen 9 7950X e 9950X: Cada CCD tem seu próprio cache L3; a comunicação entre CCDs adiciona latência, então o agendador prefere um CCD para eficiência de cache.
- Comando Powercfg para desabilitar core parking: Execute
powercfg -setacvalueindex scheme_current sub_processor 0cc5b647-c1df-4637-891a-dec35c318583 0em um Prompt de Comando elevado para forçar todos os núcleos a ficarem desestacionados.
Por que o Windows 11 Estaciona Núcleos em um Único CCD
Core parking é um recurso de gerenciamento de energia introduzido no Windows 7 e refinado no Windows 11. O agendador marca processadores lógicos selecionados como estacionados, o que significa que o sistema operacional evita agendar threads neles. O objetivo é reduzir o consumo de energia e calor concentrando o trabalho em menos núcleos, permitindo que os núcleos restantes entrem em um estado de inatividade profunda.
Em um processador Ryzen com múltiplos CCDs, como o Ryzen 9 7950X ou 9950X, o agendador aplica core parking no nível do CCD. Cada CCD contém até oito núcleos e seu próprio cache L3 de 32 MB. Quando uma carga de trabalho não exige todos os núcleos, o agendador estaciona todo o segundo CCD. Isso mantém todas as threads em um CCD, evitando a penalidade de latência da comunicação entre CCDs. As transferências entre CCDs passam pelo interconnect Infinity Fabric, que adiciona aproximadamente 70–100 nanossegundos de latência em comparação com transferências intra-CCD.
O problema ocorre quando uma carga de trabalho é de thread única ou levemente threadada, mas exige alto desempenho sustentado. O agendador vê baixa utilização de núcleos em ambos os CCDs e estaciona o segundo CCD. Mesmo quando a carga de trabalho aumenta, o agendador pode não desestacionar imediatamente o segundo CCD. A carga de trabalho permanece bloqueada no primeiro CCD, fazendo com que o desempenho seja limitado à taxa de transferência de um único CCD.
O Papel do Driver CPPC2
O Windows 11 usa o driver Collaborative Processor Performance Control versão 2 para se comunicar com processadores Ryzen. O CPPC2 fornece dicas ao firmware sobre níveis de desempenho desejados. Quando o agendador estaciona um CCD, o CPPC2 reduz o orçamento de energia para aquele CCD, dificultando ainda mais o desestacionamento rápido. Essa interação pode causar um atraso de vários segundos antes que o segundo CCD fique disponível, o que é tempo suficiente para degradar o desempenho em cargas de trabalho intermitentes, como carregamento de níveis de jogos ou tarefas de compilação.
Passos para Forçar Todos os Núcleos Desestacionados em um PC Ryzen
Se você deseja evitar que o core parking bloqueie cargas de trabalho em um único CCD, pode desabilitar o core parking no plano de energia ativo. Isso mantém todos os núcleos disponíveis para agendamento, eliminando o bloqueio entre CCDs. Os passos a seguir exigem um Prompt de Comando elevado.
- Abra o Prompt de Comando como administrador
Pressione a tecla Windows, digite cmd, clique com o botão direito em Prompt de Comando nos resultados da pesquisa e selecione Executar como administrador. Clique em Sim na janela de Controle de Conta de Usuário. - Identifique o GUID do plano de energia ativo atual
Digitepowercfg /getactiveschemee pressione Enter. A saída mostra um GUID entre chaves, como{381b4222-f694-41f0-9685-ff5bb260df2e}. Copie este GUID para o próximo passo. - Defina o índice de core parking como zero
Digite o seguinte comando e pressione Enter:powercfg -setacvalueindex scheme_current sub_processor 0cc5b647-c1df-4637-891a-dec35c318583 0
Isso define o limite de sobrecarga de desempenho do core parking como zero, efetivamente desabilitando o core parking. - Aplique a alteração ao plano de energia ativo
Digitepowercfg /setactive scheme_currente pressione Enter. Isso aplica as configurações modificadas imediatamente. - Verifique se o core parking está desabilitado
Digitepowercfg /query scheme_current sub_processor 0cc5b647-c1df-4637-891a-dec35c318583e pressione Enter. A saída deve mostrar AC Power Setting Index: 0x00000000.
Após aplicar esta alteração, reinicie o PC. Abra o Gerenciador de Tarefas e vá para a guia Desempenho. Em CPU, você deve ver todos os processadores lógicos ativos mesmo sob cargas leves. Observe que desabilitar o core parking aumenta o consumo de energia em inatividade em 5–15 watts em um sistema Ryzen 9, então considere reverter a alteração para laptops com bateria.
Se o Core Parking Ainda Bloquear Cargas de Trabalho em um CCD
Carga de Trabalho Permanece no CCD 0 Mesmo Após Desabilitar Core Parking
Desabilitar o core parking via powercfg não garante que o agendador distribuirá threads entre os CCDs. O agendador também usa uma política ciente de NUMA que prefere localidade de memória. Se o aplicativo não for codificado para alocar memória em vários nós NUMA, ele ainda pode ser executado inteiramente no CCD 0. Para forçar a distribuição de threads, defina a afinidade do processo manualmente no Gerenciador de Tarefas: clique com o botão direito no processo, selecione Definir afinidade e desmarque as caixas dos núcleos no CCD 0, deixando apenas os núcleos no CCD 1 selecionados. Isso força o processo a ser executado no segundo CCD.
Queda de Desempenho Após Desabilitar Core Parking
Alguns usuários relatam pontuações mais baixas em benchmarks após desabilitar o core parking. Isso acontece porque o agendador agora permite que threads migrem entre CCDs mais livremente, aumentando a latência entre CCDs. Para cargas de trabalho que se beneficiam da localidade de cache, como jogos com conjuntos de trabalho pequenos, manter threads em um único CCD é benéfico. Se você observar uma queda de desempenho, reative o core parking definindo o índice de volta para 100: powercfg -setacvalueindex scheme_current sub_processor 0cc5b647-c1df-4637-891a-dec35c318583 100 e aplique o esquema novamente.
Core Parking Reativado Após Atualização do Windows
As atualizações cumulativas do Windows 11 às vezes redefinem as configurações do plano de energia para os padrões. Após uma atualização importante, verifique o índice de core parking executando o comando de consulta do passo 5. Se o valor mudou para 100, execute novamente o comando set. Para automatizar isso, crie uma tarefa agendada que execute o comando powercfg na inicialização do sistema.
Core Parking Desabilitado vs Padrão: Comparação de Desempenho e Energia
| Item | Core Parking Desabilitado | Core Parking Padrão |
|---|---|---|
| Disponibilidade de núcleos | Todos os núcleos desestacionados o tempo todo | Segundo CCD estacionado sob carga leve |
| Latência de thread única | Maior devido à possível migração entre CCDs | Menor devido à localidade de cache em um CCD |
| Taxa de transferência multi-thread | Maior porque todos os núcleos estão imediatamente disponíveis | Menor até o agendador desestacionar o segundo CCD |
| Consumo de energia em inatividade | 5–15 watts maior no Ryzen 9 | Menor, segundo CCD entra em sono profundo |
| Melhor caso de uso | Renderização, compilação, codificação de vídeo | Jogos, aplicativos de escritório, navegação web |
O agendador de core parking é um trade-off entre eficiência energética e capacidade de resposta multi-thread. Para cargas de trabalho que se beneficiam do acesso imediato a todos os núcleos, desabilitar o core parking remove o bloqueio de um único CCD. Para cargas de trabalho sensíveis à latência entre CCDs, o comportamento padrão é preferível. Use o comando powercfg para alternar o core parking com base na tarefa em questão e monitore o desempenho com o Gerenciador de Tarefas ou HWInfo para confirmar o efeito.