Como personalizar a sua SSDT para execução num clock mais elevado, e como ver mais P-States em um sistema não-overclock. Este post tem como objetivo explicar o SSDT e como personalizar.
Attachment:
Captura de ecrã 2012-05-25, às 19.57.00.png
Observe:
Code:
External (\_PR_.CPU7, DeviceObj)
External (\_PR_.CPU6, DeviceObj)
External (\_PR_.CPU5, DeviceObj)
External (\_PR_.CPU4, DeviceObj)
External (\_PR_.CPU3, DeviceObj)
External (\_PR_.CPU2, DeviceObj)
External (\_PR_.CPU1, DeviceObj)
External (\_PR_.CPU0, DeviceObj)
Este bloco define quantos real ou hiper-thread CPU estão disponíveis. Assim, neste exemplo, estamos definindo até 8 processadores. Se o seu processador tem menos (Core i3 ou Core i5) é seguro excluir
External (\ _PR_.CPU4, DeviceObj) até
External (\ _PR_.CPU7, DeviceObj). Mas então você terá de apagar os Scope correspondentes
(\ _PR.CPU4) até
(\ _PR.CPU7) no final do SSDT.
Code:
Scope (\_PR.CPU0)
{
Name (APSN, 0x04)
Name (APSS, Package (0x1B)
{
Aqui estamos definindo os detalhes para CPU0. A primeira linha é a atribuição de 0x4 para APSN que é um objecto especifico da Apple. A APSS próximo objecto é também especifico da Apple, mas é definido o mesmo que os _PSS objeto da ACPI. O importante nessa linha é pacote (0x1B) como 0x1B define em hexadecimal o número de definições contidos. Assim 0x1B corresponde a 27 decimal. Isso significa que temos 27 States definidos.
Baseado na especificação ACPI para _PSS: ( Comentado )
Code:
Package (0x06)
{
0x1068, // CoreFreq
Zero, // Power
0x0A, // TransitionLatency
0x0A, // BusMasterLatency
0x2A00, // Control
0x2A00 // Status
},
ACPI Specification - Section 8.4.4.2
• CoreFreq. Indica a freqüência de operação do núcleo da CPU (em MHz).
• Power. Indica o estado de desempenho dissipação de potência máxima (em miliwatts).
• TransitionLatency. Indica a latência do pior caso em microssegundos que a CPU não estará disponível durante uma transição de qualquer estado de desempenho para este estado de desempenho.
• BusMasterLatency. Indica a latência do pior caso em microssegundos que os Bus Masters estão impedidos de acessar a memória durante a transição de qualquer estado de desempenho para este estado de desempenho.
• Control. Indica o valor a ser escrito para o desempenho do controle Register (PERF_CTRL), a fim de iniciar uma transição para o estado de desempenho.
• Status. Indica o valor que OSPM irá comparar com um valor lido a partir do estado de desempenho de registos (PERF_STATUS) para assegurar que a transição para o estado de desempenho foi bem sucedida. OSPM pode sempre colocar a CPU no estado de energia mais baixo, mas outros estados estão disponíveis apenas quando indicado pelo método _PPC.
No exemplo é 0x1068 CoreFreq é 4200 ou 4.2 GHz. Parece que a Apple está ignorando o valor para o Power, mas você pode usar os valores de energia a partir do extrato da placa-mãe SSDT. TransitionLatency e BusMasterLatency são sempre 0x0A. Agora para os dois últimos valores, 0x2A00 ou 4200. Neste caso, ignore os dois zeros e só estão preocupados com os dois números. Este é o valor que será exibido pela MSRDumper. Assim, quando o sistema está rodando a 4,2 GHz MSRDumper irá mostrar o P-State como 42.
Code:
Package (0x06)
{
0x1004,
Zero,
0x0A,
0x0A,
0x2900,
0x2900
},
Assim, 0x1004 = 4100 ou 4,1 GHz e 0x2900 traduz em 41. Se continuar seguindo a tabela vai ver que a diminuição CoreFreq por 0x64 ou 100 para cada redução de estado e de Control e Status por 1. A última entrada terá um CoreFreq de 0x0640 e Control e Status será 0x1000. Isto corresponde a 1600 ou 1,6 GHz e 16, a taxa de Clock mínimo para um CPU Sandy Bridge.
Code:
Scope (\_PR.CPU1)
{
Method (APSS, 0, NotSerialized)
{
Return (\_PR.CPU0.APSS)
}
}
Tudo isso está mostrando é que em vez de repetir o que fizemos para o CPU0, podemos ter o retorno SSDT o que foi definido para CPU0. Alternativamente, você pode definir individuais P-States para cada processador, mas é um processo muito demorado. A maneira como está descrito é um trabalho muito mais fácil.
Finalmente, podemos discutir o que precisamos mudar ao modificar o SSDT. Se você remover P-States você deve diminuir o valor (APSS, Package (0x1B)) para refletir o número de States excluídos. O SSDT de um i7 tem um Clock máximo de 3,9 GHz o que significa que a entrada de cima será parecido com esta:
Code:
Name (APSS, Package (0x18)
{
Package (0x06)
{
0x0F3C,
Zero,
0x0A,
0x0A,
0x2700,
0x2700
},
Verificamos, que a contagem Package diminuiu 3 a partir do Package (0x1B) para
Name (APSS, Package (0x18) e do primeiro Package mostra o CoreFreq de 0x0F3C = 3900 ou 3,9 GHz e de Control e Status são agora 0x2700 ou 39.
Da mesma forma se você quiser adicionar States, lembre-se de adicionar 0x64 para cada CoreFreq e 1 para Control e Status e certifique-se que o valor no
Name (APSS, Package (0x18) corresponde ao número total de P-States definidos.
Fonte:
http://macmanx86.blogspot.com.es/2012/0 ... ement.html