struct one_stat *punch_reqs;
struct one_stat *
-init_one_stat (char *basename, char *name)
+init_one_stat (char *basename, char *name)
{
char fname[1024];
struct one_stat *stat = (struct one_stat *)malloc (sizeof (*stat));
-
+
if (stat == NULL) {
- fprintf (stderr, "Can't allocate stat %s: %s\n",
+ fprintf (stderr, "Can't allocate stat %s: %s\n",
name, strerror (errno));
abort ();
}
stat->fd = open (fname, O_RDONLY);
if (stat->fd < 0 ) {
- fprintf (stderr, "Can't open stat %s: %s\n",
+ fprintf (stderr, "Can't open stat %s: %s\n",
fname, strerror (errno));
abort ();
}
}
void
-update_one_stat (struct one_stat *stat)
+update_one_stat (struct one_stat *stat)
{
static char buffer[1024];
long long prev = stat->current;
stat->name, strerror (errno));
abort ();
}
-
+
buffer[nob] = 0;
if (sscanf (buffer, "%Ld", &stat->current) != 1) {
fprintf (stderr, "Can't parse stat %s: %s\n",
timenow ()
{
struct timeval tv;
-
+
gettimeofday (&tv, NULL);
return (tv.tv_sec + tv.tv_usec / 1000000.0);
}
static double last = 0.0;
double now;
double t;
-
+
now = timenow();
update_one_stat (read_bytes);
update_one_stat (destroy_reqs);
update_one_stat (statfs_reqs);
update_one_stat (punch_reqs);
-
+
if (last == 0.0) {
printf ("R %Ld/%Ld W %Ld/%Ld attr %Ld/%Ld open %Ld/%Ld create %Ld/%Ld stat %Ld punch %Ld\n",
read_bytes->current, read_reqs->current,
read_bytes->delta / ((1<<20) * t),
write_reqs->delta, (int)(write_reqs->delta / t),
write_bytes->delta / ((1<<20) * t));
-
+
if (getattr_reqs->delta != 0)
printf (" ga:%Ld,%d/s", getattr_reqs->delta,
(int)(getattr_reqs->delta / t));
-
+
if (setattr_reqs->delta != 0)
printf (" sa:%Ld", setattr_reqs->delta);
if (open_reqs->delta != 0)
printf (" op:%Ld", open_reqs->delta);
-
+
if (close_reqs->delta != 0)
printf (" cl:%Ld", close_reqs->delta);
if (create_reqs->delta != 0)
printf (" cx:%Ld", create_reqs->delta);
-
+
if (destroy_reqs->delta != 0)
printf (" dx:%Ld", destroy_reqs->delta);
if (statfs_reqs->delta != 0)
printf (" st:%Ld", statfs_reqs->delta);
-
+
if (punch_reqs->delta != 0)
printf (" pu:%Ld", punch_reqs->delta);
-
+
printf ("\n");
}
fprintf (stderr, "obd type not specified\n");
return (1);
}
-
+
snprintf (basedir, sizeof (basedir), "/proc/sys/%s", argv[1]);
-
+
if (argc > 2)
interval = atoi (argv[2]);
if (interval == 0)
return (0);
-
+
for (;;) {
sleep (interval);
do_stat ();