From bffcaf6e7083d9a6f69bc7384e39446ee4d3924e Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Thu, 24 Feb 2005 12:31:12 +0000 Subject: [PATCH] tests/mass_elements.gnuplot: gnuplot file for the mass_elements benchmark. Run as gnuplot mass_elements.gnuplot > foo... Original commit message from CVS: 2005-02-24 Andy Wingo * tests/mass_elements.gnuplot: gnuplot file for the mass_elements benchmark. Run as gnuplot mass_elements.gnuplot > foo.ps, after running bench-mass_elements.scm. * tests/bench-mass_elements.scm: New script, runs mass_elements for various numbers of identities, outputting the results to a file. Requires guile 1.6. Just for testing. --- ChangeLog | 10 ++++ tests/.gitignore | 2 + tests/bench-mass_elements.scm | 68 ++++++++++++++++++++++++++ tests/benchmarks/mass-elements.gnuplot | 8 +++ tests/benchmarks/mass-elements.scm | 68 ++++++++++++++++++++++++++ 5 files changed, 156 insertions(+) create mode 100755 tests/bench-mass_elements.scm create mode 100644 tests/benchmarks/mass-elements.gnuplot create mode 100755 tests/benchmarks/mass-elements.scm diff --git a/ChangeLog b/ChangeLog index d0f33efe58..23aa75176a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2005-02-24 Andy Wingo + + * tests/mass_elements.gnuplot: gnuplot file for the mass_elements + benchmark. Run as gnuplot mass_elements.gnuplot > foo.ps, after + running bench-mass_elements.scm. + + * tests/bench-mass_elements.scm: New script, runs mass_elements + for various numbers of identities, outputting the results to a + file. Requires guile 1.6. Just for testing. + 2005-02-23 Thomas Vander Stichele * gst/schedulers/fairscheduler.c: diff --git a/tests/.gitignore b/tests/.gitignore index 97d1b87cba..fe4f7fd8a8 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -42,3 +42,5 @@ spidey_bench *.bb *.bbg *.da +*.data +*.ps diff --git a/tests/bench-mass_elements.scm b/tests/bench-mass_elements.scm new file mode 100755 index 0000000000..b9ae1285f4 --- /dev/null +++ b/tests/bench-mass_elements.scm @@ -0,0 +1,68 @@ +#!/bin/bash +# -*- scheme -*- +exec guile -s $0 "$@" +!# + +;; Quick hack to make some data files that gnuplot can read from +;; mass-elements. Guile 1.6. + +(use-modules (srfi srfi-13) + (srfi srfi-1) + (ice-9 optargs) + (ice-9 popen)) + +(define *phases* '(create set run destroy)) + +(define (read-lines port) + (let lp ((lines '())) + (let ((x (read-line port))) + (if (eof-object? x) + (begin + (close-port port) + (reverse! lines)) + (lp (cons x lines)))))) + +(define (run-test n-identities) + (format #t "; running test: ~a\n" n-identities) + (let lp ((in (read-lines + (open-input-pipe + (format #f "./mass_elements ~A" + (number->string n-identities))))) + (out '())) + (if (null? in) + (begin + (or (eq? (length out) 4) (error "Invalid mass_elements output")) + (map cons *phases* (reverse! out))) + (let ((line (car in))) + (if (eqv? (string-ref line 0) #\*) + (lp (cdr in) out) + (lp (cdr in) + (cons (fold (lambda (x ret) (+ (* ret 60) x)) 0 + (map (lambda (x) (with-input-from-string x read)) + (string-split line #\:))) + out))))))) + +(define (run-tests start stop step) + (let lp ((n start) (out '())) + (if (> n stop) + (reverse! out) + (lp (+ n step) + (acons n (run-test n) out))))) + +(define (output-results results) + (let ((p (open-output-file "mass_elements.data"))) + (display "#num_identities creation state-change run destroy\n" p) + (let lp ((in results)) + (if (not (null? in)) + (let* ((line (car in)) + (n (car line))) + (display n p) + (for-each + (lambda (t) (format p " ~a" t)) + (map cdr (cdr line))) + (newline p) + (lp (cdr in))))) + (close-port p))) + +(output-results + (apply run-tests (map string->number (cdr (program-arguments))))) diff --git a/tests/benchmarks/mass-elements.gnuplot b/tests/benchmarks/mass-elements.gnuplot new file mode 100644 index 0000000000..d5c8930173 --- /dev/null +++ b/tests/benchmarks/mass-elements.gnuplot @@ -0,0 +1,8 @@ +set terminal postscript landscape monochrome dashed "Helvetica" 14 +set xlabel "Number of Identity Elements" +set ylabel "Seconds" +set title "Mass Pipeline Performance: fakesrc ! N * identity ! fakesink" +plot "mass_elements.data" using 1:2 title "Element creation", \ + "mass_elements.data" using 1:3 title "State change", \ + "mass_elements.data" using 1:4 title "Processing 1000 buffers", \ + "mass_elements.data" using 1:5 title "Element destruction" diff --git a/tests/benchmarks/mass-elements.scm b/tests/benchmarks/mass-elements.scm new file mode 100755 index 0000000000..b9ae1285f4 --- /dev/null +++ b/tests/benchmarks/mass-elements.scm @@ -0,0 +1,68 @@ +#!/bin/bash +# -*- scheme -*- +exec guile -s $0 "$@" +!# + +;; Quick hack to make some data files that gnuplot can read from +;; mass-elements. Guile 1.6. + +(use-modules (srfi srfi-13) + (srfi srfi-1) + (ice-9 optargs) + (ice-9 popen)) + +(define *phases* '(create set run destroy)) + +(define (read-lines port) + (let lp ((lines '())) + (let ((x (read-line port))) + (if (eof-object? x) + (begin + (close-port port) + (reverse! lines)) + (lp (cons x lines)))))) + +(define (run-test n-identities) + (format #t "; running test: ~a\n" n-identities) + (let lp ((in (read-lines + (open-input-pipe + (format #f "./mass_elements ~A" + (number->string n-identities))))) + (out '())) + (if (null? in) + (begin + (or (eq? (length out) 4) (error "Invalid mass_elements output")) + (map cons *phases* (reverse! out))) + (let ((line (car in))) + (if (eqv? (string-ref line 0) #\*) + (lp (cdr in) out) + (lp (cdr in) + (cons (fold (lambda (x ret) (+ (* ret 60) x)) 0 + (map (lambda (x) (with-input-from-string x read)) + (string-split line #\:))) + out))))))) + +(define (run-tests start stop step) + (let lp ((n start) (out '())) + (if (> n stop) + (reverse! out) + (lp (+ n step) + (acons n (run-test n) out))))) + +(define (output-results results) + (let ((p (open-output-file "mass_elements.data"))) + (display "#num_identities creation state-change run destroy\n" p) + (let lp ((in results)) + (if (not (null? in)) + (let* ((line (car in)) + (n (car line))) + (display n p) + (for-each + (lambda (t) (format p " ~a" t)) + (map cdr (cdr line))) + (newline p) + (lp (cdr in))))) + (close-port p))) + +(output-results + (apply run-tests (map string->number (cdr (program-arguments)))))