Twitter YouTube SoundCloud LinkedIn

Tiennot blog

Important : problèmes avec Proctuner 2.0.1 sous Windows 7

Mardi 19 avril 2011, 15:08 (par guilhem)

Il s'est avéré que ce problème est spécifique aux processeurs Intel dérivés de la famille des Core 2 (notamment les Celeron). Il est recommandé aux possesseurs de tels processeurs de ne pas exécuter le programme en mode administrateur. Pour les autres, pas de précautions particulières. Il n'est pas possible pour le moment d'annoncer une date de résolution du problème.

Il s'est avéré, en faisant des tests aujourd'hui de la version 2.0.1 de Proctuner sous Windows 7, que le démarrage du programme échouait systématiquement, entraînant l'apparition d'un écran bleu.

image : /images/blog/bsod.jpg

Le responsable est le driver MSR_driver.sys, qui est néanmoins indispensable au fonctionnement du programme. Cependant, le problème n'apparaît pas forcément : il n'a pas été possible de le reproduire dans une machine virtuelle pourtant équipée de la même version de Windows. Le débogage va donc s'avérer difficile.

En attendant, si vous arrivez à reproduire cette situation chez vous, je vous invite à poster un message dans ce sujet indiquant simplement :
- la version de Windows utilisée ;
- le type de processeur ;
- l'architecture matérielle (32 ou 64 bits) ;
- et toute autre information qu'il vous semble pertinent de signaler.

Commentaires

Samedi 25 août 2012, 17:35 (par [CyrIng])

Mon étude des MSR m'ont amené à Proctuner que j'ai adapté quelque peu pour l'architecture Nehalem Core i7 :

Intel_functions.c

/* ############################## processor ratios ############################## */

double getIntelProcCoeff (void)
{
unsigned int c=0;
procFamilyData family;
MSRregisters r;

family = getProcFamily ();

if (isSpeedStepSupported ())
{
r = readMSR (0x198);

if ((family.family >= 6) && (family.model == 0x0A))
c = r.eax & 0x1F;
else
{
c = (r.eax >> 8) & 0x1F;
if ((r.eax >> 14) & 0x1) c += 0.5f;
}
}
else
{
r = readMSR (0x2A);
c = (r.eax >> 22) & 0x1F;
if ((r.eax >> 18) & 0x1) c += 0.5f;
}

return c;
}

double getIntelProcMaxCoeff (void)
{
unsigned int c=0;
procFamilyData family;
MSRregisters r;

family = getProcFamily ();

// CPUID signature: Intel Pentium M and above [0x06 && 0x0D]
if ((family.family >= 6) && (family.model >= 0x0D))
{
r = readMSR (0x198);

if ((r.eax >> 31) & 0x1)
{
c = (r.edx >> 8) & 0x1F;
if ((r.edx >> 14) & 0x1) c += 0.5f;
}
else
{
r = readMSR (0x17);
c = (r.eax >> 8) & 0x1F;
if ((r.eax >> 14) & 0x1) c += 0.5f;
}
}
// CPUID signature: Intel Nehalem Core [0x06 && 0x1a, 0x1e, 0x1f, 0x2e]
else if ((family.family >= 6) && (family.model == 0x0A))
{
r = readMSR (0xCE);
c = r.eax >> 8;
}
else return -1;

return c;
}

Merci pour vos sources, cordialement,

CyrIng
blog.cyring.fr