7 #include <sys/sysctl.h>
11 #include "benchmark/helpers.h"
13 #define K_CTIME_BUFFER_LEN 26
15 benchmark_log(bool verbose
, const char *restrict fmt
, ...)
18 char time_buffer
[K_CTIME_BUFFER_LEN
];
22 strncpy(time_buffer
, "UNKNOWN", K_CTIME_BUFFER_LEN
);
26 struct tm
* ret
= localtime_r(&now
, &local_time
);
27 if (ret
== &local_time
) {
28 snprintf(time_buffer
, K_CTIME_BUFFER_LEN
,
29 "%.2d/%.2d/%.2d %.2d:%.2d:%.2d",
30 local_time
.tm_mon
+ 1, local_time
.tm_mday
,
31 local_time
.tm_year
+ 1900,
32 local_time
.tm_hour
, local_time
.tm_min
,
37 printf("%s: ", time_buffer
);
45 timespec_difference_us(const struct timespec
* a
, const struct timespec
* b
)
47 assert(a
->tv_sec
>= b
->tv_sec
|| a
->tv_nsec
>= b
->tv_nsec
);
48 long seconds_elapsed
= a
->tv_sec
- b
->tv_sec
;
49 uint64_t nsec_elapsed
;
50 if (b
->tv_nsec
> a
->tv_nsec
) {
52 nsec_elapsed
= kNumNanosecondsInSecond
- (uint64_t) (b
->tv_nsec
- a
->tv_nsec
);
54 nsec_elapsed
= (uint64_t) (a
->tv_nsec
- b
->tv_nsec
);
56 return (uint64_t) seconds_elapsed
* kNumMicrosecondsInSecond
+ nsec_elapsed
/ kNumNanosecondsInMicrosecond
;
60 mmap_buffer(size_t memsize
)
63 unsigned char* addr
= (unsigned char *)mmap(NULL
, memsize
, PROT_READ
| PROT_WRITE
, MAP_ANON
| MAP_PRIVATE
,
65 if ((void*) addr
== MAP_FAILED
) {
66 fprintf(stderr
, "Unable to mmap a memory object: %s\n", strerror(errno
));
76 size_t length
= sizeof(ncpu
);
78 int ret
= sysctlbyname("hw.ncpu", &ncpu
, &length
, NULL
, 0);
80 fprintf(stderr
, "failed to query hw.ncpu");