10 #include "vm/perf_helpers.h"
12 #define K_CTIME_BUFFER_LEN 26
14 benchmark_log(bool verbose
, const char *restrict fmt
, ...)
17 char time_buffer
[K_CTIME_BUFFER_LEN
];
21 strncpy(time_buffer
, "UNKNOWN", K_CTIME_BUFFER_LEN
);
25 struct tm
* ret
= localtime_r(&now
, &local_time
);
26 if (ret
== &local_time
) {
27 snprintf(time_buffer
, K_CTIME_BUFFER_LEN
,
28 "%.2d/%.2d/%.2d %.2d:%.2d:%.2d",
29 local_time
.tm_mon
+ 1, local_time
.tm_mday
,
30 local_time
.tm_year
+ 1900,
31 local_time
.tm_hour
, local_time
.tm_min
,
36 printf("%s: ", time_buffer
);
44 timespec_difference_us(const struct timespec
* a
, const struct timespec
* b
)
46 assert(a
->tv_sec
>= b
->tv_sec
|| a
->tv_nsec
>= b
->tv_nsec
);
47 long seconds_elapsed
= a
->tv_sec
- b
->tv_sec
;
48 uint64_t nsec_elapsed
;
49 if (b
->tv_nsec
> a
->tv_nsec
) {
51 nsec_elapsed
= kNumNanosecondsInSecond
- (uint64_t) (b
->tv_nsec
- a
->tv_nsec
);
53 nsec_elapsed
= (uint64_t) (a
->tv_nsec
- b
->tv_nsec
);
55 return (uint64_t) seconds_elapsed
* kNumMicrosecondsInSecond
+ nsec_elapsed
/ kNumNanosecondsInMicrosecond
;
59 mmap_buffer(size_t memsize
)
62 unsigned char* addr
= (unsigned char *)mmap(NULL
, memsize
, PROT_READ
| PROT_WRITE
, MAP_ANON
| MAP_PRIVATE
,
64 if ((void*) addr
== MAP_FAILED
) {
65 fprintf(stderr
, "Unable to mmap a memory object: %s\n", strerror(errno
));