1*d4514f0bSApple OSS Distributions #ifndef BENCHMARK_PERF_HELPERS_H 2*d4514f0bSApple OSS Distributions #define BENCHMARK_PERF_HELPERS_H 3*d4514f0bSApple OSS Distributions 4*d4514f0bSApple OSS Distributions /* 5*d4514f0bSApple OSS Distributions * Utility functions and constants used by perf tests. 6*d4514f0bSApple OSS Distributions */ 7*d4514f0bSApple OSS Distributions #include <inttypes.h> 8*d4514f0bSApple OSS Distributions #include <time.h> 9*d4514f0bSApple OSS Distributions #include <stdbool.h> 10*d4514f0bSApple OSS Distributions 11*d4514f0bSApple OSS Distributions /* 12*d4514f0bSApple OSS Distributions * mmap an anonymous chunk of memory. 13*d4514f0bSApple OSS Distributions */ 14*d4514f0bSApple OSS Distributions unsigned char *mmap_buffer(size_t size); 15*d4514f0bSApple OSS Distributions /* 16*d4514f0bSApple OSS Distributions * Returns a - b in microseconds. 17*d4514f0bSApple OSS Distributions * NB: a must be >= b 18*d4514f0bSApple OSS Distributions */ 19*d4514f0bSApple OSS Distributions uint64_t timespec_difference_us(const struct timespec* a, const struct timespec* b); 20*d4514f0bSApple OSS Distributions /* 21*d4514f0bSApple OSS Distributions * Print the message to stdout along with the current time. 22*d4514f0bSApple OSS Distributions * Also flushes stdout so that the log can help detect hangs. Don't call 23*d4514f0bSApple OSS Distributions * this function from within the measured portion of the benchmark as it will 24*d4514f0bSApple OSS Distributions * pollute your measurement. 25*d4514f0bSApple OSS Distributions * 26*d4514f0bSApple OSS Distributions * NB: Will only log if verbose == true. 27*d4514f0bSApple OSS Distributions */ 28*d4514f0bSApple OSS Distributions void benchmark_log(bool verbose, const char *restrict fmt, ...) __attribute__((format(printf, 2, 3))); 29*d4514f0bSApple OSS Distributions 30*d4514f0bSApple OSS Distributions static const uint64_t kNumMicrosecondsInSecond = 1000UL * 1000; 31*d4514f0bSApple OSS Distributions static const uint64_t kNumNanosecondsInMicrosecond = 1000UL; 32*d4514f0bSApple OSS Distributions static const uint64_t kNumNanosecondsInSecond = kNumNanosecondsInMicrosecond * kNumMicrosecondsInSecond; 33*d4514f0bSApple OSS Distributions /* Get a (wall-time) timestamp in nanoseconds */ 34*d4514f0bSApple OSS Distributions #define current_timestamp_ns() (clock_gettime_nsec_np(CLOCK_MONOTONIC_RAW)); 35*d4514f0bSApple OSS Distributions 36*d4514f0bSApple OSS Distributions unsigned int get_ncpu(void); 37*d4514f0bSApple OSS Distributions 38*d4514f0bSApple OSS Distributions #endif /* !defined(BENCHMARK_PERF_HELPERS_H) */ 39