Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 24 Sep 2014 08:09:15 -0700
From:      David Wolfskill <david@catwhisker.org>
To:        freebsd-performance@FreeBSD.org
Subject:   Re: I like iostat, but...
Message-ID:  <20140924150915.GC1221@albert.catwhisker.org>
In-Reply-To: <5421355D.1020305@freebsd.org> <BD02068D-89C5-42AE-9C06-8F3539492A03@sarenet.es> <20140923121945.8975311d308a1ff088dd90b0@systemdatarecorder.org> <659899B2-1816-41FA-9DED-57416928A1EE@sarenet.es> <20140923113844.6f9e9584965dfd401f6943af@systemdatarecorder.org> <35F9FD7B-6847-4209-A2F9-B1F0ABD01E4C@sarenet.es> <542094B2.5040302@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--b0bHyb0BmsSIM7d2
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Tue, Sep 23, 2014 at 12:29:22AM +0300, Andriy Gapon wrote:
> 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.)
>=20
> Perhaps sysutils/devstat could be of help?
> ...

On Tue, Sep 23, 2014 at 08:56:54AM +0200, Borja Marcos wrote:
> ...=20
> Reading sysctl from a small C program is not hard at all. I did it for de=
vilator (a data recollector for Orca). And
> there's a lot of data available. An advantage is, you avoid launching sev=
eral processes.
> ...

On Tue, Sep 23, 2014 at 10:45:14AM +0200, Borja Marcos wrote:
> ...=20
> Anyway, for disk stats GEOM offers a nice API. You can get delays per GEO=
M provider, bandwidths, etc.

On Tue, Sep 23, 2014 at 11:38:44AM +0300, Stefan Parvu wrote:
> ...=20
> I gave up parsing sysctl via Perl for disks and network devices. It would=
 be
> nice to have devstat properly working via sysctl for disk devices. Simila=
r way
> kern.cp_times does. Currently there is no simple way to extract per disk =
stats from
> sysctl as a Perl or Sh consumer, unless we build a C module to do that.=
=20


Folks, I appreciate the suggestions, but they address problems other
than the one I am trying to solve.

In particular:
* I require that the tool must only depend on components of base FreeBSD;
  thus, I don't need to perturb the system I want to measure by
  installing otherwise unneeded software on it.

* I am using a shell script (which uses date, sysctl, netstat, and awk)
  so I don't need to recompile my data acquisition tool.

* The tasks I am trying to measure are software builds similar to
  a stable/10 "make universe" -- but about 2 - 3 times the duration
  (and reading and writing a significantly larger amount of data).

  Thus, the number of additional processes caused by my probe firing
  even as often as once/second is lost in the noise.



> ...
> > If iostat(8) could be taught to (optionally) provide a timestamp, that
> > might suffice.
>=20
> In fact all performance userland tools should be able to nicely produce t=
imestamp
> CSV records which can be used for capacity planning and feed them to an
> analytic product. Something like:
>=20
> 1411445589:4.01:16.03:383.97:1.93:0.29:1.68:0.11:95.99:0.00:0.00:0.00:0.0=
0:123.00:229516.00:570992.00
>=20
> or something like iostat:
>=20
> 1411445733:ada0:0.00:0.00:0.00:0.00:0.00:0.00:0.00
>=20
> where the first field would be always the timestmp, unix time. It is not =
that complicated
> but it does not exist.


The output of my shell script may be described as:

#   <record>    ::=3D <fieldlist> newline
#   <fieldlist> ::=3D <field> | <field> tab <fieldlist>
#   <field>     ::=3D <tag> : <value>
#   <tag>       ::=3D [_0-9a-zA-Z][-_.0-9a-zA-Z]+
#   <value>     ::=3D [^\t\n]*

# Each record will have a field with a tag called "time"; the
# associated value will be the number of seconds since the Epoch,
# but will be coerced as necessary to ensure that it is monotonically
# increasing.

# Note that the colon (":") is a valid character in the value part
# of a field (but not in the tag).  Further, there is no whitespace
# on either side of that delimiting colon: everything to the left of the
# colon (up to, but not including, the previous tab, if any) is part of the
# tag; everything to the right of the colon (up to, but not including,
# the next tab or newline) is part of the value.

A prior version of the script output CSV; for this version, I chose to
use the above format because I had situations where some fields showed
up on some lines, but not on others.  That tends to make the use of CSV
a bit problematic.  (On a machine where I post-process the collected
data, I have some Perl that reads the above format, creates new field
names as necessary to cope with multivariate data (e.g., kern.cp_time or
vm.loadavg), and generates CSV from the result.)

> ...
> My idea of having standard data recorders: sysrec, cpurec, nicrec diskrec=
=20
> which can extract: overall system consumption, per device statistics.
> http://www.systemdatarecorder.org/recording/agents.html=20
> ...

That looks interesting and useful for a broad class of similar problems.

However, as far as I can tell, it is not suitable for the problem(s) I
am trying to solve in this case.

Basically, I have something that works "well enough" for things
like CPU counters, memory usage (at the rather coarse granularity
that top(1) provides, vs. "vmstat -m" output), load avergaes, and
NIC counters, and is readily extensible to any univariate (or simple
list of multivariate) (non-opaque) sysctl OIDs.  I'd like to be
able to include information from the I/O subsystem -- in particular,
data that is accessible from "iostat -x".

Peace,
david
--=20
David H. Wolfskill				david@catwhisker.org
Taliban: Evil cowards with guns afraid of truth from a 14-year old girl.

See http://www.catwhisker.org/~david/publickey.gpg for my public key.

--b0bHyb0BmsSIM7d2
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQJ8BAEBCgBmBQJUIt6ZXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w
ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXQ4RThEMDY4QTIxMjc1MDZFRDIzODYzRTc4
QTY3RjlDOERFRjQxOTNCAAoJEIpn+cje9Bk7cuUP/0abmI3lcrpBNvTfnEyHkake
Kxy475LBqjtGYBTq4jiagQC3wrFCCGLarrW2EW5cmNKOOjmyUl2Fa7KCpccFN2LP
JeJDA7rTSH5XNKgt5Xe8902AgQz5FBgkXZeN11eQgLzNs9rn3rjyvJibcdWvO5rj
+4eaKct4YZ3HF5BSSXkfMQM8GB6quroZPAQ4/2ZywwFraIUVd8k3akHMsvTOeJ31
XVTB+jGo4Jk0Y/wDjIJ0oTo5q+VyXMJMbqt54J7B81n+CVXzjO1WI2Y+hSDMa/qU
Oy4bt7FQnSDND00yqJEa+I/IEuyWljLnvGvbi7/7TUjqPXW7jMNE9BtGZjzf2gY7
5QcZ87pbuLvU8Acsz0n4+VlPTczt7khQ7ibCn6V2aqj930Ow49QVo4MUinksJUQd
hiPd2FfqVV+7gL/TVVk5uGdYOQNIaPXfuItZIPoIOz42iECcVk+lkeY1pLHmMiYf
s8O9kPcHm2F9PzqcfOUEm0+EAp+whh7rzQPAH7D9+4MkSvJ0tmNuVrIjPU+dt3ic
aZvGgFU1RZkeBiLGStaKVJjSlV5BWEq/ole8nSMLjaYbMdEZ+15a3trDTX9NSq4x
GDXN0rVbS/WrtQwOFGXmBaBg57ma4LK/GBcXM8QBbCGXwPueVIk7gw0RwoIOrRTx
+JtK3oM4x7gkaVGfNHQC
=snLV
-----END PGP SIGNATURE-----

--b0bHyb0BmsSIM7d2--



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