Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 08 Aug 2014 10:29:18 -0600
From:      Ian Lepore <ian@FreeBSD.org>
To:        Stefan Parvu <sparvu@systemdatarecorder.org>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: disk and NIC io statistics via sysctl
Message-ID:  <1407515358.56408.374.camel@revolution.hippie.lan>
In-Reply-To: <20140808184021.537feca9b15e3a261ea27fa7@systemdatarecorder.org>
References:  <20140808184021.537feca9b15e3a261ea27fa7@systemdatarecorder.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, 2014-08-08 at 18:40 +0300, Stefan Parvu wrote:
> Hi, 
> 
> Fetching CPU and Memory statistics, using sysctl interface and perl seems nice and easy.
> I made great progress with sysrec a generic recorder reporting: cpu mem disk and nic 
> stats on FreeBSD. Now Im getting into disk and nic sections:
> 
> 1. Disk 
> Im able to get a list of all disks on a system using kern.disks sysctl variable.
> I want to be able to report per disk something like:
> 
>  	readreq 	rate 	read requests per second, rate
>  	writereq 	rate 	write requests per second, rate
>  	totreq 	rate 	total read + write requests per second, rate
>  	readbyt 	rate 	read bytes per second, in KB, rate
>  	writebyt 	rate 	write bytes per second, in KB, rate
>  	totbyt 	rate 	total read + write bytes per second, in KB, rate 
> 
> iostat seems the simplest way to fetch these, but how about sysctl interface ?
> I could not figure out any sysctl parameters for disk throughput. How one will 
> fetch throughput per disk via sysctl ? 
> 
> 
> 2. NIC
> Same will go for network card interfaces. I want to fetch per NIC throughput and
> errors via sysctl, something like these:
> 
> 1 	timestamp 	time 	seconds since Epoch
> 2 	interface 	number 	NIC name, string
> 3 	rxKB 	rate 	the number of KBytes received per sec
> 4 	rxpcks 	rate 	the no. of packets received per sec
> 5 	rxerrs 	rate 	the number of errors while received packets per sec
> 6 	rxdrop 	rate 	the number of packets that were dropped per sec
> 7 	rxfifo 	rate 	the number of FIFO overruns on received packets per sec
> 8 	rxframe 	rate 	the number of carrier errors on received packet per sec
> 9 	rxcompr 	rate 	the number of compressed packets received per sec
> 10 	rxmulti 	rate 	the number of multicast packets received per sec
> 11 	txKB 	rate 	the number of KBytes transmitted per sec
> 12 	txpcks 	rate 	the number of packets transmitted per sec
> 13 	txerrs 	rate 	the number of errors transmitting packets per sec
> 14 	txdrop 	rate 	the number of packets that were dropped per sec
> 15 	txfifo 	rate 	the number of FIFO overruns on transmitted packets per sec
> 16 	txcolls 	rate 	the number of collisions that were detecte per sec
> 17 	txcarr 	rate 	the number of carrier errors on transmitted packets per sec
> 18 	txcompr 	rate 	the number of compressed packets transmitted per sec
> 19 	ttpcks 	rate 	the total number of packets (received + transmitted) per sec
> 20 	ttKB 	rate 	the total number of KBytes (received + transmitted) per sec 
> 
> 
> Any ideas ?
> 
> Many thanks,
> 

All of this series of questions you've been asking really have the same
answer:  look at the source code for the very apps you cite as examples
of outputting the info you want, and do what they do.  There are no
magic secret kernel backdoor interfaces, all these userland tools are
using documented interfaces such as sysctl to get their info.  (There
may be a few miscreants that open /dev/kmem and rudely poke around in
kernel memory, but I'm not sure we have any of them in base.  The lsof
tool in ports is one that comes to mind for that.)

In addition to the tools you've already mentioned that have the info you
want, have a look at gstat for IO stats, netstat for net throughput, and
systat for lots of stuff.

-- Ian





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1407515358.56408.374.camel>