Cypheros System Info Tool (Temperatur und Auslastung)

Begonnen von Cypheros, Oktober 01, 2020, 23:21:43

« vorheriges - nächstes »

Cypheros


Dieses Tool liest die Temperatursensoren vieler CPUs von Intel und AMD sowie die Temperatursensoren von NVidia- und AMD-Grafikkarten, sofern möglich aus der Hardware, dem Betriebssystem und den Treibern.

Der WinRing0-Treiber wird benötigt, um die Temperatursensoren moderner Intel- und AMD-CPUs zu lesen. Bei Intel-CPUs wird die Temperatur über die MSRs gelesen und bei AMD werden die Temperatursensoren vom PCI-Bus gelesen.

Die Temperatur und Auslastung der AMD-Grafikkarte wird über ADL2 (atiadlxx.dll) ausgelesen. Die Temperatur und Auslastung der NVidia-Grafikkarte wird über NVML (nvml.dll) ausgelesen.

Als Fallback für die Auslastung wird die undokumentierte GDI32-Funktion D3DKMTQueryStatistics verwendet, um die Grafikkartenauslastung für AMD- und NVidia-Karten zu ermitteln.

Verwenden Sie diese Software nicht auf Produktivsystemen, da wir keine Garantie dafür geben können, dass die Software wie erwartet funktioniert.

DIE SOFTWARE WIRD "SO WIE SIE IST" ZUR VERFÜGUNG GESTELLT, OHNE JEGLICHE GARANTIE, WEDER AUSDRÜCKLICH NOCH STILLSCHWEIGEND, EINSCHLIEßLICH, ABER NICHT BESCHRÄNKT AUF DIE GARANTIEN DER MARKTGÄNGIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNG VON RECHTEN DRITTER. IN KEINEM FALL SIND DIE AUTOREN ODER URHEBERRECHTSINHABER HAFTBAR FÜR ANSPRÜCHE, SCHÄDEN ODER ANDERE HAFTUNGEN, OB AUS EINER VERTRAGSKLAGE, UNERLAUBTER HANDLUNG ODER ANDERWEITIG, DIE SICH AUS, AUS ODER IN VERBINDUNG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN GESCHÄFTEN MIT DER SOFTWARE ERGEBEN.

Der obige Urheberrechtshinweis und dieser Genehmigungshinweis müssen in allen Kopien der Software enthalten sein.


Mam

#1
CPU Anzeige hier ok, GraKa wird zwar erkannt, aber die Werte sind immer bei 0% / 0° :-(

Da ist also noch Luft nach Oben bis zur Version 1.0  :-*


Kiraly-Cutter

Das Tool hat auch eine Stimme und warnt mich wenn die Temperatur zu hoch ist.
Dreambox DM920 UHD 4K
VU+ Duo 4K SE

Mam

Das ist dann wohl eher die Erinnerung, mal nächstens doch einen richtigen Kühler zu kaufen. Ich schaffe es hier nicht über 77°, auch wenn alle 12 Cores am Glühen sind (und eh schon 300Mhz zu schnell laufen).

Allerdings sind 83° zwar grenzwertig aber noch erlaubt.

Mein Neffe meint, so 90° wäre eine adäquate Temperatur für den Dauerbetrieb...  :-*
(Ich bleib lieber deutlich drunter)

Cypheros

Zitat von: Mam am Oktober 02, 2020, 09:15:04
CPU Anzeige hier ok, GraKa wird zwar erkannt, aber die Werte sind immer bei 0% / 0° :-(

Da ist also noch Luft nach Oben bis zur Version 1.0  :-*

Poste mal das Application.log unter "C:\ProgramData\Cypheros\SystemInfo"

Mam

#5
Zitat
Poste mal das Application.log unter "C:\ProgramData\Cypheros\SystemInfo"
YESS MASTA!!!  ;D
02.10.2020 10:45:33: Start
02.10.2020 10:45:33: Cypheros System Info 0.5
02.10.2020 10:45:33: CPU verdor    = AuthenticAMD
02.10.2020 10:45:33: CPU model     = AMD Ryzen 9 3900X 12-Core Processor           
02.10.2020 10:45:33: CPU signature = 00870F10
02.10.2020 10:45:33: CPU family    = 23
02.10.2020 10:45:33: CPU model     = 113
02.10.2020 10:45:33: CPU stepping  = 0
02.10.2020 10:45:33: CPU features  = FPU,TSC,CX8,SEP,CMOV,MMX,FXSR,SSE,SSE2,SSE3,MONITOR,CX16,X64,MMX+,SSSE3,SSE4.1,SSE4.2,AES,AVX,PopCnt,XSAVE,RDTSCP,SSE4A,ABM,LAHF,PCLMULQDQ,FMA,MOVBE,F16C,RDRAND,BMI1,AVX2,BMI2,RDSEED,ADX,CLFLUSHOPT,CLWB,SHA
02.10.2020 10:45:33: Start WinRing0 to access AMD CPU temperature sensor
02.10.2020 10:45:34: AMD GPUs found = 1
02.10.2020 10:45:34: GPU1 vendor = AMD
02.10.2020 10:45:34: GPU1 model  = Radeon RX 5700 XT 50th Anniversary
02.10.2020 10:45:34: GPU1 Overdrive version  = 8
02.10.2020 10:45:34: GPU1 usage  = 0%
02.10.2020 10:45:34: GPU1 temperature  = 0°C
02.10.2020 10:45:34: GPU uasage type: None
02.10.2020 10:45:47: Closing


(wobei wir mal über den "CPU verdor" und den "GPU uasage type" gnädig hinwegsehen wollen, Herr Legastheniker :-) )
Mein Verdacht geht in Richtung WinRing0.Dll. Das sollte schon die 64Bit Version sein. Und wozu braucht man die eigentlich, wenn man die GPU auslesen will? CPUID wird die Werte wohl kaum liefern.

Cypheros

#6
OK, neue Version 0.5.2 ist online (einfach nochmal runterladen). Der schreckliche Schreibfehler wurde korrigiert, das Log um einige Infos zu GPU-Usage Fehlern ergänzt und ein besseres Fallback für AMD Overdrive 8 eingebaut.

Der Ring0-Treiber wird nur für die CPUs benötigt. Da bei Intel-CPUs die Temperatur-Sensoren über die MSR-Register der CPU abgerufen und bei AMD-CPUs Temperatur-Sensoren über den PCI-Bus abgefragt werden, muss der Ring0-Treiber aktiviert sein, der selbstverständlich 64bit ist, so wie das ganze Tool.

Die Temperatur und die Usage wird bei AMD über die atiadlxx.dll abgefragt, die Bestandteil der AMD-Treiber ist. Leider werden von AMD nicht alle Funktionen bei allen GPUs unterstützt. Alles sehr inkonsistent und besonders die Unterstützung APUs ist mangelhaft.


AX98

#7
Die Einstellung für den Temperatur Alarm geht nur bis 100.
Der Lüfter läuft normal leise und die Anzeige der Temperatur bleibt bei 105° C.

Mam

#8
Hmm... Licht und Schatten....  :-\

Bei der GPU kann er nun wenigstens schon mal die Auslastung anzeigen, bei der CPU ist dafür allerdings die Typenbezeichnung verschwunden (steht aber noch im Log!)  :o

Aaaaber.. da ist noch ein böses Berechtigungs- oder Pfadproblem! Guckst Du Skrienschott!

Links = normaler Start von lokaler Festplatte
Rechts = normaler Start von Netzwerklaufwerk

Über LAN wird offensichtlich nicht die DLL für die CPU Temperatur geladen!!!
Bitte mal die Pfade checken!

@AX98: wenn Du wirklich bei 105° liegst, solltest Du schon mal vorsorglich auf einen neuen Rechner sparen. Ab 90° fängt das Schmelzen an und dann fallen die Atome aus den Leiterbahnen...

Log der rechten Version:
03.10.2020 07:11:55: Start
03.10.2020 07:11:55: Cypheros System Info 0.5
03.10.2020 07:11:55: Windows       = Windows 10 (Version 10.0, Build 19041, 64-Bit-Edition)
03.10.2020 07:11:55: CPU vendor    = AuthenticAMD
03.10.2020 07:11:55: CPU model     = AMD Ryzen 9 3900X 12-Core Processor           
03.10.2020 07:11:55: CPU signature = 00870F10
03.10.2020 07:11:55: CPU family    = 23
03.10.2020 07:11:55: CPU model     = 113
03.10.2020 07:11:55: CPU stepping  = 0
03.10.2020 07:11:55: CPU features  = FPU,TSC,CX8,SEP,CMOV,MMX,FXSR,SSE,SSE2,SSE3,MONITOR,CX16,X64,MMX+,SSSE3,SSE4.1,SSE4.2,AES,AVX,PopCnt,XSAVE,RDTSCP,SSE4A,ABM,LAHF,PCLMULQDQ,FMA,MOVBE,F16C,RDRAND,BMI1,AVX2,BMI2,RDSEED,ADX,CLFLUSHOPT,CLWB,SHA
03.10.2020 07:11:55: Start WinRing0 to access AMD CPU temperature sensor
03.10.2020 07:11:55: AMD GPUs found = 1
03.10.2020 07:11:55: GPU1 vendor = AMD
03.10.2020 07:11:55: GPU1 model  = Radeon RX 5700 XT 50th Anniversary
03.10.2020 07:11:55: GPU1 Overdrive version  = 8
03.10.2020 07:11:55: GPU1 usage source  = D3DKMTQueryStatistics
03.10.2020 07:11:55: GPU1 usage  = 0%
03.10.2020 07:11:55: GPU1 temperature  = 0°C
03.10.2020 07:11:55: GPU1 first usage call
ADL2_OverdriveN_PerformanceStatus_Get = -8
ADL2_Overdrive6_CurrentStatus_Get = -8
ADL2_Overdrive5_CurrentActivity_Get = -8
ADL2_OverdriveN_Temperature_Get = -8
ADL2_Overdrive6_Temperature_Get = -8
ADL2_Overdrive5_Temperature_Get = -8
ADL2_Overdrive5_FanSpeed_Get = -8
ADL2_Adapter_MemoryInfo_Get = 0

03.10.2020 07:11:56: GPU usage type: D3DKMTQueryStatistics
03.10.2020 07:13:18: Closing


Ach ja, es wäre noch nett, wenn bei der CPU neben dem Typ auch der Basistakt sichtbar wäre. So könnte man Overclocker leichter identifizieren.
Platz genug wäre ja bei der Bonsaischrift.

AX98

@Mam,
das andere Bild von einem Tool zeigt 105° C als höchste zulässige Temperatur des Prozessors.
Bei dieser Temperatur würde der Prozessor abschalten.
Die Temperatur ist auf dem Bild bei 47° C.

Cypheros


AX98

Beim anderen Rechner mit dem N3540 Prozessor wird auch 105° C angezeigt.

Cypheros

Neue Version 0.5.3 ist Online.

Support für Atom-CPUs ohne Package-Temperatur-Sensor, die stattdessen einen Sensor pro Kern haben. Es wird die höchste Temperatur angezeigt.
Detailiertere Informationen im Log.

AX98


Mam

#14
bzgl AMD GPU Temperatur: Ich nehme an, Du hast Dir die Samples auf Github "geliehen" ?
Aber, leider, funktionieren die gar nicht mit den aktuellen Karten  ;D

Zitat-----------------------------------------
Adapter Index[0]
-----------------------------------------
itemID:OD8_OPERATING_TEMP_MAX: is not Visible
OD8_OPERATING_TEMP_MAX:maxValue:0
minValue:0
defaultValue:0
-----------------------------------------
itemID:OD8_FAN_TARGET_TEMP: is not Visible
OD8_FAN_TARGET_TEMP:maxValue:100
minValue:25
defaultValue:90
-----------------------------------------
itemID:OD8_POWER_PERCENTAGE: is Visible
actualValue:0
OD8_POWER_PERCENTAGE:maxValue:50
minValue:-50
defaultValue:0
-----------------------------------------
ADLSensorType: PMLOG_TEMPERATURE_EDGE - Current Temp
PMLOG_TEMPERATURE_EDGE.supported:1
PMLOG_TEMPERATURE_EDGE.value:33

ADLSensorType: PMLOG_TEMPERATURE_HOTSPOT - Junction Temp
PMLOG_TEMPERATURE_HOTSPOT.supported:1
PMLOG_TEMPERATURE_HOTSPOT.value:33
ADLSensorType: PMLOG_TEMPERATURE_MEM - Memory Temp
PMLOG_TEMPERATURE_MEM.supported:1
PMLOG_TEMPERATURE_MEM.value:40
-----------------------------------------

Da hast Du die Temperaturen, GPU=33°, Speicher=40°

Der "Trick" ist: Du benötigst ADL SDK Level 8! Die alten Aufrufe liefern nur 0 zurück.
Also im Prinzip musst Du machen:
int(*ADL2_OVERDRIVE_CAPS) (ADL_CONTEXT_HANDLE context, int iAdapterIndex, int * iSupported, int * iEnabled, int * iVersion);

(Dann iVersion auswerten, gültige Werte sind 5,6,7 und 8 )
Für jede dieser Versionen eine andere Funktion aufrufen um die Temperatur auszulesen (die haben unterschiedliche Übergabeparameter!!!)
Leider gibt es kein Beispiel, dass bei ALLEN Karten funktioniert. Ansatzweise kann man nach dieser Methode klauen:

// Looking for first present and active adapter in the system
int adapterId = -1;
        for ( i = 0; i < iNumberAdapters; i++ )
        {
int adapterActive = 0;
AdapterInfo adapterInfo = lpAdapterInfo[ i ];           
ADL_Adapter_Active_Get(adapterInfo.iAdapterIndex , &adapterActive);
if ( adapterActive && adapterInfo.iVendorID == AMDVENDORID )
{
adapterId = adapterInfo.iAdapterIndex;
break;
}
}

if (-1 == adapterId)
{
   printf("Cannot find active AMD adapter\n");
   return 0;
}

//Overdrive 5 APIs should be used if returned version indicates 5. Overdrive 6 APIs are used if 6 is returned.
//Overdrive 5 is supported on legacy ASICs. Newer ASICs (CIK+) should report Overdrive 6
if ( ADL_OK != ADL_Overdrive_Caps (adapterId, &iOverdriveSupported, &iOverdriveEnabled, &iOverdriveVersion) )
{
   printf("Can't get Overdrive capabilities \n");
   return 0;
}

if (!iOverdriveSupported)
{
   printf("Overdrive is not supported \n");
   return 0;
}

if (iOverdriveVersion == 5)
Overdrive5Sample (adapterId, hDLL);
else  if(iOverdriveVersion == 6)
Overdrive6Sample (adapterId, hDLL);
else
printf("Unsupported Overdrive version \n");

(wie gesagt, das wird nun bis Version 8 gebraucht!!! und jede Version hat total andere Funktionen!!!)

Viel Spaß beim Zusammensuchen der Daten.  ;D
Das Hauptbeispiel findest Du unter https://github.com/GPUOpen-LibrariesAndSDKs/display-library Leider eben mit 3 verschiedenen Samples, für Versionen 5&6,7 und 8. Aber leider in unterschiedlichen Sprachen und mit unterschiedlichen Libraries. Kann man also nicht "mal soeben" zusammenführen.




www.cypheros.de