Ajuster la fréquence de votre processeur avec l'API Windows Power Management - Page 3

Page précédente

Obtenir une description des settings

Tous les settings d'un sous-groupe d'un plan peuvent être énumérés. On passe par l'API PowerEnumerate, mais cette fois en lui imposant un GUID de plan et un GUID de sous-groupe. La fonction énumère alors les settings, qu'il suffit d'afficher. Le code ci-dessous, est extrait de notre exemple DemoReadProcessorSettings qui énumère toutes les settings relatifs au processeur. Ce code affiche les chaines descriptives et la valeur du setting pour une alimentation secteur. On emploie pour cela la fonction PowerReadACValue. Si on voulait la valeur pour une alimentation avec la batterie, on emploireait PowerReadDCValue tout simplement.

Et surprise ! comme on le voit sur l'illustration ci-contre, les settings du processeur sont extrêmement nombreux:

Dans tout ce fatras, dont la découverte est, il faut le dire, passionnante, il suffit, pour poursuivre notre expérimentation, de repérer le GUID du setting définissant la limite supérieure de la cadence du processeur. Ce GUID est: 

{bc5038f7-23e0-496096da33abaf5935ec}

Modifier la valeurs d'un setting

Nous atteignons enfin notre but. Voici le code qui modifie, pour l'alimentation secteur, la valeur maximum de la cadence du processeur dans le plan que nous venons de créer, et qui définit ce plan, comme le plan actif. La valeur doit être exprimée en pourcentage:

// DemoPowerWriteACValue.cpp #include #include #include // pour les DEFINE_GUID ci-dessous // {370F4BE5-D0FE-4128-9854-DE54765376CA} DEFINE_GUID(PROGRAMMEZGUID, 0x370f4be5, 0xd0fe, 0x4128, 0x98, 0x54, 0xde, 0x54, 0x76, 0x53, 0x76, 0xca); // {bc5038f7-23e0-496096da33abaf5935ec} DEFINE_GUID (SETTINGPROCGUID, 0xbc5038f7, 0x23e0, 0x4960, 0x96, 0xda, 0x33, 0xab, 0xaf, 0x59, 0x35, 0xec); #define CADENCEMAX 70 // 70% maxi int main(int argc, char* argv[]) { GUID leguid = PROGRAMMEZGUID; GUID sous_guid = GUID_PROCESSOR_SETTINGS_SUBGROUP; GUID setting = SETTINGPROCGUID; DWORD index; PowerReadACValueIndex(NULL, &leguid, &sous_guid, &setting, &index); PowerWriteACValueIndex(NULL, &leguid, &sous_guid, &setting, CADENCEMAX); PowerSetActiveScheme(NULL, &leguid); return 0; }

L'expérimentation montre que la fréquence d'horloge ne suit pas strictement la valeur donnée, mais il est toutefois possible de réduire la cadence de plus de la moitié. Voici les résultats obtenus par votre serviteur sur sa machine:

PourcentageFréquence réelle
100%2167 MHz
80% - 90% - 95%1646 MHz
65% - 70% - 75%1321 MHz
20% - 40% - 60%996 MHz

 

Conclusion

A partir des éléments donnés dans cet article, il est possible de construire une application 'geek' en diable. Vous pouvez par exemple choisir la stratégie de refroidissement du système ou le taux d'inactivité necéssaire pour que le processeur ajuste sa cadence entre deux limites mini et maxi. Enfin, outre le processeur, vous pouvez adapter les morceaux de code donnés pour toucher à tout: intensité de l'éclairage de l'écran, le temps d'inactivité d'un disque avant son arrêt, etc. :-)

© Frédéric Mazué Informatique

Fichier attachéTaille
APIPowerManagement.zip117.54 Ko