Aktuelles

C/C++ Funktion zum Auslesen der CPU Last unter Linux

TheRealPredator

Enthusiast
Thread Starter
Mitglied seit
16.07.2003
Beiträge
2.506
Ort
78532 Tuttlingen
Hi Leute.
Ich bin gerade in meinem Praxissemester bei der IBM und bin im Fachbereich Benchmarking bzw Performancemessung und meine Aufgabe ist es gerade einen Benchmark derart zu erweitern das er zu einer gewissen Zeit die aktuelle CPU Last ausgibt die anliegt. Momentan wird das alles noch etwas umständlich über einen Umweg über das Programm SAR bzw SADC geregelt. Vorraussetzung ist das diese Funktion möglichst wenig Impact auf die eigentlichen Benchergebnisse haben sollte.
Ich wäre euch echt dankbar wenn mir jmd eine Libary nennen könnte die evtl. diese Funktionalität bietet, wiegesagt Ich brauch lediglich die CPU Last in %, welche dann mit fprintf, mitausgeben werden soll.

MFG TRP
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.

Seratio

Enthusiast
Mitglied seit
14.07.2004
Beiträge
4.040
Ort
viva colonia
Code:
[B]double[/B] GetCPULoad() 
{ 
    [B]static[/B] DWORD dwLastProcessTime = 0; 
    [B]static[/B] DWORD dwLastSystemTime = 0; 
    [B]static double[/B] dCPULoad = 0; 
 
    FILETIME ftCreationTime, ftExitTime, ftKernelTime, ftUserTime; 
    GetProcessTimes(GetCurrentProcess(),&ftCreationTime,&ftExitTime,&ftKernelTime,&ftUserTime); 
 
    ULARGE_INTEGER uiKernelTime, uiUserTime; 
    uiKernelTime.HighPart = ftKernelTime.dwHighDateTime; 
    uiKernelTime.LowPart  = ftKernelTime.dwLowDateTime; 
    uiUserTime.HighPart = ftUserTime.dwHighDateTime; 
    uiUserTime.LowPart  = ftUserTime.dwLowDateTime; 
 
    DWORD dwActualProcessTime = (DWORD)((uiKernelTime.QuadPart + uiUserTime.QuadPart)/100); 
    DWORD dwActualSystemTime  = GetTickCount(); 
 
    [B]if[/B](dwLastSystemTime) { 
        dCPULoad = ([B]double[/B])(dwActualProcessTime-dwLastProcessTime)/(dwActualSystemTime-dwLastSystemTime); 
    } 
    dwLastProcessTime = dwActualProcessTime; 
    dwLastSystemTime  = dwActualSystemTime; 
 
    [B]return[/B] dCPULoad; 
}
Quelle:
http://www.c-plusplus.de/forum/viewtopic-var-t-is-86669.html
 

TheRealPredator

Enthusiast
Thread Starter
Mitglied seit
16.07.2003
Beiträge
2.506
Ort
78532 Tuttlingen
Das sieht schonmal nice aus aber wie Ich gerade sehe hab Ich vergessen zu erwähnen das das BEtriebssytem ein Linux ist. Folglich wird der angegebene Quellcode wohl nicht laufen...
 

Sebi20V

Neuling
Mitglied seit
29.11.2003
Beiträge
189
Hallo TheRealPredator,
unter GNU/Linux brauchst du nur die Datei /proc/loadavg oder /proc/stat auslesen und ggf. auswerten.
Die Auslastung wird aber etwas anders angegeben als unter Windows, wie die Werte zu interpretieren sind steht z.B. auf http://de.wikipedia.org/wiki/Load. Als Beispiel für eine Implementierung kannst du dir uptime anschauen, den Quelltext gibts auf der Projektseite.

Gruß Sebastian
 
Zuletzt bearbeitet:
Oben Unten