Date: Tue, 23 Sep 2014 00:29:22 +0300 From: Andriy Gapon <avg@FreeBSD.org> To: David Wolfskill <david@catwhisker.org>, freebsd-performance@FreeBSD.org Subject: Re: I like iostat, but... Message-ID: <542094B2.5040302@FreeBSD.org> In-Reply-To: <20140922212209.GA9619@albert.catwhisker.org> References: <20140922212209.GA9619@albert.catwhisker.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 23/09/2014 00:22, David Wolfskill wrote: > ... I rather wish I could get the same information via sysctl. (Well, > something seems to be available via the "opaque" kern.devstat.all > sysctl(8) variable, but sysctl(8) doesn't display all of it, and parsing > it seems as if that would require knowledge about the internals of the > system where the data were acquired.) Perhaps sysutils/devstat could be of help? > If iostat(8) could be taught to (optionally) provide a timestamp, that > might suffice. > > The problem I'm trying to solve is this: I need to be able to acquire > various resource counters (along with timestamps), so I can post-process > the acquired data (generally, on a system other than the one where the > data were gathered) in order to be able to see how the > resource-consumption changes over the duration of a moderately > long-running task (typically. 0.5 - 8 hrs.). > > I have (with some success) cobbled up a shell script to do much of > this. (And yes, I've measured the behavior of some typical workloads > in this environment vs. merely running the workload under "/usr/bin/time > -lpo", with 5 test iterations for each, there was no statistically > significant difference with a 95% confidence interval.) > > The script: > > * Parses its arguments, and from that information constructs a command > line (which invokes sysctl(8), and (optionally) netstat(1), and > pipes that output through awk(1)). > > * Determines the current time-of-day ("date +%s") > > * Enters a loop, which: > + "eval"s the constructed command line (causing a timestamped line of > information to be spat out standard output); the timestamp is from > the most-recently-acquired time-of-day. > + Determines the current time-of-day ("date +%s"). > + Based on the desired sampling interval, calculates the number of > seconds to sleep. (If I could get strftime to format fractional > seconds, that could be handy.) > + Sleeps for the calculated interval. > + Determines the current time-of-day ("date +%s"). > > And for most things I care about, it works fairly well. > > Further, I do this as a shell script precisely so I don't need to build > a new version of the tool for a new target system: the script purposely > only requires tools that are in base FreeBSD, and requires no special > privilege to use. > > For some sample graphs I have generated from this kind of data, please > see <http://www.catwhisker.org/~david/FreeBSD/bmake/>. > > I believe that having an ability to correlate the "iostat -x" > information with the CPU, load average, and memory utilization would be > useful -- but I don't see a reasonable way to go about it. If anyone > has suggestions, I'm listening. :-} -- Andriy Gapon
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?542094B2.5040302>