Cypheros Transportstream Forum

Allgemeine Kategorie => Plauder-Ecke => Thema gestartet von: Cypheros am Oktober 01, 2020, 23:21:43

Titel: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Cypheros am Oktober 01, 2020, 23:21:43
(https://www.cypheros.de/img/CSI_Sample1.png)

Version 0.5.11 Beta
Download: https://www.cypheros.de/files/tools/CySysInfo_0_5_Beta.zip (https://www.cypheros.de/files/tools/CySysInfo_0_5_Beta.zip)

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.

Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag 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  :-*

Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Kiraly-Cutter am Oktober 02, 2020, 14:22:44
Das Tool hat auch eine Stimme und warnt mich wenn die Temperatur zu hoch ist.
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Mam am Oktober 02, 2020, 16:17:43
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)
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Cypheros am Oktober 02, 2020, 16:22:27
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"
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Mam am Oktober 02, 2020, 16:27:12
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.
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Cypheros am Oktober 02, 2020, 23:30:04
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.

Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: AX98 am Oktober 03, 2020, 01:22:23
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.
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Mam am Oktober 03, 2020, 07:19:33
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.
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: AX98 am Oktober 03, 2020, 09:11:34
@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.
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Cypheros am Oktober 03, 2020, 09:54:01
Kannst du mal das Log posten von dem Celeron?
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: AX98 am Oktober 03, 2020, 10:47:10
Beim anderen Rechner mit dem N3540 Prozessor wird auch 105° C angezeigt.
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Cypheros am Oktober 04, 2020, 15:27:54
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.
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: AX98 am Oktober 04, 2020, 19:42:17
Version 0.5.3 installiert.
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Mam am Oktober 04, 2020, 21:26:04
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 (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.


Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Cypheros am Oktober 04, 2020, 23:08:35
Ja, das habe ich auch schon bemerkt.  ;)
Versionen 5,6,7 bzw. Overdrive5, Overdrive6, OverdriveN werden bereits unterstützt. AMD ist bei den Treibern und APIs eine echte Zumutung.

Bei Overdrive8 habe ich noch keine Samples für Temperatur und Usage gefunden. Windows selbst scheint die GPU-Usage sowieso über die undokumentierte Funktion D3DKMTQueryStatistics in der GDI32.dll zu gewinnen, was ich ebenfalls als Fallback benutze.
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Mam am Oktober 05, 2020, 06:56:30
Zitat von: Cypheros am Oktober 04, 2020, 23:08:35
Ja, das habe ich auch schon bemerkt.  ;)
Versionen 5,6,7 bzw. Overdrive5, Overdrive6, OverdriveN werden bereits unterstützt. AMD ist bei den Treibern und APIs eine echte Zumutung.

Bei Overdrive8 habe ich noch keine Samples für Temperatur und Usage gefunden. Windows selbst scheint die GPU-Usage sowieso über die undokumentierte Funktion D3DKMTQueryStatistics in der GDI32.dll zu gewinnen, was ich ebenfalls als Fallback benutze.
Nimm meinen Link, da findest Du ein Sample namens "Overdrive8". Das funktioniert auch (aber eben total anders).
Ich geb zu, die Treiber sind echter Mist. Nicht nur intern, auch die Benutzeroberfläche ist ne Zumutung. Kann sein, dass es demnächst wieder was total Neues gibt, wir (die Usah) haben AMD langsam weichgeklopft, wir wollen wieder einen schlanken Treiber haben und nicht dieses ganze Geraffel (>400Mb) von Bloatware.
Ach ja, kleine Warnung: Es gibt nicht "DIE" Temperatur, sondern deren viele! Wie bei CPU gibt es Messungen im Chipcarrier und im Chip selber (natürlich höher). Schon bei der CPU zeigst Du eigentlich die falsche an. Ist aber Verhandlungssache, nur, bei der GPU sollte dann auch derselbe Wert gezeigt werden.


Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Cypheros am Oktober 05, 2020, 09:32:59
Ja, AMD weiß wirklich wie man es kompliziert macht.

ADL2_New_QueryPMLogData_Get scheint die Zauberfunktion zu sein, mit der man den neuen Navi 14+ einige Parameter entlocken kann. Leider hab ich kein derartige Karte hier und kann das nicht testen.
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Mam am Oktober 05, 2020, 10:09:07
Zitat von: Cypheros am Oktober 05, 2020, 09:32:59
Ja, AMD weiß wirklich wie man es kompliziert macht.

ADL2_New_QueryPMLogData_Get scheint die Zauberfunktion zu sein, mit der man den neuen Navi 14+ einige Parameter entlocken kann. Leider hab ich kein derartige Karte hier und kann das nicht testen.
Jo, das ist der richtige Weg.
Update: Nö, doch nicht  :o GuckstDu:
Zitatint ADL2_Overdrive8_Current_Setting_Get    (    ADL_CONTEXT_HANDLE     context,
      int     iAdapterIndex,
      ADLOD8CurrentSetting *     lpCurrentSetting   
   )          

Function to retrieve the Overdrive8 current settings.

This function retrieves the Overdrive8 current settings for a specified adapter.

Supported Platforms:
    Windows (XP, Vista and above); 32bit and 64bit

Parameters:
    [in]    context,:    Client's ADL context handle ADL_CONTEXT_HANDLE obtained from ADL2_Main_Control_Create.
    [in]    iAdapterIndex    The ADL index handle of the desired adapter.
    [out]    lpCurrentSetting    The pointer to the current settings structure storing the retrieved Overdrive parameters.

Returns:
    If the function succeeds, the return value is ADL_OK. Otherwise the return value is an ADL error code. Result Codes

Remarks:
    Clients can use ADL2 version of the API to assure that there is no interference with other ADL clients that are running in the same process . Such clients have to call ADL2_Main_Control_Create first to obtain ADL_CONTEXT_HANDLE instance that has to be passed to each subsequent ADL2 call and finally destroyed using ADL2_Main_Control_Destroy.

Deprecated:
    This API has been deprecated.

Examples:
    Overdrive8/Overdrive8.cpp.

Mach trotzdem rein und schick rüber :-)
Ich such denn mal weiter, was offiziell nun wirklich "IN" sein sollte ;D

Offensichtlich sind viele Felder optional und werden nicht von jeder Karte bedient. Du musst also jedesmal gucken, ob die Abfrage eines Wertes überhaupt erlaubt ist / es den Wert überhaupt gibt.
Hat sich wohl einer ausgedacht, der die Schuhe mit der Kneifzange zumacht, sorry :-(

Was mich beim Durchstöbern der Doku am meisten traurig macht: MAN KANN DIE WERTE AUCH EINFACH ÄNDERN!!!
Wenn ich dem User also was Böses will, dann schalte ich die Lüfter ab, setze die Spannung auf Maximum hoch und lasse die Karte brutzeln...
Und das alles ohne irgendeine Sicherheitsabfrage / Sperre...
SEEEHR BEDENKLICH, da fallen mir nette Erpressungstrojaner ein: "Zahlen Sie X Bitcoins, sonst brennt Ihr Computer ab!"
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Cypheros am Oktober 05, 2020, 12:15:41
Nein, damit kriege ich nur die Einstellungen, nicht die Sensoren.

Hiermit scheint man die Sensoren abfragen zu können:

                //make ADL call for VEGA12
                ADLPMLogDataOutput odlpDataOutput;
                memset(&odlpDataOutput, 0, sizeof(ADLPMLogDataOutput));
                ret = ADL2_New_QueryPMLogData_Get(context, lpAdapterInfo[i].iAdapterIndex, &odlpDataOutput);
                if (0 == ret)
                {
                    if (((odInitSetting.overdrive8Capabilities &  ADL_OD8_TEMPERATURE_SYSTEM) == ADL_OD8_TEMPERATURE_SYSTEM) ||
                        ((odInitSetting.overdrive8Capabilities &  ADL_OD8_TEMPERATURE_FAN) == ADL_OD8_TEMPERATURE_FAN) ||
                        ((odInitSetting.overdrive8Capabilities &  ADL_OD8_POWER_LIMIT) == ADL_OD8_POWER_LIMIT))
                    {
                        OverdriveRangeDataStruct oneRangeData;
                        GetOD8RangePrint(odInitSetting, odCurrentSetting, oneRangeData, OD8_OPERATING_TEMP_MAX, ADL_OD8_TEMPERATURE_SYSTEM);
                        GetOD8RangePrint(odInitSetting, odCurrentSetting, oneRangeData, OD8_FAN_TARGET_TEMP, ADL_OD8_TEMPERATURE_FAN);
                        GetOD8RangePrint(odInitSetting, odCurrentSetting, oneRangeData, OD8_POWER_PERCENTAGE, ADL_OD8_POWER_LIMIT);

                        PRINTF("ADLSensorType: PMLOG_TEMPERATURE_EDGE - Current Temp\n");
                        PRINTF("PMLOG_TEMPERATURE_EDGE.supported:%d\n", odlpDataOutput.sensors[PMLOG_TEMPERATURE_EDGE].supported);
                        PRINTF("PMLOG_TEMPERATURE_EDGE.value:%d\n", odlpDataOutput.sensors[PMLOG_TEMPERATURE_EDGE].value);

                        PRINTF("ADLSensorType: PMLOG_TEMPERATURE_HOTSPOT - Junction Temp\n");
                        PRINTF("PMLOG_TEMPERATURE_HOTSPOT.supported:%d\n", odlpDataOutput.sensors[PMLOG_TEMPERATURE_HOTSPOT].supported);
                        PRINTF("PMLOG_TEMPERATURE_HOTSPOT.value:%d\n", odlpDataOutput.sensors[PMLOG_TEMPERATURE_HOTSPOT].value);

PRINTF("ADLSensorType: PMLOG_TEMPERATURE_MEM - Memory Temp\n");
PRINTF("PMLOG_TEMPERATURE_MEM.supported:%d\n", odlpDataOutput.sensors[PMLOG_TEMPERATURE_MEM].supported);
PRINTF("PMLOG_TEMPERATURE_MEM.value:%d\n", odlpDataOutput.sensors[PMLOG_TEMPERATURE_MEM].value);
                        PRINTF("-----------------------------------------\n");

                    }
                    else
                        PRINTF("OD8 Failed to get Temperature Settings\n");



Das hier scheint das zu sein, was wir brauchen: ADLPMLogDataOutput structure storing the retrieved performance metrics parameters.

int ADL2_New_QueryPMLogData_Get ( ADL_CONTEXT_HANDLE  context,
int  iAdapterIndex,
ADLPMLogDataOutput *  lpDataOutput
)

Function to retrieve the Overdrive8 current settings.

This function retrieves the Overdrive8 current settings for a specified adapter.

Supported Platforms:
    Windows (XP, Vista and above); 32bit and 64bit

Parameters:
    [in] context,: Client's ADL context handle ADL_CONTEXT_HANDLE obtained from ADL2_Main_Control_Create.
    [in] iAdapterIndex The ADL index handle of the desired adapter.
    [out] lpDataOutput The pointer to the ADLPMLogDataOutput structure storing the retrieved performance metrics parameters.

Returns:
    If the function succeeds, the return value is ADL_OK. Otherwise the return value is an ADL error code. Result Codes

Remarks:
    Clients can use ADL2 version of the API to assure that there is no interference with other ADL clients that are running in the same process . Such clients have to call ADL2_Main_Control_Create first to obtain ADL_CONTEXT_HANDLE instance that has to be passed to each subsequent ADL2 call and finally destroyed using ADL2_Main_Control_Destroy.

Deprecated:
    This API has been deprecated.

Examples:
    Overdrive8/Overdrive8.cpp.

Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Mam am Oktober 05, 2020, 12:20:49
Zitat von: Cypheros am Oktober 05, 2020, 12:15:41
Nein, damit kriege ich nur die Einstellungen, nicht die Sensoren.
Jein  ;D
Du brauchst den Call um festzustellen, ob ein Sensor überhaupt existiert. Ansonsten ist nix mit Auslesen der Werte.

Aber egal, mach, was Du möchstest. Es scheint ja eh nur eine temporäre "Lösung" zu geben, da ALLE Calls wohl als "deprecated" geführt werden.
Entweder ist das ein Cut&Pastefehler bei AMD, oder die haben schon wieder was Neues in der Röhre...
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Cypheros am Oktober 05, 2020, 14:49:39
AGS is comming: https://github.com/GPUOpen-LibrariesAndSDKs/AGS_SDK/

Ich mach mal eine Routine, die die 32 Parameter einfach ins Log packt bei OD8-Karten. Dann sehen wir ja, was davon brauchbare Werte enthält und was nicht.
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Mam am Oktober 05, 2020, 16:50:57
Zitat von: Cypheros am Oktober 05, 2020, 14:49:39
AGS is comming: https://github.com/GPUOpen-LibrariesAndSDKs/AGS_SDK/

Ich mach mal eine Routine, die die 32 Parameter einfach ins Log packt bei OD8-Karten. Dann sehen wir ja, was davon brauchbare Werte enthält und was nicht.

Hmm AGS wird bei Dir nicht zielführend sein, das sind nur Treibereinstellungen, keine Betriebsdaten. Du wirst wohl doch Overdrive8 klauen müssen und die If Abfrage um die Version eränzen (oder doch mal langsam zu "case..." greifen)

Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Cypheros am Oktober 05, 2020, 18:45:27
Hab dir den Link für die Testversion mit Overdrive 8 Sensor-Dump geschickt.
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Mam am Oktober 05, 2020, 18:52:25
Zitat von: Cypheros am Oktober 05, 2020, 18:45:27
Hab dir den Link für die Testversion mit Overdrive 8 Sensor-Dump geschickt.
Das war ein Griff ins Klo, üb nochmal, das Programm lässt sich gar nicht erstmal starten...
Name der fehlerhaften Anwendung: CySysInfo.exe, Version: 0.5.4.0, Zeitstempel: 0x5f7b4a1d
Name des fehlerhaften Moduls: CySysInfo.exe, Version: 0.5.4.0, Zeitstempel: 0x5f7b4a1d
Ausnahmecode: 0xc0000005
Fehleroffset: 0x0000000000701322
ID des fehlerhaften Prozesses: 0x2b78
Startzeit der fehlerhaften Anwendung: 0x01d69b3795a5e299
Pfad der fehlerhaften Anwendung: D:\Incoming\CySysInfo.exe
Pfad des fehlerhaften Moduls: D:\Incoming\CySysInfo.exe
Berichtskennung: c6802a3d-0d9f-4b84-bb77-c59de2ed1a6e
Vollständiger Name des fehlerhaften Pakets:
Anwendungs-ID, die relativ zum fehlerhaften Paket ist:


Ach ja, bevor ichs vergesse: Wenn Dein Progrämmchen mal wieder den "el Condor pasa" gemacht hat (hatte die erste Version auch schon geschafft), verbleibt ein Lock auf "winRing0x64.sys" im Speicher. Lässt sich nicht löschen oder verschieben. Ist also trotz Abflug ein Handle offen. Ich nehme aber an, das Teil wird von der DLL nachgeladen und gehört nich direkt zur Prozessgruppe Deines Tasks.
Hilft nur ein Reboot.
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Mam am Oktober 05, 2020, 20:55:16
also, ich war mal gnädig und hab Dir das Sample "so klein wie möglich" gemacht und nur die Ausleseroutine für die Temperaturen übrig gelassen (ist noch ein wenig Müll drin, aber lohnt nicht wirklich ihn zu entsorgen)
Beispieloutput ist:

Gefunden: 8 Grafikkarten
-----------------------------------------
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:34
ADLSensorType: PMLOG_TEMPERATURE_HOTSPOT - Junction Temp
PMLOG_TEMPERATURE_HOTSPOT.supported:1
PMLOG_TEMPERATURE_HOTSPOT.value:34
ADLSensorType: PMLOG_TEMPERATURE_MEM - Memory Temp
PMLOG_TEMPERATURE_MEM.supported:1
PMLOG_TEMPERATURE_MEM.value:40
-----------------------------------------
ENDE!

die drei Temperaturen sind ja eindeutig zu erkennen und die dazugehörigen DEFINES ebenfalls. Wobei EDGE die Carrier Temperatur ist und Junction die Temperatur des Chips (MEM ist ja wohl klar, oder?).

Aber Achtung! jede Karte sind mindestens 8 Devices! Das läuft also in einer Schleife. Wahrscheinlich gibts mehr Karten, wenn man mehr Monitore anschliesst, aber mir reicht mein 37" 4K Monitörchen :-)

Ich pack mal den Quelltext hier rein (Du brauchst noch die drei Headerfiles aus dem INCLUDE Verzeichnis der Samples)


// OD8Test.cpp : Diese Datei enthält die Funktion "main". Hier beginnt und endet die Ausführung des Programms.
//

#include <iostream>
#include <windows.h>
#include "adl_sdk.h"
#include "adl_structures.h"
#include <stdio.h>

#define PRINTF printf

struct OverdriveRangeDataStruct
{
    //Minimum value
    int Min_;
    //Maximum value
    int Max_;
    //Expected value: similar to current value
    int ExpectedValue_;
    //Default value
    int DefaultValue_;
    //Actual value
    int ActualValue_;
    // If ActualValue can be got from the driver, ActualValueAvailable_ will be true
    bool ActualValueAvailable_;
    // If the disable/enable feature is supported by the driver, it is true.
    bool EnableDisableSupport_;
    // The enabled state
    bool Visible_;
};

char* sensorType[] = {
(char*) "SENSOR_MAXTYPES",
(char*) "PMLOG_CLK_GFXCLK",
(char*) "PMLOG_CLK_MEMCLK",
(char*) "PMLOG_CLK_SOCCLK",
(char*) "PMLOG_CLK_UVDCLK1",
(char*) "PMLOG_CLK_UVDCLK2",
(char*) "PMLOG_CLK_VCECLK",
(char*) "PMLOG_CLK_VCNCLK",
(char*) "PMLOG_TEMPERATURE_EDGE",
(char*) "PMLOG_TEMPERATURE_MEM",
(char*) "PMLOG_TEMPERATURE_VRVDDC",
(char*) "PMLOG_TEMPERATURE_VRMVDD",
(char*) "PMLOG_TEMPERATURE_LIQUID",
(char*) "PMLOG_TEMPERATURE_PLX",
(char*) "PMLOG_FAN_RPM",
(char*) "PMLOG_FAN_PERCENTAGE",
(char*) "PMLOG_SOC_VOLTAGE",
(char*) "PMLOG_SOC_POWER",
(char*) "PMLOG_SOC_CURRENT",
(char*) "PMLOG_INFO_ACTIVITY_GFX",
(char*) "PMLOG_INFO_ACTIVITY_MEM",
(char*) "PMLOG_GFX_VOLTAGE",
(char*) "PMLOG_MEM_VOLTAGE",
(char*) "PMLOG_ASIC_POWER",
(char*) "PMLOG_TEMPERATURE_VRSOC",
(char*) "PMLOG_TEMPERATURE_VRMVDD0",
(char*) "PMLOG_TEMPERATURE_VRMVDD1",
(char*) "PMLOG_TEMPERATURE_HOTSPOT"
};
int PrintFeatureName(int itemID_)
{
    switch (itemID_)
    {
    case OD8_GFXCLK_FREQ1:
        PRINTF("OD8_GFXCLK_FREQ1:");
        break;
    case OD8_GFXCLK_FREQ2:
        PRINTF("OD8_GFXCLK_FREQ2:");
        break;
    case OD8_GFXCLK_FREQ3:
        PRINTF("OD8_GFXCLK_FREQ3:");
        break;
    case OD8_GFXCLK_FMIN:
        PRINTF("OD8_GFXCLK_FMIN:");
        break;
    case OD8_GFXCLK_FMAX:
        PRINTF("OD8_GFXCLK_FMAX:");
        break;
    case OD8_GFXCLK_VOLTAGE1:
        PRINTF("OD8_GFXCLK_VOLTAGE1:");
        break;
    case OD8_GFXCLK_VOLTAGE2:
        PRINTF("OD8_GFXCLK_VOLTAGE2:");
        break;
    case OD8_GFXCLK_VOLTAGE3:
        PRINTF("OD8_GFXCLK_VOLTAGE3:");
        break;
    case OD8_UCLK_FMAX:
        PRINTF("OD8_UCLK_FMAX:");
        break;
    case OD8_OPERATING_TEMP_MAX:
        PRINTF("OD8_OPERATING_TEMP_MAX:");
        break;
    case OD8_FAN_TARGET_TEMP:
        PRINTF("OD8_FAN_TARGET_TEMP:");
        break;
    case OD8_POWER_PERCENTAGE:
        PRINTF("OD8_POWER_PERCENTAGE:");
        break;
    case OD8_FAN_MIN_SPEED:
        PRINTF("OD8_FAN_MIN_SPEED:");
        break;
    case OD8_FAN_ACOUSTIC_LIMIT:
        PRINTF("OD8_FAN_ACOUSTIC_LIMIT:");
        break;
    case OD8_AC_TIMING:
        PRINTF("OD8_AC_TIMING:");
        break;
    case OD8_FAN_ZERORPM_CONTROL:
        PRINTF("OD8_FAN_ZERORPM_CONTROL:");
        break;
    case OD8_FAN_CURVE_TEMPERATURE_1:
        PRINTF("OD8_FAN_CURVE_TEMPERATURE_1:");
        break;
    case OD8_FAN_CURVE_SPEED_1:
        PRINTF("OD8_FAN_CURVE_SPEED_1:");
        break;
    case OD8_FAN_CURVE_TEMPERATURE_2:
        PRINTF("OD8_FAN_CURVE_TEMPERATURE_2:");
        break;
    case OD8_FAN_CURVE_SPEED_2:
        PRINTF("OD8_FAN_CURVE_SPEED_2:");
        break;
    case OD8_FAN_CURVE_TEMPERATURE_3:
        PRINTF("OD8_FAN_CURVE_TEMPERATURE_3:");
        break;
    case OD8_FAN_CURVE_SPEED_3:
        PRINTF("OD8_FAN_CURVE_SPEED_3:");
        break;
    case OD8_FAN_CURVE_TEMPERATURE_4:
        PRINTF("OD8_FAN_CURVE_TEMPERATURE_4:");
        break;
    case OD8_FAN_CURVE_SPEED_4:
        PRINTF("OD8_FAN_CURVE_SPEED_4 = 26:");
        break;
    case OD8_FAN_CURVE_TEMPERATURE_5:
        PRINTF("OD8_FAN_CURVE_TEMPERATURE_5:");
        break;
    case OD8_FAN_CURVE_SPEED_5:
        PRINTF("OD8_FAN_CURVE_SPEED_5:");
        break;
    case OD8_POWER_GAUGE:
        PRINTF("OD8_POWER_GAUGE:");
        break;
    default:
        PRINTF("Found no featureID \n");
        return ADL_ERR;
    }
    return ADL_OK;
}

// Definitions of the used function pointers. Add more if you use other ADL APIs
typedef int(*ADL_MAIN_CONTROL_CREATE)(ADL_MAIN_MALLOC_CALLBACK, int);
typedef int(*ADL_MAIN_CONTROL_DESTROY)();
typedef int(*ADL_ADAPTER_NUMBEROFADAPTERS_GET) (int*);
typedef int(*ADL_ADAPTER_ADAPTERINFO_GET) (LPAdapterInfo, int);
typedef int(*ADL_ADAPTERX2_CAPS) (int, int*);
typedef int(*ADL2_ADAPTER_ACTIVE_GET) (ADL_CONTEXT_HANDLE, int, int*);
typedef int(*ADL2_OVERDRIVE_CAPS) (ADL_CONTEXT_HANDLE context, int iAdapterIndex, int* iSupported, int* iEnabled, int* iVersion);
typedef int(*ADL2_ADAPTER_REGVALUEINT_GET) (ADL_CONTEXT_HANDLE context, int iAdapterIndex, int iDriverPathOption, const char* szSubKey, const char* szKeyName, int* lpKeyValue);

typedef int(*ADL2_OVERDRIVE8_INIT_SETTING_GET) (ADL_CONTEXT_HANDLE, int, ADLOD8InitSetting*);
typedef int(*ADL2_OVERDRIVE8_CURRENT_SETTING_GET) (ADL_CONTEXT_HANDLE, int, ADLOD8CurrentSetting*);
typedef int(*ADL2_OVERDRIVE8_SETTING_SET) (ADL_CONTEXT_HANDLE, int, ADLOD8SetSetting*, ADLOD8CurrentSetting*);
typedef int(*ADL2_NEW_QUERYPMLOGDATA_GET) (ADL_CONTEXT_HANDLE, int, ADLPMLogDataOutput*);

typedef int(*ADL2_OVERDRIVE8_INIT_SETTINGX2_GET) (ADL_CONTEXT_HANDLE context, int iAdapterIndex, int* lpOverdrive8Capabilities, int* lpNumberOfFeatures, ADLOD8SingleInitSetting** lppInitSettingList);
typedef int(*ADL2_OVERDRIVE8_CURRENT_SETTINGX2_GET) (ADL_CONTEXT_HANDLE context, int iAdapterIndex, int* lpNumberOfFeatures, int** lppCurrentSettingList);


typedef int(*ADL2_ADAPTER_PMLOG_SUPPORT_GET) (ADL_CONTEXT_HANDLE context, int iAdapterIndex, ADLPMLogSupportInfo* pPMLogSupportInfo);
typedef int(*ADL2_ADAPTER_PMLOG_SUPPORT_START) (ADL_CONTEXT_HANDLE context, int iAdapterIndex, ADLPMLogStartInput* pPMLogStartInput, ADLPMLogStartOutput* pPMLogStartOutput, ADL_D3DKMT_HANDLE pDevice);
typedef int(*ADL2_ADAPTER_PMLOG_SUPPORT_STOP) (ADL_CONTEXT_HANDLE context, int iAdapterIndex, ADL_D3DKMT_HANDLE pDevice);
typedef int(*ADL2_DESKTOP_DEVICE_CREATE) (ADL_CONTEXT_HANDLE context, int iAdapterIndex, ADL_D3DKMT_HANDLE* pDevice);
typedef int(*ADL2_DESKTOP_DEVICE_DESTROY) (ADL_CONTEXT_HANDLE context, ADL_D3DKMT_HANDLE hDevice);
HINSTANCE hDLL;

ADL_MAIN_CONTROL_CREATE          ADL_Main_Control_Create = NULL;
ADL_MAIN_CONTROL_DESTROY         ADL_Main_Control_Destroy = NULL;
ADL_ADAPTER_NUMBEROFADAPTERS_GET ADL_Adapter_NumberOfAdapters_Get = NULL;
ADL_ADAPTER_ADAPTERINFO_GET      ADL_Adapter_AdapterInfo_Get = NULL;
ADL_ADAPTERX2_CAPS               ADL_AdapterX2_Caps = NULL;
ADL2_ADAPTER_ACTIVE_GET          ADL2_Adapter_Active_Get = NULL;
ADL2_OVERDRIVE_CAPS              ADL2_Overdrive_Caps = NULL;
ADL2_ADAPTER_REGVALUEINT_GET     ADL2_Adapter_RegValueInt_Get = NULL;

ADL2_OVERDRIVE8_INIT_SETTING_GET ADL2_Overdrive8_Init_Setting_Get = NULL;
ADL2_OVERDRIVE8_CURRENT_SETTING_GET ADL2_Overdrive8_Current_Setting_Get = NULL;
ADL2_OVERDRIVE8_SETTING_SET ADL2_Overdrive8_Setting_Set = NULL;
ADL2_NEW_QUERYPMLOGDATA_GET ADL2_New_QueryPMLogData_Get = NULL;

ADL2_OVERDRIVE8_INIT_SETTINGX2_GET ADL2_Overdrive8_Init_SettingX2_Get = NULL;
ADL2_OVERDRIVE8_CURRENT_SETTINGX2_GET ADL2_Overdrive8_Current_SettingX2_Get = NULL;

ADL2_ADAPTER_PMLOG_SUPPORT_GET ADL2_Adapter_PMLog_Support_Get = NULL;
ADL2_ADAPTER_PMLOG_SUPPORT_START ADL2_Adapter_PMLog_Support_Start = NULL;
ADL2_ADAPTER_PMLOG_SUPPORT_STOP ADL2_Adapter_PMLog_Support_Stop = NULL;
ADL2_DESKTOP_DEVICE_CREATE ADL2_Desktop_Device_Create = NULL;
ADL2_DESKTOP_DEVICE_DESTROY ADL2_Desktop_Device_Destroy = NULL;


// Memory allocation function
void* __stdcall ADL_Main_Memory_Alloc(int iSize)
{
    void* lpBuffer = malloc(iSize);
    return lpBuffer;
}

// Optional Memory de-allocation function
void __stdcall ADL_Main_Memory_Free(void** lpBuffer)
{
    if (NULL != *lpBuffer)
    {
        free(*lpBuffer);
        *lpBuffer = NULL;
    }
}

ADL_CONTEXT_HANDLE context = NULL;
LPAdapterInfo   lpAdapterInfo = NULL;
int  iNumberAdapters;
int initializeADL()
{

    // Load the ADL dll
    hDLL = LoadLibrary(TEXT("atiadlxx.dll"));
    if (hDLL == NULL)
    {
        // A 32 bit calling application on 64 bit OS will fail to LoadLibrary.
        // Try to load the 32 bit library (atiadlxy.dll) instead
        hDLL = LoadLibrary(TEXT("atiadlxy.dll"));
    }

    if (NULL == hDLL)
    {
        PRINTF("Failed to load ADL library\n");
        return FALSE;
    }
    ADL_Main_Control_Create = (ADL_MAIN_CONTROL_CREATE)GetProcAddress(hDLL, "ADL_Main_Control_Create");
    ADL_Main_Control_Destroy = (ADL_MAIN_CONTROL_DESTROY)GetProcAddress(hDLL, "ADL_Main_Control_Destroy");
    ADL_Adapter_NumberOfAdapters_Get = (ADL_ADAPTER_NUMBEROFADAPTERS_GET)GetProcAddress(hDLL, "ADL_Adapter_NumberOfAdapters_Get");
    ADL_Adapter_AdapterInfo_Get = (ADL_ADAPTER_ADAPTERINFO_GET)GetProcAddress(hDLL, "ADL_Adapter_AdapterInfo_Get");
    ADL_AdapterX2_Caps = (ADL_ADAPTERX2_CAPS)GetProcAddress(hDLL, "ADL_AdapterX2_Caps");
    ADL2_Adapter_Active_Get = (ADL2_ADAPTER_ACTIVE_GET)GetProcAddress(hDLL, "ADL2_Adapter_Active_Get");
    ADL2_Overdrive_Caps = (ADL2_OVERDRIVE_CAPS)GetProcAddress(hDLL, "ADL2_Overdrive_Caps");
    ADL2_Adapter_RegValueInt_Get = (ADL2_ADAPTER_REGVALUEINT_GET)GetProcAddress(hDLL, "ADL2_Adapter_RegValueInt_Get");

    ADL2_Overdrive8_Init_Setting_Get = (ADL2_OVERDRIVE8_INIT_SETTING_GET)GetProcAddress(hDLL, "ADL2_Overdrive8_Init_Setting_Get");
    ADL2_Overdrive8_Current_Setting_Get = (ADL2_OVERDRIVE8_CURRENT_SETTING_GET)GetProcAddress(hDLL, "ADL2_Overdrive8_Current_Setting_Get");
    ADL2_Overdrive8_Setting_Set = (ADL2_OVERDRIVE8_SETTING_SET)GetProcAddress(hDLL, "ADL2_Overdrive8_Setting_Set");
    ADL2_New_QueryPMLogData_Get = (ADL2_NEW_QUERYPMLOGDATA_GET)GetProcAddress(hDLL, "ADL2_New_QueryPMLogData_Get");

    ADL2_Overdrive8_Init_SettingX2_Get = (ADL2_OVERDRIVE8_INIT_SETTINGX2_GET)GetProcAddress(hDLL, "ADL2_Overdrive8_Init_SettingX2_Get");
    ADL2_Overdrive8_Current_SettingX2_Get = (ADL2_OVERDRIVE8_CURRENT_SETTINGX2_GET)GetProcAddress(hDLL, "ADL2_Overdrive8_Current_SettingX2_Get");

    ADL2_Adapter_PMLog_Support_Get = (ADL2_ADAPTER_PMLOG_SUPPORT_GET)GetProcAddress(hDLL, "ADL2_Adapter_PMLog_Support_Get");
    ADL2_Adapter_PMLog_Support_Start = (ADL2_ADAPTER_PMLOG_SUPPORT_START)GetProcAddress(hDLL, "ADL2_Adapter_PMLog_Start");
    ADL2_Adapter_PMLog_Support_Stop = (ADL2_ADAPTER_PMLOG_SUPPORT_STOP)GetProcAddress(hDLL, "ADL2_Adapter_PMLog_Stop");
    ADL2_Desktop_Device_Create = (ADL2_DESKTOP_DEVICE_CREATE)GetProcAddress(hDLL, "ADL2_Desktop_Device_Create");
    ADL2_Desktop_Device_Destroy = (ADL2_DESKTOP_DEVICE_DESTROY)GetProcAddress(hDLL, "ADL2_Desktop_Device_Destroy");

    if (NULL == ADL_Main_Control_Create ||
        NULL == ADL_Main_Control_Destroy ||
        NULL == ADL_Adapter_NumberOfAdapters_Get ||
        NULL == ADL_Adapter_AdapterInfo_Get ||
        NULL == ADL_AdapterX2_Caps ||
        NULL == ADL2_Adapter_Active_Get ||
        NULL == ADL2_Overdrive_Caps ||
        NULL == ADL2_Adapter_RegValueInt_Get ||
        NULL == ADL2_Overdrive8_Init_Setting_Get ||
        NULL == ADL2_Overdrive8_Current_Setting_Get ||
        NULL == ADL2_Overdrive8_Setting_Set ||
        NULL == ADL2_New_QueryPMLogData_Get ||
        NULL == ADL2_Overdrive8_Init_SettingX2_Get ||
        NULL == ADL2_Overdrive8_Current_SettingX2_Get ||
        NULL == ADL2_Adapter_PMLog_Support_Get ||
        NULL == ADL2_Adapter_PMLog_Support_Start ||
        NULL == ADL2_Adapter_PMLog_Support_Stop ||
        NULL == ADL2_Desktop_Device_Create ||
        NULL == ADL2_Desktop_Device_Destroy)
    {
        PRINTF("Failed to get ADL function pointers\n");
        return FALSE;
    }

    if (ADL_OK != ADL_Main_Control_Create(ADL_Main_Memory_Alloc, 1))
    {
        printf("Failed to initialize nested ADL2 context");
        return ADL_ERR;
    }

    return TRUE;
}

void deinitializeADL()
{
    ADL_Main_Control_Destroy();
    if (NULL != hDLL)
    {
        FreeLibrary(hDLL);
        hDLL = NULL;
    }
}
int GetOD8InitSetting(int iAdapterIndex, ADLOD8InitSetting& odInitSetting)
{
    int ret = -1;
    memset(&odInitSetting, 0, sizeof(ADLOD8InitSetting));
    odInitSetting.count = OD8_COUNT;
    int overdrive8Capabilities;
    int numberOfFeatures = OD8_COUNT;
    ADLOD8SingleInitSetting* lpInitSettingList = NULL;
    if (NULL != ADL2_Overdrive8_Init_SettingX2_Get)
    {
        ret = ADL2_Overdrive8_Init_SettingX2_Get(context, iAdapterIndex, &overdrive8Capabilities, &numberOfFeatures, &lpInitSettingList);
        if (0 == ret)
        {
            ret = -1;
            odInitSetting.count = numberOfFeatures > OD8_COUNT ? OD8_COUNT : numberOfFeatures;
            odInitSetting.overdrive8Capabilities = overdrive8Capabilities;
            for (int i = 0; i < odInitSetting.count; i++)
            {
                odInitSetting.od8SettingTable[i].defaultValue = lpInitSettingList[i].defaultValue;
                odInitSetting.od8SettingTable[i].featureID = lpInitSettingList[i].featureID;
                odInitSetting.od8SettingTable[i].maxValue = lpInitSettingList[i].maxValue;
                odInitSetting.od8SettingTable[i].minValue = lpInitSettingList[i].minValue;
            }
            ADL_Main_Memory_Free((void**)&lpInitSettingList);
        }
        else
        {
            PRINTF("ADL2_Overdrive8_Init_SettingX2_Get is failed\n");
            ADL_Main_Memory_Free((void**)&lpInitSettingList);
            return ADL_ERR;
        }
    }
    else
    {
        if (NULL != ADL2_Overdrive8_Init_Setting_Get)
        {
            ret = ADL2_Overdrive8_Init_Setting_Get(context, iAdapterIndex, &odInitSetting);
            if (0 == ret)
                ret = -1;
            else
            {
                PRINTF("ADL2_Overdrive8_Init_Setting_Get is failed\n");
                return ADL_ERR;
            }
        }
    }
    return ADL_OK;
}
int GetOD8CurrentSetting(int iAdapterIndex, ADLOD8CurrentSetting& odCurrentSetting)
{
    int ret = -1;
    memset(&odCurrentSetting, 0, sizeof(ADLOD8CurrentSetting));
    odCurrentSetting.count = OD8_COUNT;

    int numberOfFeaturesCurrent = OD8_COUNT;
    int* lpCurrentSettingList = NULL;
    if (NULL != ADL2_Overdrive8_Current_SettingX2_Get)
    {
        ret = ADL2_Overdrive8_Current_SettingX2_Get(context, iAdapterIndex, &numberOfFeaturesCurrent, &lpCurrentSettingList);
        if (0 == ret)
        {
            ret = -1;
            odCurrentSetting.count = numberOfFeaturesCurrent > OD8_COUNT ? OD8_COUNT : numberOfFeaturesCurrent;
            for (int i = 0; i < odCurrentSetting.count; i++)
            {
                odCurrentSetting.Od8SettingTable[i] = lpCurrentSettingList[i];
            }
            ADL_Main_Memory_Free((void**)&lpCurrentSettingList);
        }
        else
        {
            PRINTF("ADL2_Overdrive8_Current_SettingX2_Get is failed\n");
            ADL_Main_Memory_Free((void**)&lpCurrentSettingList);
            return ADL_ERR;
        }
    }
    else
    {
        if (NULL != ADL2_Overdrive8_Current_Setting_Get)
        {
            ret = ADL2_Overdrive8_Current_Setting_Get(context, iAdapterIndex, &odCurrentSetting);
            if (0 == ret)
                ret = -1;
            else
            {
                PRINTF("ADL2_Overdrive8_Current_Setting_Get is failed\n");
                return ADL_ERR;
            }
        }

    }
    return ADL_OK;
}

int GetOD8RangePrint(ADLOD8InitSetting odInitSetting, ADLOD8CurrentSetting odCurrentSetting, OverdriveRangeDataStruct& oneRangeData, int itemID_, int featureID_)
{
    memset(&oneRangeData, 0, sizeof(OverdriveRangeDataStruct));
    oneRangeData.Max_ = odInitSetting.od8SettingTable[itemID_].maxValue;
    oneRangeData.Min_ = odInitSetting.od8SettingTable[itemID_].minValue;
    oneRangeData.DefaultValue_ = odInitSetting.od8SettingTable[itemID_].defaultValue;
    if (OD8_GFXCLK_FMIN == itemID_ || OD8_GFXCLK_FMAX == itemID_ || OD8_UCLK_FMAX == itemID_ || OD8_AC_TIMING == itemID_ || OD8_FAN_ZERORPM_CONTROL == itemID_
        || OD8_AUTO_UV_ENGINE_CONTROL == itemID_ || OD8_AUTO_OC_ENGINE_CONTROL == itemID_ || OD8_AUTO_OC_MEMORY_CONTROL == itemID_)
        oneRangeData.Visible_ = true;
    else
        oneRangeData.Visible_ = ((odInitSetting.overdrive8Capabilities & featureID_) == featureID_) ? true : false;
    PRINTF("itemID:");
    PrintFeatureName(itemID_);
    if (oneRangeData.Visible_) {
        PRINTF(" is Visible\n");
        oneRangeData.ExpectedValue_ = odCurrentSetting.Od8SettingTable[itemID_];
        PRINTF("actualValue:%d\n", oneRangeData.ExpectedValue_);
    }
    else
        PRINTF(" is not Visible\n");
    PrintFeatureName(itemID_);
    PRINTF("maxValue:%d\n", oneRangeData.Max_);
    PRINTF("minValue:%d\n", oneRangeData.Min_);
    PRINTF("defaultValue:%d\n", oneRangeData.DefaultValue_);
    PRINTF("-----------------------------------------\n");
    return ADL_OK;
}

int printOD8TemperatureSettingParameters()
{
    int i;
    int ret = -1;
    int iSupported = 0, iEnabled = 0, iVersion = 0;

    // Repeat for all available adapters in the system
    for (i = 0; i < iNumberAdapters; i++)
    {
        PRINTF("-----------------------------------------\n");
        PRINTF("Adapter Index[%d]\n ", lpAdapterInfo[i].iAdapterIndex);
        PRINTF("-----------------------------------------\n");
        if (lpAdapterInfo[i].iBusNumber > -1)
        {
            ADL2_Overdrive_Caps(context, lpAdapterInfo[i].iAdapterIndex, &iSupported, &iEnabled, &iVersion);
            if (iVersion == 8)
            {
                //OD8 initial Status
                ADLOD8InitSetting odInitSetting;
                if (ADL_OK != GetOD8InitSetting(lpAdapterInfo[i].iAdapterIndex, odInitSetting))
                {
                    PRINTF("Get Init Setting failed.\n");
                    return ADL_ERR;
                }

                //OD8 Current Status
                ADLOD8CurrentSetting odCurrentSetting;
                if (ADL_OK != GetOD8CurrentSetting(lpAdapterInfo[i].iAdapterIndex, odCurrentSetting))
                {
                    PRINTF("Get Current Setting failed.\n");
                    return ADL_ERR;
                }

                //make ADL call for VEGA12
                ADLPMLogDataOutput odlpDataOutput;
                memset(&odlpDataOutput, 0, sizeof(ADLPMLogDataOutput));
                ret = ADL2_New_QueryPMLogData_Get(context, lpAdapterInfo[i].iAdapterIndex, &odlpDataOutput);
                if (0 == ret)
                {
                    if (((odInitSetting.overdrive8Capabilities & ADL_OD8_TEMPERATURE_SYSTEM) == ADL_OD8_TEMPERATURE_SYSTEM) ||
                        ((odInitSetting.overdrive8Capabilities & ADL_OD8_TEMPERATURE_FAN) == ADL_OD8_TEMPERATURE_FAN) ||
                        ((odInitSetting.overdrive8Capabilities & ADL_OD8_POWER_LIMIT) == ADL_OD8_POWER_LIMIT))
                    {
                        OverdriveRangeDataStruct oneRangeData;
                        GetOD8RangePrint(odInitSetting, odCurrentSetting, oneRangeData, OD8_OPERATING_TEMP_MAX, ADL_OD8_TEMPERATURE_SYSTEM);
                        GetOD8RangePrint(odInitSetting, odCurrentSetting, oneRangeData, OD8_FAN_TARGET_TEMP, ADL_OD8_TEMPERATURE_FAN);
                        GetOD8RangePrint(odInitSetting, odCurrentSetting, oneRangeData, OD8_POWER_PERCENTAGE, ADL_OD8_POWER_LIMIT);

                        PRINTF("ADLSensorType: PMLOG_TEMPERATURE_EDGE - Current Temp\n");
                        PRINTF("PMLOG_TEMPERATURE_EDGE.supported:%d\n", odlpDataOutput.sensors[PMLOG_TEMPERATURE_EDGE].supported);
                        PRINTF("PMLOG_TEMPERATURE_EDGE.value:%d\n", odlpDataOutput.sensors[PMLOG_TEMPERATURE_EDGE].value);

                        PRINTF("ADLSensorType: PMLOG_TEMPERATURE_HOTSPOT - Junction Temp\n");
                        PRINTF("PMLOG_TEMPERATURE_HOTSPOT.supported:%d\n", odlpDataOutput.sensors[PMLOG_TEMPERATURE_HOTSPOT].supported);
                        PRINTF("PMLOG_TEMPERATURE_HOTSPOT.value:%d\n", odlpDataOutput.sensors[PMLOG_TEMPERATURE_HOTSPOT].value);

                        PRINTF("ADLSensorType: PMLOG_TEMPERATURE_MEM - Memory Temp\n");
                        PRINTF("PMLOG_TEMPERATURE_MEM.supported:%d\n", odlpDataOutput.sensors[PMLOG_TEMPERATURE_MEM].supported);
                        PRINTF("PMLOG_TEMPERATURE_MEM.value:%d\n", odlpDataOutput.sensors[PMLOG_TEMPERATURE_MEM].value);
                        PRINTF("-----------------------------------------\n");

                    }
                    else
                        PRINTF("OD8 Failed to get Temperature Settings\n");
                }
                else
                {
                    PRINTF("ADL2_New_QueryPMLogData_Get is failed\n");
                    return ADL_ERR;
                }
                break;
            }
        }

    }
    return 0;
}

int main()
{
    if (!initializeADL())
    {
        printf("Dumm gelaufen\n");
        exit(1);
    }
    if (ADL_OK != ADL_Adapter_NumberOfAdapters_Get(&iNumberAdapters))
    {
        PRINTF("Cannot get the number of adapters!\n");
        return 0;
    }
    printf("Gefunden: %d Grafikkarten\n", iNumberAdapters);
    if (0 < iNumberAdapters)
    {
        lpAdapterInfo = (LPAdapterInfo)malloc(sizeof(AdapterInfo) * iNumberAdapters);
        if (lpAdapterInfo) memset(lpAdapterInfo, '\0', sizeof(AdapterInfo) * iNumberAdapters);
        // Get the AdapterInfo structure for all adapters in the system
        ADL_Adapter_AdapterInfo_Get(lpAdapterInfo, sizeof(AdapterInfo) * iNumberAdapters);
        printOD8TemperatureSettingParameters();
        ADL_Main_Memory_Free((void**)&lpAdapterInfo);
       
    }
    deinitializeADL();

    std::cout << "ENDE!\n";
}

Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Cypheros am Oktober 05, 2020, 21:58:08
Neue Version 0.5.6 ist online: https://www.cypheros.de/files/tools/CySysInfo_0_5_Beta.zip (https://www.cypheros.de/files/tools/CySysInfo_0_5_Beta.zip)

Sollte nun auch mit Radeon RX 5000 Karten mit Overdrive 8 klar kommen.
Für die Temperatur hab ich PMLOG_TEMPERATURE_EDGE genommen und für die Auslastung PMLOG_INFO_ACTIVITY_GFX.
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Mam am Oktober 05, 2020, 22:50:18
Yep! alles im grünen Bereich Grosser  ;D

(ich wusste doch, dass Du das hinkriegst (mit ein paar Tritten  ;D)  :-* )

Allerdings könntest Du die GUI noch etwas relaxen, sie ist hauptsächlich für die GraKa Temp und Auslastung verantwortlich.
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Cypheros am Oktober 06, 2020, 00:06:17
Ja, das muss noch optimiert werden.

Das Projekt war gedacht um die geräteübergreifende GUI von Delphi kennen zu lernen, die auf DirectX und OpenGL basiert und sowohl unter Windows, Linux, MacOS, IOS und Android läuft. Erstaunlich wie aufwendig es ist Temperatur-Sensoren auszulesen und die CPU und GPU Belastung zu erkennen.

Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Mam am Oktober 06, 2020, 06:17:21
Zitat von: Cypheros am Oktober 06, 2020, 00:06:17
Das Projekt war gedacht um die geräteübergreifende GUI von Delphi kennen zu lernen,
Ich dachte, Du wolltest langsam mal eine richtige Programmiersprache lernen  ;D  8)
So von matschigen Müsli hin zu Hardcore-C (ohne ++, das ist nur für Weicheier).
Ich hätte auch noch einen alten Amiga im Angebot, da kannst Du sogar "B" (BCPL) üben!

Und nicht in Vergessenheit geraten lassen: die WinRing0x64.dll / .sys gehört in einen Pfad auf einem lokalen Laufwerk. Da wirst Du um ein Setup Programm nicht rumkommen.

Zitat
Erstaunlich wie aufwendig es ist Temperatur-Sensoren auszulesen und die CPU und GPU Belastung zu erkennen.
Na ja, nach dem ersten Schock gefolgt von weiterem Einlesen klang die Panik doch recht schnell ab. Ist zwar nicht schön und clever, was AMD da gemacht hat, aber doch nachvollziehbar. Die haben anfangs eben nicht damit gerechnet, dass GraKas irgendwann einmal die Komplexität einer schnöden CPU dramatisch übersteigen und ihre APIs immer nur auf Sicht ausgelegt.
Aber die derzeitige ist doch recht erweiterbar, sieht sie doch 8 Devices pro Karte, 16 Karten pro Rechner und variable Register pro Karte vor. Der Nachteil ist dann natürlich, dass es nicht mehr DIE (eine) Temperatur gibt, sondern ganze viele...
Ich weis nicht, ob NVidea da ebensolche Reserven vorgesehen hat. Intel ganz bestimmt nicht :-)
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Mam am Oktober 06, 2020, 20:08:49
Wars das jetzt für die Fingerübung, oder kommt da noch ein "richtiges" Release?
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Cypheros am Oktober 06, 2020, 22:47:28
Ganz ruhig Brauner ;-)

Tüftle noch daran den Performance-Bedarf zu drücken. Eine Version mit Setup ist in Planung, sobald die grundlegenden Funktionen einigermassen fehlerfrei laufen.
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Mam am Oktober 07, 2020, 06:31:45
Zitat von: Cypheros am Oktober 06, 2020, 22:47:28
Ganz ruhig Brauner ;-)
Ich hab da gar keine Hektik, wollte nur wissen, wo es lang geht  8)
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Cypheros am Oktober 08, 2020, 00:43:40
Neue Version 0.5.7 sollte die GPU-Belastung deutlich reduzieren.
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Mam am Oktober 08, 2020, 07:59:54
Zitat von: Cypheros am Oktober 08, 2020, 00:43:40
Neue Version 0.5.7 sollte die GPU-Belastung deutlich reduzieren.
Ja, tut sie  :D!
Allerdings auf Kosten der Funktion, die ist nun doch etwas sehr eingeschränkt, siehe Anhang

Schafft es sogar noch nichtmal mehr ins Ereignisprotokoll...
Aber sein privates Log hat er noch vor dem Abflug hurtig erstellt:

8.10.2020 08:00:59: Start
08.10.2020 08:00:59: Cypheros System Info 0.5
08.10.2020 08:00:59: Windows       = Windows 10 (Version 10.0, Build 19041, 64-Bit-Edition)
08.10.2020 08:00:59: CPU vendor    = AuthenticAMD
08.10.2020 08:00:59: CPU model     = AMD Ryzen 9 3900X 12-Core Processor           
08.10.2020 08:00:59: CPU signature = 00870F10
08.10.2020 08:00:59: CPU family    = 23
08.10.2020 08:00:59: CPU model     = 113
08.10.2020 08:00:59: CPU stepping  = 0
08.10.2020 08:00:59: 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
08.10.2020 08:00:59: Start WinRing0 to access AMD CPU temperature sensor
08.10.2020 08:00:59: WinRing0 status = 0
08.10.2020 08:00:59: first temperature call >
First temperature readout (NB) = 51°C
08.10.2020 08:00:59: AMD GPUs found = 1
08.10.2020 08:00:59: AMD driver version = 20.20.29.01-200910a-359160C-RadeonSoftwareAdrenalin2020
08.10.2020 08:00:59: AMD Catalyst version =
08.10.2020 08:00:59: GPU1 vendor = AMD
08.10.2020 08:00:59: GPU1 model  = Radeon RX 5700 XT
08.10.2020 08:00:59: GPU1 Overdrive version  = 8
08.10.2020 08:00:59: GPU1 usage  = 21%
08.10.2020 08:00:59: GPU1 temperature  = 30°C
08.10.2020 08:00:59: GPU1 first usage call
ADL2_New_QueryPMLogData_Get = 0
ADL2_Overdrive5_FanSpeed_Get = Function  not supported by the driver (-8)
ADL2_Adapter_MemoryInfo_Get = OK (0)

08.10.2020 08:00:59: GPU1 ADL2_New_QueryPMLogData_Get
ADL2_New_QueryPMLogData_Get = 0
SENSOR_MAXTYPES = 0 , 0
PMLOG_CLK_GFXCLK = 1 , 335
PMLOG_CLK_MEMCLK = 1 , 200
PMLOG_CLK_SOCCLK = 1 , 422
PMLOG_CLK_UVDCLK1 = 1 , 0
PMLOG_CLK_UVDCLK2 = 1 , 0
PMLOG_CLK_VCECLK = 0 , 0
PMLOG_CLK_VCNCLK = 0 , 0
PMLOG_TEMPERATURE_EDGE = 1 , 30
PMLOG_TEMPERATURE_MEM = 1 , 34
PMLOG_TEMPERATURE_VRVDDC = 1 , 25
PMLOG_TEMPERATURE_VRMVDD = 0 , 0
PMLOG_TEMPERATURE_LIQUID = 0 , 0
PMLOG_TEMPERATURE_PLX = 0 , 0
PMLOG_FAN_RPM = 1 , 1129
PMLOG_FAN_PERCENTAGE = 1 , 22
PMLOG_SOC_VOLTAGE = 1 , 793
PMLOG_SOC_POWER = 0 , 0
PMLOG_SOC_CURRENT = 0 , 0
PMLOG_INFO_ACTIVITY_GFX = 1 , 19
PMLOG_INFO_ACTIVITY_MEM = 1 , 3
PMLOG_GFX_VOLTAGE = 1 , 725
PMLOG_MEM_VOLTAGE = 1 , 675
PMLOG_ASIC_POWER = 1 , 10
PMLOG_TEMPERATURE_VRSOC = 0 , 0
PMLOG_TEMPERATURE_VRMVDD0 = 1 , 29
PMLOG_TEMPERATURE_VRMVDD1 = 1 , 29
PMLOG_TEMPERATURE_HOTSPOT = 1 , 30
PMLOG_TEMPERATURE_GFX = 0 , 0
PMLOG_TEMPERATURE_SOC = 0 , 0
PMLOG_GFX_POWER = 0 , 0
PMLOG_TEMPERATURE_CPU = 0 , 0
PMLOG_CPU_POWER = 0 , 0
PMLOG_CLK_CPUCLK = 0 , 0
PMLOG_THROTTLER_STATUS = 0 , 3
PMLOG_CLK_VCN1CLK1 = 0 , 0
PMLOG_CLK_VCN1CLK2 = 0 , 0
PMLOG_SMART_POWERSHIFT_CPU = 0 , 0
PMLOG_SMART_POWERSHIFT_DGPU = 0 , 0
PMLOG_MAX_SENSORS_REAL = 1 , 0

Dafü bleibt nun winring0x64.sys im Speicher gelockt, selbst nach einem Reboot kann man sie nicht mehr löschen (wird also per Autostart wohl irgendwo mitgeladen). Das ist nicht sehr vertrauenserweckend MEISTA!  :o

Also warten wir mal auf 0.5.8...
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Cypheros am Oktober 08, 2020, 10:37:07
Nein, Autostart ist noch nicht eingebaut. Möglicherweise blockt ein anderes Tool den Treiber.

Hier getestet mit Ryzen3 3200U + Vega 3 und mit Intel I7 + RTX2080 unter Windows 10. Da gibt es keine Probleme.
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Mam am Oktober 08, 2020, 10:47:22
Zitat von: Cypheros am Oktober 08, 2020, 10:37:07
Nein, Autostart ist noch nicht eingebaut. Möglicherweise blockt ein anderes Tool den Treiber.

Hier getestet mit Ryzen3 3200U + Vega 3 und mit Intel I7 + RTX2080 unter Windows 10. Da gibt es keine Probleme.
Na, wenns keine Probleme gibt, dann wird auch nix geblockt. Aber, wie man sieht, schmiert das Tool hier gnaden- und chancenlos ab und nun fängst Du den Crash zwar ab und bringst ne Messagebox, aber Du vergisst das Release der DLL/SYS bevor Du den Task beendest. Deshalb der Lock. Warum der noch nach nem Reboot da war, weis ich nicht, konnte auch nix finden. Umbenennen und dann reboot, schon konnte man sie loswerden.

Mach lieber den Speicherfehler weg  ;D
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Cypheros am Oktober 08, 2020, 13:45:39
Schau mal ob es mit der neuen Version 0.5.8 besser klappt.
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Mam am Oktober 08, 2020, 15:10:19
Zitat von: Cypheros am Oktober 08, 2020, 13:45:39
Schau mal ob es mit der neuen Version 0.5.8 besser klappt.
Nö. selbst die Abschmieradresse ist gleich geblieben. Sind wir denn sicher, dass wir eine "neue" Version 0.5.8 hochgeladen haben???
Probier doch mal 0.5.9  ;D
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Cypheros am Oktober 08, 2020, 15:39:09
Steht im Log nun mehr drin?
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Mam am Oktober 08, 2020, 15:40:44
Zitat von: Cypheros am Oktober 08, 2020, 15:39:09
Steht im Log nun mehr drin?
Nicht, dass es mir auffallen würde.
08.10.2020 15:07:27: Start
08.10.2020 15:07:27: Cypheros System Info 0.5
08.10.2020 15:07:27: Windows       = Windows 10 (Version 10.0, Build 19041, 64-Bit-Edition)
08.10.2020 15:07:27: CPU vendor    = AuthenticAMD
08.10.2020 15:07:27: CPU model     = AMD Ryzen 9 3900X 12-Core Processor           
08.10.2020 15:07:27: CPU signature = 00870F10
08.10.2020 15:07:27: CPU family    = 23
08.10.2020 15:07:27: CPU model     = 113
08.10.2020 15:07:27: CPU stepping  = 0
08.10.2020 15:07:27: 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
08.10.2020 15:07:27: Start WinRing0 to access AMD CPU temperature sensor
08.10.2020 15:07:27: WinRing0 status = 0
08.10.2020 15:07:27: first temperature call >
First temperature readout (NB) = 48°C
08.10.2020 15:07:27: AMD GPUs found = 1
08.10.2020 15:07:27: AMD driver version = 20.20.29.01-200910a-359160C-RadeonSoftwareAdrenalin2020
08.10.2020 15:07:27: AMD Catalyst version =
08.10.2020 15:07:27: GPU1 vendor = AMD
08.10.2020 15:07:27: GPU1 model  = Radeon RX 5700 XT
08.10.2020 15:07:27: GPU1 Overdrive version  = 8
08.10.2020 15:07:27: GPU1 usage  = 0%
08.10.2020 15:07:27: GPU1 temperature  = 30°C
08.10.2020 15:07:27: GPU1 first usage call
ADL2_New_QueryPMLogData_Get = 0
Allocated mem = 332 bytes
Free mem = 332 bytes
ADL2_Overdrive5_FanSpeed_Get = Function  not supported by the driver (-8)
ADL2_Adapter_MemoryInfo_Get = OK (0)

08.10.2020 15:07:27: GPU1 ADL2_New_QueryPMLogData_Get
ADL2_New_QueryPMLogData_Get = 0
Allocated mem = 332 bytes
SENSOR_MAXTYPES = 0 , 0
PMLOG_CLK_GFXCLK = 1 , 791
PMLOG_CLK_MEMCLK = 1 , 200
PMLOG_CLK_SOCCLK = 1 , 197
PMLOG_CLK_UVDCLK1 = 1 , 0
PMLOG_CLK_UVDCLK2 = 1 , 0
PMLOG_CLK_VCECLK = 0 , 0
PMLOG_CLK_VCNCLK = 0 , 0
PMLOG_TEMPERATURE_EDGE = 1 , 31
PMLOG_TEMPERATURE_MEM = 1 , 36
PMLOG_TEMPERATURE_VRVDDC = 1 , 27
PMLOG_TEMPERATURE_VRMVDD = 0 , 0
PMLOG_TEMPERATURE_LIQUID = 0 , 0
PMLOG_TEMPERATURE_PLX = 0 , 0
PMLOG_FAN_RPM = 1 , 1129
PMLOG_FAN_PERCENTAGE = 1 , 22
PMLOG_SOC_VOLTAGE = 1 , 793
PMLOG_SOC_POWER = 0 , 0
PMLOG_SOC_CURRENT = 0 , 0
PMLOG_INFO_ACTIVITY_GFX = 1 , 0
PMLOG_INFO_ACTIVITY_MEM = 1 , 3
PMLOG_GFX_VOLTAGE = 1 , 725
PMLOG_MEM_VOLTAGE = 1 , 675
PMLOG_ASIC_POWER = 1 , 8
PMLOG_TEMPERATURE_VRSOC = 0 , 0
PMLOG_TEMPERATURE_VRMVDD0 = 1 , 30
PMLOG_TEMPERATURE_VRMVDD1 = 1 , 30
PMLOG_TEMPERATURE_HOTSPOT = 1 , 31
PMLOG_TEMPERATURE_GFX = 0 , 0
PMLOG_TEMPERATURE_SOC = 0 , 0
PMLOG_GFX_POWER = 0 , 0
PMLOG_TEMPERATURE_CPU = 0 , 0
PMLOG_CPU_POWER = 0 , 0
PMLOG_CLK_CPUCLK = 0 , 0
PMLOG_THROTTLER_STATUS = 0 , 3
PMLOG_CLK_VCN1CLK1 = 0 , 0
PMLOG_CLK_VCN1CLK2 = 0 , 0
PMLOG_SMART_POWERSHIFT_CPU = 0 , 0
PMLOG_SMART_POWERSHIFT_DGPU = 0 , 0
PMLOG_MAX_SENSORS_REAL = 1 , 0
Free mem = 332 bytes

08.10.2020 15:07:28: GPU usage type: Overdrive 8
08.10.2020 15:07:28: GPU temperature type: Overdrive 8

Der scheint ja nicht beim Auslesen abzusemmeln, sondern beim Versuch die GUI zu erzeugen.
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Mam am Oktober 09, 2020, 08:35:35
Kann es sein...

Dass Du irrümlich diese WinRing0x64.sys (nicht die DLL!) MEHRMALS lädsts ?
Seit der letzten Version muss ich nach jedem Abflug die Kiste ZWEIMAL rebooten, um das Lock von der Datei wegzubekommen. Da ist wohl ein Zähler, der sie erst freigibt, wenn er auf 0 runtergezählt wurde.
"Dammals" (beim ersten Abflug vor ein paar Tagen) stand er wohl auf 1, nun auf 2.
Ist etwas nervich das Teil wieder loszuwerden...  >:(
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Cypheros am Oktober 09, 2020, 08:46:04
Nop, wird nur einmal für die CPU geladen. Vielleicht wird die Datei automatisch von Windows geladen, da der Treiber ja bei der letzten Sitzung aktiv war (Windows Schnellstart oder sowas).

Die Initialisierung scheint auch zu klappen und die Werte werden korrekt abgerufen. Erst wenn die Werte angezeigt werden sollen, kracht es offenbar. Momentan hab ich keine Idee, an welcher Stelle der Bug sitzen könnte.

Suche gerade nach einer Möglichkeit die Exception abzufangen und den Callstack auszugeben, damit wir sehen können an welcher Stelle das passiert.

Die neue API, die ich da verwende, macht viele Dinge anders als das vorher war. Muss mich da erst reintüfteln.
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Mam am Oktober 09, 2020, 09:41:38
Zitat von: Cypheros am Oktober 09, 2020, 08:46:04
Die neue API, die ich da verwende, macht viele Dinge anders als das vorher war. Muss mich da erst reintüfteln.
Hab keine Eile  ;D
Aber ging ja schon mal früher. Hab natürlich keine Ahnung, was Du da inzwischen rumgedoktort hast. Irgendwo zwischen 0.5.6 und jetzt bist Du wohl falsch abgebogen.
Du wolltest "die GUI beruhigen", ist gelungen  ;D nur eben sehr rigoros  ;D ;D ;D
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Mam am Oktober 09, 2020, 10:25:33
FYI: diese winring0x64.sys wird von "Radeonsoftware.exe" blockiert. AMD hält sie wohl für ein Spiel.
Du wirst also in diesem Falle nicht "der Böse" sein  ;D
(oder irgendwie doch, denn es passiert ja nur, wenn Dein Progrämmchen abgrätscht. Vielleicht macht die GUI Gebrauch von 3d Direct X oder sowas?)

C:\Users\mam>openfiles /query |find /i "d:"
11888 nextcloud.exe        D:\NextCloud
8144  RadeonSoftware.exe   D:\Incoming
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Cypheros am Oktober 09, 2020, 16:34:38
Hab dir Mehl geschickt mit einer Debug-Version, die im Fehlerfall vorschriftsmässig aus dem Leben scheidet und die genaue Todesursache hoffentlich ins Application.log schreibt.
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Mam am Oktober 09, 2020, 16:45:52
Zitat von: Cypheros am Oktober 09, 2020, 16:34:38
Hab dir Mehl geschickt mit einer Debug-Version, die im Fehlerfall vorschriftsmässig aus dem Leben scheidet und die genaue Todesursache hoffentlich ins Application.log schreibt.
Na ja, sie scheidet nicht, aber sie zeigt auch keine CPU Temperatur mehr (mit & ohne DLL/SYS).
Haben wir da etwa ein kleines Debug/Release (aka Optimizer) Problemchen ?  ;D
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Cypheros am Oktober 09, 2020, 18:24:08
OK, neue 0.5.9 ist online. Scheint ja wohl ein Problem mit dem 64bit Code-Optimierer der aktuellen Delphi-Version 10.4.1 zu sein.
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Mam am Oktober 09, 2020, 18:33:10
und solange Du noch am KommPeila rumsuchst, kannst Du Dir auch noch Gedanken für eine dritte Anzeige machen: LÜFTERDREHZAHL  ;D
Zumindest der CPU Lüfter sollte mit angezeigt werden, denn die Temperatur alleine ist nicht so wirklich aussagekräftig, da manche Lüfterregelungen doch arg nachhängen.
Einzelne Hitzespitzen sind also normal, könnten den Anwender aber erschrecken.
Und wenn der Lüfter nicht hochregeln sollte, ist es Zeit mal ins BIOS oder so zu gucken...

Ich installier mir meist die "Tools fürs MoBo"  nicht mit, bzw, schmeisse sie später wieder runter, da sie meist viel BLOATWARE enthalten. Eine kleine Anzeige der wichtigsten Eckdaten ist aber gerne willkommen  ;D
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Cypheros am Oktober 10, 2020, 23:22:03
Lüfterdrehzahl wird für Nvidia- und AMD- Grafikkarten angezeigt mit Version 0.5.10
Titel: Neue Version 0.5.11
Beitrag von: Cypheros am Dezember 08, 2020, 20:30:10
Die neue Version 0.5.11 unterstützt nun auch die neue Ryzen 5000er CPUs (Zen3).
Titel: Re: Neue Version 0.5.11
Beitrag von: Mam am Dezember 08, 2020, 22:07:00
Zitat von: Cypheros am Dezember 08, 2020, 20:30:10
Die neue Version 0.5.11 unterstützt nun auch die neue Ryzen 5000er CPUs (Zen3).
Dafür unterstützt sie die alten GPUs nicht mehr :-(  >:(
(https://cypheros.de/forum_ger2/index.php?action=dlattach;topic=4996.0;attach=9788;image)

Irgendwie entfernst Du Dich mal wieder vom Ziel... :-(
Ich bleib mal bei der letzten Version  ;D
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Cypheros am Dezember 09, 2020, 01:34:44
Keine Ahnung, was da los ist aber die zuständige Klasse AmdGPU hat sich in keiner Weise geändert.
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Mam am Dezember 09, 2020, 07:50:18
Zitat von: Cypheros am Dezember 09, 2020, 01:34:44
Keine Ahnung, was da los ist aber die zuständige Klasse AmdGPU hat sich in keiner Weise geändert.
Keine Ahnung, was Du da gemacht hast, auf jeden Fall krieg ich mit der alten Version sofort ne Anzeige, mit der Neuen nur den Geier Sturzflug
(ist jetzt aber auch nicht soooo lebenswichtig, ich benutze das Tool selten bis gar nicht, probiere es immer nur aus, wenn Du ne neue Version verbreitest und lege sie dann in die Ecke)
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Cypheros am Dezember 10, 2020, 15:49:33
Kannst Du die 0.5.11 nochmal ausprobieren und mir das Application.log unter "C:\ProgramData\Cypheros\SystemInfo" zukommen lassen?
Titel: Re: Cypheros System Info Tool (Temperatur und Auslastung)
Beitrag von: Mam am Dezember 10, 2020, 16:44:29
Zitat von: Cypheros am Dezember 10, 2020, 15:49:33
Kannst Du die 0.5.11 nochmal ausprobieren und mir das Application.log unter "C:\ProgramData\Cypheros\SystemInfo" zukommen lassen?
Hab heute meinen gnädigen  ;D
10.12.2020 16:42:41: Start
10.12.2020 16:42:41: Cypheros System Info 0.5.11
10.12.2020 16:42:41: Windows       = Windows 10 (Version 10.0, Build 19042, 64-Bit-Edition)
10.12.2020 16:42:41: CPU vendor    = AuthenticAMD
10.12.2020 16:42:41: CPU model     = AMD Ryzen 9 3900X 12-Core Processor
10.12.2020 16:42:41: CPU signature = 00870F10
10.12.2020 16:42:41: CPU family    = 23
10.12.2020 16:42:41: CPU model     = 113
10.12.2020 16:42:41: CPU stepping  = 0
10.12.2020 16:42:41: 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
10.12.2020 16:42:41: Start WinRing0 to access AMD CPU temperature sensor
10.12.2020 16:42:41: WinRing0 status = 0
10.12.2020 16:42:41: first temperature call >
First temperature readout (NB) = 67°C
10.12.2020 16:42:41: AMD GPUs found = 1
10.12.2020 16:42:41: AMD driver version = 20.45.01.18-201113a-361134C-RadeonSoftwareAdrenalin2020
10.12.2020 16:42:41: AMD Catalyst version =
10.12.2020 16:42:41: GPU1 vendor = AMD
10.12.2020 16:42:41: GPU1 model  = Radeon RX 5700 XT
10.12.2020 16:42:41: GPU1 Overdrive version  = 8
10.12.2020 16:42:41: GPU1 usage  = 11%
10.12.2020 16:42:41: GPU1 temperature  = 31°C
10.12.2020 16:42:41: GPU1 first usage call
ADL2_New_QueryPMLogData_Get = 0
Allocated mem = 332 bytes
Free mem = 332 bytes
ADL2_Overdrive5_FanSpeed_Get = Function  not supported by the driver (-8)
ADL2_Adapter_MemoryInfo_Get = OK (0)

10.12.2020 16:42:41: GPU1 ADL2_New_QueryPMLogData_Get
ADL2_New_QueryPMLogData_Get = 0
Allocated mem = 332 bytes
SENSOR_MAXTYPES = 0 , 0
PMLOG_CLK_GFXCLK = 1 , 104
PMLOG_CLK_MEMCLK = 1 , 400
PMLOG_CLK_SOCCLK = 1 , 554
PMLOG_CLK_UVDCLK1 = 1 , 0
PMLOG_CLK_UVDCLK2 = 1 , 0
PMLOG_CLK_VCECLK = 0 , 0
PMLOG_CLK_VCNCLK = 0 , 0
PMLOG_TEMPERATURE_EDGE = 1 , 31
PMLOG_TEMPERATURE_MEM = 1 , 36
PMLOG_TEMPERATURE_VRVDDC = 1 , 27
PMLOG_TEMPERATURE_VRMVDD = 0 , 0
PMLOG_TEMPERATURE_LIQUID = 0 , 0
PMLOG_TEMPERATURE_PLX = 0 , 0
PMLOG_FAN_RPM = 1 , 1128
PMLOG_FAN_PERCENTAGE = 1 , 22
PMLOG_SOC_VOLTAGE = 1 , 793
PMLOG_SOC_POWER = 0 , 0
PMLOG_SOC_CURRENT = 0 , 0
PMLOG_INFO_ACTIVITY_GFX = 1 , 9
PMLOG_INFO_ACTIVITY_MEM = 1 , 9
PMLOG_GFX_VOLTAGE = 1 , 750
PMLOG_MEM_VOLTAGE = 1 , 850
PMLOG_ASIC_POWER = 1 , 13
PMLOG_TEMPERATURE_VRSOC = 0 , 0
PMLOG_TEMPERATURE_VRMVDD0 = 1 , 29
PMLOG_TEMPERATURE_VRMVDD1 = 1 , 30
PMLOG_TEMPERATURE_HOTSPOT = 1 , 31
PMLOG_TEMPERATURE_GFX = 0 , 0
PMLOG_TEMPERATURE_SOC = 0 , 0
PMLOG_GFX_POWER = 0 , 0
PMLOG_TEMPERATURE_CPU = 0 , 0
PMLOG_CPU_POWER = 0 , 0
PMLOG_CLK_CPUCLK = 0 , 0
PMLOG_THROTTLER_STATUS = 0 , 0
PMLOG_CLK_VCN1CLK1 = 0 , 0
PMLOG_CLK_VCN1CLK2 = 0 , 0
PMLOG_SMART_POWERSHIFT_CPU = 0 , 0
PMLOG_SMART_POWERSHIFT_DGPU = 0 , 0
PMLOG_MAX_SENSORS_REAL = 1 , 3
Free mem = 332 bytes

10.12.2020 16:42:42: GPU usage type: Overdrive 8
10.12.2020 16:42:42: GPU temperature type: Overdrive 8
10.12.2020 16:42:45: EIntfCastError: Interface nicht unterstützt

Anfangs scheint er ja sogar eine Temperatur auslesen zu können, aber bevor er sie anzeigt, macht er die Grätsche (nach dem EIntfCastError gibts dann nur noch den Segfault als Schwanengesang)
Sind wir da nicht so typensicher ? ? ?  ;D