Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 29 Jan 2008 19:52:09 +0100
From:      Pietro Cerutti <gahr@gahr.ch>
To:        freebsd-hackers@freebsd.org
Subject:   struct devstat's bytes[] meaning
Message-ID:  <479F75D9.4070301@gahr.ch>

next in thread | raw e-mail | index | archive | help
This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
--------------enig06CC06C773D5BA35D2A317E5
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Hi list,

I'm trying to get device IO status (i.e. read and written bytes) by
using the devstat interface, and I wrote this small program (mostly
inspired by the gkrellm2 port freebsd.c system-dependent module).

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <sys/resource.h>
#include <devstat.h>

#define MB ((double)(1024.0 * 1024.0))

int main(void)
{
   int curr_dev,
       nof_devs,
       nof_selected,
       nof_selections;
   int max_devs =3D 256;
   long sel_gen;
   struct statinfo si;
   struct devinfo  di;
   struct device_selection *ds =3D NULL;

   si.dinfo =3D malloc(sizeof(struct devinfo));
   bzero(si.dinfo, sizeof(struct devinfo));

   if(devstat_getdevs(NULL, &si) < 0)
      return (-1);

   nof_devs =3D si.dinfo->numdevs;

   if(devstat_selectdevs(&ds, &nof_selected, &nof_selections,
                         &sel_gen, si.dinfo->generation,
                         si.dinfo->devices, nof_devs,
                         NULL, 0, NULL, 0, DS_SELECT_ONLY,
                         max_devs, 1) < 0)
      return (-1);

   printf("NAME\tIN\tOUT\n");
   for(curr_dev =3D 0; curr_dev < nof_devs; curr_dev++)
   {
      struct devstat *d_stat;
      d_stat =3D &si.dinfo->devices[ds[curr_dev].position];
      printf("%s%d\t%.2lf MB\t%.2lf MB\n", d_stat->device_name,
             d_stat->unit_number,
             d_stat->bytes[1] / d_stat->block_size / MB,
             d_stat->bytes[2] / d_stat->block_size / MB);
   }

   free(si.dinfo);

   return (0);
}

I compile it by gcc -ggdb -ldevstat -o iostat iostat.c
and run it:

>./iostat
NAME    IN      OUT
ad0     9.02 MB 9.65 MB

Now, I suppose that those two numbers represent the amount of IO
generated within some time slice, but I can't find any documentation on
it...

Could anyone explain it to me?

Thank you in advance!





--=20
Pietro Cerutti

PGP Public Key:
http://gahr.ch/pgp


--------------enig06CC06C773D5BA35D2A317E5
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (FreeBSD)

iD8DBQFHn3XewMJqmJVx944RCgtQAJ97DezjbjCoQkhEIwo9eQLX/g+GYgCgkvKx
abordeaXhLORN3ZbjVgktKY=
=zfdQ
-----END PGP SIGNATURE-----

--------------enig06CC06C773D5BA35D2A317E5--



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