diff options
author | Wladimir J. van der Laan <laanwj@gmail.com> | 2016-11-22 10:22:08 +0100 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@gmail.com> | 2016-11-22 12:20:57 +0100 |
commit | 35328187463a7078b4206e394c21d5515929c7de (patch) | |
tree | e310e5beca1e7ad006cb48423c64f72d6a4d00fd /src/bench/perf.h | |
parent | 55b2eddcc8fd407aa62fd280f4767e3034a7eb04 (diff) |
bench: Add support for measuring CPU cycles
This adds cycle min/max/avg to the statistics.
Supported on x86 and x86_64 (natively through rdtsc), as well as Linux
(perf syscall).
Diffstat (limited to 'src/bench/perf.h')
-rw-r--r-- | src/bench/perf.h | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/bench/perf.h b/src/bench/perf.h new file mode 100644 index 0000000000..681bd0c8a2 --- /dev/null +++ b/src/bench/perf.h @@ -0,0 +1,37 @@ +// Copyright (c) 2016 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +/** Functions for measurement of CPU cycles */ +#ifndef H_PERF +#define H_PERF + +#include <stdint.h> + +#if defined(__i386__) + +static inline uint64_t perf_cpucycles(void) +{ + uint64_t x; + __asm__ volatile (".byte 0x0f, 0x31" : "=A" (x)); + return x; +} + +#elif defined(__x86_64__) + +static inline uint64_t perf_cpucycles(void) +{ + uint32_t hi, lo; + __asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi)); + return ((uint64_t)lo)|(((uint64_t)hi)<<32); +} +#else + +uint64_t perf_cpucycles(void); + +#endif + +void perf_init(void); +void perf_fini(void); + +#endif // H_PERF |