Forum Discussion
Aaron_McMahon_2
Nimbostratus
Aug 27, 2007Multi-CPU Usage
In a multi-CPU BIG-IP, what's the best way to get each CPU's usage as a percentage?
I've muddled through the iControl SDK for a while. I've pulled some test values out through iControl but ...
Aaron_McMahon_2
Nimbostratus
Aug 27, 2007Okay, here's some code that sorta works. But the percentages I'm getting back are around 2.5% during each 5-second polling interval. The BIG-IP GUI shows usage around 7% to 10%.
' CPU METRICS
cpu = BigIPInfo.get_cpu_usage_information()
For t = 0 To cpu.usages.Length - 1
RS.Open("SELECT * FROM CPU ORDER BY Timestamp DESC", Conn, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockOptimistic)
If RS.EOF Then
WriteValues = False
OldTotalCycles = 0
OldIdleCycles = 0
Else
WriteValues = True
OldTotalCycles = RS("TotalCycles").Value
OldIdleCycles = RS("IdleCycles").Value
End If
RS.AddNew()
RS("CPUNum").Value = cpu.usages(t).cpu_id
' System Cycles
High = cpu.usages(t).system.high
Low = cpu.usages(t).system.low
TotalCycles = Convert_32_to_64(Low, High)
' User Cycles
High = cpu.usages(t).user.high
Low = cpu.usages(t).user.low
TotalCycles += Convert_32_to_64(Low, High)
' Soft IRQ Cycles
High = cpu.usages(t).softirq.high
Low = cpu.usages(t).softirq.low
TotalCycles += Convert_32_to_64(Low, High)
' IRQ Cycles
High = cpu.usages(t).irq.high
Low = cpu.usages(t).irq.low
TotalCycles += Convert_32_to_64(Low, High)
' niced Cycles
High = cpu.usages(t).niced.high
Low = cpu.usages(t).niced.low
TotalCycles += Convert_32_to_64(Low, High)
' IO/WAIT Cycles
High = cpu.usages(t).iowait.high
Low = cpu.usages(t).iowait.low
Value += Convert_32_to_64(Low, High)
' Idle Cycles
High = cpu.usages(t).idle.high
Low = cpu.usages(t).idle.low
IdleCycles = Convert_32_to_64(Low, High)
' Calculate Percentage as Total Cycles (new since last update) divided by Idle Cycles (also since last update)
Percentage = (CType(OldTotalCycles, ULong) - TotalCycles) / (CType(OldIdleCyclesm, ULong) - IdleCycles)
If Not WriteValues Then Percentage = 0
RS("Usage").Value = Percentage
RS("TotalCycles").Value = TotalCycles
RS("IdleCycles").Value = IdleCycles
Dim ThisDate As New Date(cpu.time_stamp.year, cpu.time_stamp.month, cpu.time_stamp.day, cpu.time_stamp.hour, cpu.time_stamp.minute, cpu.time_stamp.second)
RS("Timestamp").Value = ThisDate
RS.Update()
RS.Close()
Next
Here are a few consecutive database records produced by this code:
CPUNumTotalCyclesIdleCyclesUsageTimestamp
070536758382930.026009988/27/2007 11:39:59 AM
070535762382930.026036098/27/2007 11:39:53 AM
0705347653829308/27/2007 11:39:48 AM
070534765382930.025905528/27/2007 11:39:43 AM
0705337733829208/27/2007 11:39:38 AM
070533773382920.025958428/27/2007 11:39:32 AM
0705327793829108/27/2007 11:39:27 AM
070532779382910.026011338/27/2007 11:39:22 AM
0705317833829008/27/2007 11:39:17 AM
Recent Discussions
Related Content
DevCentral Quicklinks
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com
Discover DevCentral Connects