mirror of
https://github.com/munin-monitoring/contrib.git
synced 2025-07-23 06:35:42 +00:00
Initial version
This commit is contained in:
parent
5dd3e258e6
commit
2129ffc2d5
1 changed files with 144 additions and 0 deletions
144
plugins/other/cpufreq-avg
Executable file
144
plugins/other/cpufreq-avg
Executable file
|
@ -0,0 +1,144 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# Plugin to measure average CPU frequency for each CPU/core.
|
||||
#
|
||||
# Contributed by Mark Edwards
|
||||
#
|
||||
# Usage: Place in /etc/munin/plugins (or link it there using ln -s)
|
||||
#
|
||||
# Parameters understood:
|
||||
#
|
||||
# config (required)
|
||||
# autoconf (optional - used by munin-config)
|
||||
#
|
||||
# $Log$
|
||||
#
|
||||
# Revision 0.2 2010/01/04 16:37:00 medwards
|
||||
# Minor bugfixes in config section
|
||||
#
|
||||
# Revision 0.1 2010/01/04 16:13:00 medwards
|
||||
# First version
|
||||
#
|
||||
#
|
||||
#
|
||||
# Magic markers - optional - used by installation scripts and
|
||||
# munin-config:
|
||||
#
|
||||
#%# family=auto
|
||||
#%# capabilities=autoconf
|
||||
|
||||
if [ "$1" = "autoconf" ]; then
|
||||
if [ -r /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state ]; then
|
||||
echo yes
|
||||
exit 0
|
||||
else
|
||||
echo no
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
cpu_count=`grep -c "^processor" /proc/cpuinfo`
|
||||
|
||||
if [ "$1" = "config" ]; then
|
||||
|
||||
echo 'graph_title Average CPU Frequency'
|
||||
up_lim=`cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq`
|
||||
low_lim=`cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq`
|
||||
up_lim=`expr $up_lim \* 1000` # Convert to Hz
|
||||
low_lim=`expr $low_lim \* 1000` # Convert to Hz
|
||||
echo "graph_args -u $up_lim -l $low_lim -r --base 1000"
|
||||
echo 'graph_vlabel Hz'
|
||||
echo 'graph_category system'
|
||||
cpu=0
|
||||
while [ $cpu -lt $cpu_count ]
|
||||
do
|
||||
echo "cpu_$cpu.label CPU $cpu"
|
||||
echo "cpu_$cpu.type GAUGE"
|
||||
echo "cpu_$cpu.info Hz"
|
||||
cpu=`expr $cpu + 1`
|
||||
done
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Run measurements
|
||||
cpu=0
|
||||
while [ $cpu -lt $cpu_count ]
|
||||
do
|
||||
|
||||
time_in_state=`cat /sys/devices/system/cpu/cpu$cpu/cpufreq/stats/time_in_state`
|
||||
|
||||
# Check/create statefile(s)
|
||||
statefile="/var/lib/munin/plugin-state/cpufreq-avg_cpu$cpu.state"
|
||||
if [ ! -r "$statefile" ]
|
||||
then
|
||||
echo "$time_in_state" > $statefile
|
||||
if [ "$?" -ne "0" ]
|
||||
then
|
||||
exit ${1}
|
||||
else
|
||||
cpu=`expr $cpu + 1`
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
state=`cat $statefile`
|
||||
|
||||
# Calculated total time since last state
|
||||
total_time=0
|
||||
total_time=$(
|
||||
echo "$time_in_state" | {
|
||||
i=0
|
||||
while read line
|
||||
do
|
||||
this_freq=`echo $line | awk '{ print $1; }'`
|
||||
this_time=`echo $line | awk '{ print $2; }'`
|
||||
this_time_state=`echo "$state" | grep $this_freq | awk '{ print $2; }'`
|
||||
if [ $this_time -ge $this_time_state ] # Only measure if state is valid
|
||||
then
|
||||
time_diff=`expr $this_time - $this_time_state` # Calculate time since last state
|
||||
total_time=`expr $total_time + $time_diff`
|
||||
fi
|
||||
i=`expr $i + 1`
|
||||
done
|
||||
echo $total_time
|
||||
}
|
||||
)
|
||||
|
||||
# Measure average CPU frequency if total time calculation was successful
|
||||
|
||||
frequency=0
|
||||
frequency=$(
|
||||
echo "$time_in_state" | {
|
||||
i=0
|
||||
while read line
|
||||
do
|
||||
this_freq=`echo $line | awk '{ print $1; }'`
|
||||
this_time=`echo $line | awk '{ print $2; }'`
|
||||
this_time_state=`echo "$state" | grep $this_freq | awk '{ print $2; }'`
|
||||
this_freq=`expr $this_freq \* 1000` # Convert to Hz
|
||||
this_time=`expr $this_time - $this_time_state` # Calculate time since last state
|
||||
if [ $total_time -gt 0 ]
|
||||
then
|
||||
calc=`echo "($this_time / $total_time) * $this_freq" | bc -l`
|
||||
frequency=`echo "$frequency + $calc" | bc -l`
|
||||
fi
|
||||
i=`expr $i + 1`
|
||||
done
|
||||
echo $frequency
|
||||
}
|
||||
)
|
||||
|
||||
# Round result to an integer and return it
|
||||
frequency=`echo "scale=0 ; ($frequency+0.5)/1" | bc -l`
|
||||
if [ $frequency -gt 0 ]
|
||||
then
|
||||
echo "cpu_$cpu.value $frequency"
|
||||
fi
|
||||
|
||||
# Update statefile
|
||||
echo "$time_in_state" > $statefile
|
||||
|
||||
cpu=`expr $cpu + 1`
|
||||
|
||||
done
|
||||
|
||||
exit 0
|
Loading…
Add table
Add a link
Reference in a new issue