[PATCH] verify_blkparse: implement in C instead
authorJens Axboe <axboe@suse.de>
Wed, 28 Sep 2005 15:45:51 +0000 (17:45 +0200)
committerJens Axboe <axboe@suse.de>
Wed, 28 Sep 2005 15:45:51 +0000 (17:45 +0200)
The C version checks a 92MB file in 2 seconds where the php
version takes 23 seconds.

Makefile
verify_blkparse [deleted file]
verify_blkparse.c [new file with mode: 0644]

index 4684b1d09505aefaf96458b2fc6890fe27160f22..96edc555d5057ee9a594394f828cc11561e5b78f 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,8 +1,8 @@
 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)
 
@@ -12,6 +12,9 @@ blkparse: blkparse.o blkparse_fmt.o rbtree.o
 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)
 
diff --git a/verify_blkparse b/verify_blkparse
deleted file mode 100755 (executable)
index 860490f..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/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);
-
-?>
diff --git a/verify_blkparse.c b/verify_blkparse.c
new file mode 100644 (file)
index 0000000..2f02ce2
--- /dev/null
@@ -0,0 +1,37 @@
+#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;
+}