There is a bug in a file sysinfo.cc in a function ReadIntFromFile which is used to read CPU frequency from files /sys/devices/system/cpu/cpu0/tsc_freq_khz and /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq. Here is the code of the function:
// Helper function for reading an int from a file. Returns true if successful
// and the memory location pointed to by value is set to the value read.
bool ReadIntFromFile(const char* file, long* value) {
bool ret = false;
int fd = open(file, O_RDONLY);
if (fd != -1) {
char line[1024];
char* err;
memset(line, '\0', sizeof(line));
CHECK(read(fd, line, sizeof(line) - 1));
const long temp_value = strtol(line, &err, 10);
if (line[0] != '\0' && (*err == '\n' || *err == '\0')) {
*value = temp_value;
ret = true;
}
close(fd);
}
return ret;
}
Macro CHECK usage is wrong. Here is its code:
// The CHECK macro returns a std::ostream object that can have extra information
// written to it.
#ifndef NDEBUG
#define CHECK(b) \
(b ? ::benchmark::internal::GetNullLogInstance() \
: ::benchmark::internal::CheckHandler(#b, __FILE__, __func__, __LINE__) \
.GetLog())
#else
#define CHECK(b) ::benchmark::internal::GetNullLogInstance()
#endif
This bug results in no call to read(fd, line, sizeof(line) - 1) function in release mode when NDEBUG is defined.
This was discovered when I tried to run the benchmark on Raspberry Pi 3 with Ubuntu installed on it and got 77 MHz frequency, while it has 1200 MHz. It was because BogoMIPS frequency was used from /proc/cpuinfo file while /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq had the right frequency in it. I will submit a patch for this issue shortly.
There is a bug in a file
sysinfo.ccin a functionReadIntFromFilewhich is used to read CPU frequency from files/sys/devices/system/cpu/cpu0/tsc_freq_khzand/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq. Here is the code of the function:Macro
CHECKusage is wrong. Here is its code:This bug results in no call to
read(fd, line, sizeof(line) - 1)function in release mode when NDEBUG is defined.This was discovered when I tried to run the benchmark on Raspberry Pi 3 with Ubuntu installed on it and got 77 MHz frequency, while it has 1200 MHz. It was because BogoMIPS frequency was used from
/proc/cpuinfofile while/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freqhad the right frequency in it. I will submit a patch for this issue shortly.