Code-Beispiel
CPU / System Auslastung unter LINUX ermitteln
Dieses Beispiel zeigt, wie man unter Linux die CPU Auslastung ermitteln kann. Dabei kann die Genauigkeit durch Angabe der Wartezeit "V_WaitMS" verändert werden. Je grösser die Zeit der Messung, desto genauer wird der prozentuale Anteil errechnet, je geringer, desto ungenauer. In der Regel wird eine Wartezeit von 1sek. genutzt. Dies ist ebenfalls der minimale Wert in der KDE Systemstatistik.
Das hier angewande Verfahren basiert auf den Systemstatistiken welche von Linux in "/proc/stat" hinterlegt werden. Dort speichert Linux die Prozesslastung ab, desen Beschreibungen hier zu finden sind:
http://www.linuxhowtos.org/System/procstat.htm
Wie der Prozentualle Anteil erechnet wird, läst sich in der Wiki nachlesen:
http://de.wikipedia.org/wiki/Load#Prozentuale_Auslastungswerte_bei_Linux
"/proc/stat" liefert auch einzelauslastungen zu jeder CPU, falls gewünscht. Hier muss jedoch bei die "F_Usage_Stat" Function umgebaut werden um die entsprechende CPU zeile zu lesen.
Der erste Codeblock ist das Beispiel, der zweite sind die nötigen Berechnungskomponenten.
Declare Function F_Usage_Stat(B_DD() as ULongInt, ByRef B_DC as UByte) as UByte
Declare Function F_Usage_CPU_Percent(V_WaitMS as UShort) as Short
Dim DD() as ULongInt
Dim DC as UByte
If F_Usage_Stat(DD(), DC) = 0 Then
Print "user: " & DD(1)
Print "nice: " & DD(2)
Print "system: " & DD(3)
Print "idle: " & DD(4)
Print "iowait: " & DD(5)
Print "irq: " & DD(6)
Print "softirq: " & DD(7)
End If
Do
Print F_Usage_CPU_Percent(100)
If Inkey = Chr(27) Then Exit Do
Sleep 500
Loop
'SYSTEM-STATISTIK AUSLESEN
Function F_Usage_Stat(B_DD() as ULongInt, ByRef B_DC as UByte) as UByte
B_DC = 0
Dim XFID as Integer
Dim D as String
XFID = FreeFile
Open "/proc/stat" for input as #XFID
Input #XFID, D
Close #XFID
Dim XPos as UShort
XPos = InStr(1, D, " ")
If XPos <= 0 Then Return 1
D = Mid(D, XPos + 1)
Dim DD(8) as String
Dim T as String
Do
XPos = InStr(1, D, " ")
If XPos > 0 Then
T = Mid(D, 1, XPos - 1)
D = Mid(D, XPos + 1)
Else: T = D: D = ""
End If
If T <> "" Then
B_DC += 1: Redim Preserve B_DD(B_DC) as ULongInt
B_DD(B_DC) = ValLng(T)
End If
If (D = "") or (B_DC = 7) Then Exit Do
Loop
If B_DC <> 7 Then Return 1
Return 0
End Function
'SYSTEM-STATISTIK AUSLESEN UND PROZENTUALE CPU AUSLASTUNG AUSRECHNEN
Function F_Usage_CPU_Percent(V_WaitMS as UShort) as Short
Dim DD() as ULongInt
Dim LD() as ULongInt
Dim DC as UByte
If F_Usage_Stat(LD(), DC) <> 0 Then Return -1
sleep V_WaitMS
If F_Usage_Stat(DD(), DC) <> 0 Then Return -1
DD(1) = DD(1) - LD(1)
DD(2) = DD(2) - LD(2)
DD(3) = DD(3) - LD(3)
DD(4) = DD(4) - LD(4)
DD(1) = DD(1) + DD(2) + DD(3) + DD(4)
Dim T as Short
T = 100 - 100 / CSng(DD(1)) * CSng(DD(4))
If T < 0 Then T = 0
If T > 100 Then T = 100
Return T
End Function
Zusätzliche Informationen und Funktionen |
|
|