#! /usr/bin/perl # anders@fupp.met, 2008-02-16 # graph number of syscalls and context switches in FreeBSD, parsing output from # vmstat command # $ENV{'PATH'} = "/sbin:/bin:/usr/sbin:/usr/bin"; sub printvalues { # Get the values from the vmstat command foreach $vml (`sysctl vm.stats`) { if ($vml =~ /([\w\.]+): (\d+)/) { $values{"$1"} = $2; } } print "soft.value " . $values{"vm.stats.sys.v_soft"} . "\n"; print "intr.value " . $values{"vm.stats.sys.v_intr"} . "\n"; print "swtch.value " . $values{"vm.stats.sys.v_swtch"} . "\n"; print "trap.value " . $values{"vm.stats.sys.v_trap"} . "\n"; print "syscall.value " . $values{"vm.stats.sys.v_soft"} . "\n"; print "vmfaults.value " . $values{"vm.stats.vm.v_vm_faults"} . "\n"; } sub printconfig { print "graph_title VM faults\n"; print "graph_vlabel n\n"; print "graph_category system\n"; print "graph_info This graph shows the number of VM faults, as an average per second over the last 5 seconds. Explaination of the labels: soft=software interrupts, intr=hardware interrupts, syscall=syscalls, swtch=context switches, trap=traps, faults=VM faults.\n"; print "swtch.label swtch\n"; print "swtch.type DERIVE\n"; print "swtch.graph yes\n"; print "swtch.min 0\n"; print "swtch.draw AREA\n"; print "soft.label soft\n"; print "soft.type DERIVE\n"; print "soft.graph yes\n"; print "soft.min 0\n"; print "soft.draw STACK\n"; print "intr.label intr\n"; print "intr.type DERIVE\n"; print "intr.graph yes\n"; print "intr.min 0\n"; print "intr.draw STACK\n"; print "trap.label trap\n"; print "trap.type DERIVE\n"; print "trap.graph yes\n"; print "trap.min 0\n"; print "trap.draw STACK\n"; print "syscall.label syscall\n"; print "syscall.type DERIVE\n"; print "syscall.graph yes\n"; print "syscall.min 0\n"; print "syscall.draw STACK\n"; print "vmfaults.label vmfaults\n"; print "vmfaults.type DERIVE\n"; print "vmfaults.graph yes\n"; print "vmfaults.min 0\n"; print "vmfaults.draw STACK\n"; } if ($ARGV[0] eq "autoconf") { print "yes\n"; } elsif ($ARGV[0] eq "config") { printconfig; } else { printvalues; }