[PATCH 4/6] Do not use HP_TIMING_NOW for random bits
Wilco Dijkstra
Wilco.Dijkstra@arm.com
Wed Feb 13 13:57:00 GMT 2019
Hi Adhemerval,
This looks good. One comment though:
+/* Provides fast pseudo-random bits through clock_gettime. It has unspecified
+ starting time, nano-second accuracy, its randomness is significantly better
+ than gettimeofday, and for mostly architectures it is implemented through
+ vDSO instead of a syscall. */
+static inline uint64_t
+random_bits (void)
+{
+ struct timespec tv;
+ __clock_gettime (CLOCK_MONOTONIC, &tv);
+ return tv.tv_nsec + UINT64_C(1000000000) * tv.tv_sec;
+}
It might be better to just return 32 bits given the top bits are going to be mostly
identical. Also it makes sense to shuffle the bits slightly given most code relies
on the low bits being the most random, but if the increment is a multiple of a ns
the low bits may never change. Something like:
tmp = tv.tv_nsec ^ tv.tv_sec;
tmp ^= (tmp << 24) | (tmp >> 8);
Wilco
More information about the Libc-alpha
mailing list