CC = gcc
CFLAGS = -Wall -O2 -g -D_GNU_SOURCE
-PROGS = blkparse blktrace
+PROGS = blkparse blktrace verify_blkparse
LIBS = -lpthread
-SCRIPTS = btrace verify_blkparse
+SCRIPTS = btrace
all: $(PROGS) $(SCRIPTS)
blktrace: blktrace.o $(LIBS)
$(CC) $(CFLAGS) -o $@ $(filter %.o,$^) $(LIBS)
+verify_blkparse: verify_blkparse.o
+ $(CC) $(CFLAGS) -o $@ $(filter %.o,$^)
+
clean:
-rm -f *.o $(PROGS)
+++ /dev/null
-#!/usr/bin/php -q
-
-<?php
-
-// Parse time correctness of blkparse output
-// Thomas Kenne <thomas@2ndfloor.dk>
-
-if (!isset($argv[1])) {
- die("need file as argument\n");
-}
-
-$file = $argv[1];
-
-if (!is_file($file)) {
- die("invalid file\n");
-}
-
-if (!is_readable($file)) {
- die("file not readable\n");
-}
-
-$lastnum = false;
-$fp = fopen($file, 'r');
-while ($line = fgets($fp, 200)) {
- $line = trim($line);
- if ($line == '') {
- break;
- }
-
- $data = preg_split("/[\s]+/", $line);
-
- $num = $data[3];
- settype($num, 'float');
-
- if ($lastnum && $num < $lastnum) {
- echo "$line\n";
- flush();
- } else {
- $lastnum = $num;
- }
-}
-
-fclose($fp);
-
-?>
--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+int main(int argc, char *argv[])
+{
+ double this_time, last_time;
+ char line[256], *p;
+ int major, minor, cpu, seq;
+ FILE *f;
+
+ if (argc < 2) {
+ fprintf(stderr, "%s: file\n", argv[0]);
+ return 1;
+ }
+
+ f = fopen(argv[1], "r");
+ if (!f) {
+ perror("fopen");
+ return 1;
+ }
+
+ last_time = 0;
+ while ((p = fgets(line, sizeof(line), f)) != NULL) {
+ if (!sscanf(p, "%3d,%3d %2d %8d %lf", &major, &minor, &cpu, &seq, &this_time))
+ break;
+
+ if (this_time < last_time)
+ printf("%s", p);
+ else
+ last_time = this_time;
+ }
+
+ fclose(f);
+ return 0;
+}