|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH XTF perf 3/4] time: provide measurement template
The added function measure_performance allows to measure the run time
of a function, by computing the average time it takes to call that
function a given number of retries. The measured total time is returned
in nano seconds. Furthermore, the value is printed via printk in a
fixed format, to allow processing the output further.
This format is, where average-time provides ns with ps granularity:
perf test_name <average-time> ns
Signed-off-by: Norbert Manthey <nmanthey@xxxxxxxxx>
---
common/time.c | 36 ++++++++++++++++++++++++++++++++++++
include/xtf/time.h | 8 +++++++-
2 files changed, 43 insertions(+), 1 deletion(-)
diff --git a/common/time.c b/common/time.c
--- a/common/time.c
+++ b/common/time.c
@@ -192,6 +192,42 @@ void msleep(uint64_t t)
mspin_sleep(t);
}
+long measure_performance(const char* test_name, const char* function_name,
+ unsigned long retries, to_be_measured call)
+{
+ struct timeval start, end;
+ int rc = 0;
+
+ printk("Start calling %s %lu times\n", function_name, retries);
+
+ /* Perform all calls, measure start and end time */
+ gettimeofday(&start);
+ for(unsigned long counter = 0; counter < retries; ++ counter)
+ {
+ rc = call();
+ }
+ gettimeofday(&end);
+
+ /* Calculate the total number in nano seconds */
+ long total_ns = (end.sec - start.sec)*1000000000 + (end.nsec - start.nsec);
+ long avg_ns = total_ns / retries;
+ long avg_ps = (total_ns / (retries/1000)) % 1000;
+
+ /* Show the result of the last query */
+ printk("%s last result: %d\n", function_name, rc);
+
+ /* Print average time and total time */
+ printk("Avg %s call time: avg: %ld.%s%ld ns total: %ld ns\n",
+ function_name, avg_ns,
+ avg_ps < 10 ? "0" : (avg_ps < 100 ? "0" : ""), avg_ps, total_ns);
+
+ /* Print performance value */
+ printk("perf %s %ld.%s%ld ns\n", test_name, avg_ns,
+ avg_ps < 10 ? "0" : (avg_ps < 100 ? "0" : ""), avg_ps);
+
+ return total_ns;
+}
+
/*
* Local variables:
* mode: C
diff --git a/include/xtf/time.h b/include/xtf/time.h
--- a/include/xtf/time.h
+++ b/include/xtf/time.h
@@ -49,10 +49,16 @@ void msleep(uint64_t f);
int gettimeofday(struct timeval *tp);
-
/* This returns the current epoch time */
#define NOW() current_time()
+/* Signature of a function to be called for measurement */
+typedef int (*to_be_measured)(void);
+
+/* Measure the time it takes to call the passed function RETRIES times */
+long measure_performance(const char* test_name, const char* function_name,
+ unsigned long retries, to_be_measured call);
+
#endif /* XTF_TIME_H */
/*
--
2.7.4
Amazon Development Center Germany GmbH
Krausenstr. 38
10117 Berlin
Geschaeftsfuehrer: Christian Schlaeger, Ralf Herbrich
Ust-ID: DE 289 237 879
Eingetragen am Amtsgericht Charlottenburg HRB 149173 B
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |