From 42a58cd1b3940ca1c70619f8af8009273c545b3c Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Wed, 28 Sep 2005 17:45:51 +0200 Subject: [PATCH] [PATCH] verify_blkparse: implement in C instead The C version checks a 92MB file in 2 seconds where the php version takes 23 seconds. --- Makefile | 7 +++++-- verify_blkparse | 45 --------------------------------------------- verify_blkparse.c | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 47 deletions(-) delete mode 100755 verify_blkparse create mode 100644 verify_blkparse.c diff --git a/Makefile b/Makefile index 4684b1d..96edc55 100644 --- 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 index 860490f..0000000 --- a/verify_blkparse +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/php -q - - - -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 index 0000000..2f02ce2 --- /dev/null +++ b/verify_blkparse.c @@ -0,0 +1,37 @@ +#include +#include +#include +#include + +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; +} -- 2.25.1